1 (2023-11-20 13:09:19 отредактировано Серёга)

Тема: Помогите найти цену последнего стоп ордера

помогите найти цену нужного ордера
данная функция не находит нужный ордер и находится в постоянном поиске

function last_order()
  local last_order = {}
  local n = getNumberOf("orders")

  while n > 0 do
    local order = getItem("orders", n-1)
    if order.sec_code == n_seccode
         and order.trans_id == n_id 
    then
       last_order = order
       break
       n = n - 1
    end

  end

  return last_order
end

2

Re: Помогите найти цену последнего стоп ордера

помогите найти цену нужного ордера
данная функция не находит нужный ордер и находится в постоянном поиске

function last_order()
  local last_order = {}
  local n = getNumberOf("orders")

  while n > 0 do
    local order = getItem("orders", n-1)
    if order.sec_code == n_seccode
         and order.trans_id == n_id
    then
      last_order = order
      break
      n = n - 1
    end

  end

  return last_order
end

3

Re: Помогите найти цену последнего стоп ордера

помогите найти цену нужного ордера
данная функция не находит нужный ордер и находится в постоянном поиске

4

Re: Помогите найти цену последнего стоп ордера

Вы залогируйте значения order.sec_code и order.trans_id внутри цикла.
Может вы ищите и сравниваете совсем не то, что есть в таблице.
Логирование хотя бы даст информацию для анализа, а так сейчас не понятно как искать проблему.

5 (2023-11-22 01:15:37 отредактировано Серёга)

Re: Помогите найти цену последнего стоп ордера

Спасибо огромное за отклик!
Я только начал грызть гранит lua.
Теперь другая проблема, эта функция не различает активную заявку от не активной.
Надо разбираться как писать функцию SearchItems.
Есть вопро! Робот выставляет заявку, но в комментарии нет комментария который я задавал, отображается только счёт клиента? Я планировал различать заявки активные от не активных по комментарию. Это я где-то здесь вычитал.

6 (2023-11-22 01:28:13 отредактировано Серёга)

Re: Помогите найти цену последнего стоп ордера

Не могу разобраться как правильно писать функцию SearchItems и  fn к ней прилагающейся.
В итоге надо найти последнюю активную заявку.

7

Re: Помогите найти цену последнего стоп ордера

Всё же, какая у вас задача?
Среди всех заявок найти самую последнюю по времени активную? или задача какая-то другая?
Или может вам надо найти последнюю активную по определенному инструменту?

Сформулируйте, пожалуйста.

8 (2023-11-22 11:51:53 отредактировано Серёга)

Re: Помогите найти цену последнего стоп ордера

В таблице заявок каждой заявке присвоин десяти значный порядковый номер. Функция getNumberOf считает общее колличество заявок: активные, не активные. А вот с помощью функции getItem ищем заявку с нужным клиент кодом и названию бумаги ( для точности можно добавить trans_id). Отсчет заявок начинается с " 0 ". Вот эта "нулевая" первая заявка в таблице заявок с самым большим порядковым номером является ПОСЛЕДНЕЙ заявкой. Мне надо найти ПОСЛЕДЮЮ АКТИВНУЮ заявку!
Или получить "nil" если такой нет. Теперь пытаюсь понять как с помощью функции SearchItems и fn можно найти последнюю активную заявку, конечно отсортировав по клиент коду и названию бумаги.
Странно то, что в таблице заявок есть столбец " Состояние ", где отображается активная / не активная, а функция getItem не использует его! По крайней мере в руководстве пользователя я не сумел разобрать.

9 (2023-11-22 11:39:25 отредактировано swerg)

Re: Помогите найти цену последнего стоп ордера

getItem возвращает таблицу Orders
В которой есть поле flags с "битовыми флагами"
В этом поле:
бит 0 (0x1)     -     Заявка активна, иначе – не активна

т.е.

local order = getItem("orders", n-1)
...
if (order.flags & 1) == 1 then
   ... заявка активна
else
   ... заявка не активна
end

PS
Код только для Lua 5.3 и 5.4 ! т.к. используется встроенная битовая операция

10 (2023-11-22 12:54:57 отредактировано Серёга)

Re: Помогите найти цену последнего стоп ордера

Что то я не так пишу! ошибка: attempt to index a nil value (global 'order')

function last_order()
  local last_order = {}
  local n = getNumberOf("orders")

  while n > 0 do
    local n_order = getItem("orders", n-1)
    if n_order.sec_code == n_seccode 
        and n_order.trans_id == n_id
        and  (order.flags & 1) == 1 --<<<
    then
      last_order = n_order
      break
    end
    n = n - 1
  end

  return last_order
end

function main()
  nash_order = last_order()
  cena_order = nash_order.price

  message(""..tostring(cena_order))
  sleep(3000)
 
end

как у Вас получается вставлять код в отдельное окно?

11

Re: Помогите найти цену последнего стоп ордера

ОГРОМНОЕ ЧЕЛОВЕЧЕСКОЕ СПАСИБО!!!!!!!!!!
нашёл свою ошибку! В моём случае (n_order.flags & 1) == 1

12

Re: Помогите найти цену последнего стоп ордера

Серёга пишет:

как у Вас получается вставлять код в отдельное окно?

Добрый день!

Для этого надо выделить текст программы в сообщении и нажать кнопку вставки соответствующего BBCode.
Ну либо руками вписать этот BBCode в текст.

https://quik2dde.ru/static-img/444/code-1.png

13

Re: Помогите найти цену последнего стоп ордера

Всем привет! Отдельный привет swerg!
Оказывается написать логику торгового робота очень не просто! Две недели ломаю голову, как не активную заявку на покупку привязать к активной заявке на продажу, что бы когда активная заявка на продажу станет не активной робот не выставил снова заявку на продажу.
Прошу помощи, я не нахожу решения!