Логика такая. Выставляется заявка на продажу, после сразу перевыставляется стоп(если он стоял ранее).
Когда цена подходит к стопу и стоп срабатывает, снимается заявка на продажу. Стоп представляет из себя просто стоп-заявка "SIMPLE_STOP_ORDER".
Как (пере)выставляется стоп: При выставлении стопа, стопу присваивается уникальный trans_id который отслеживается при выставлении или изменении статуса заявок. В OnStopOrder я вызываю свою функцию updateOrderNumber в которой сравниваю trans_id который пришел с квичка и присваиваю номер заявки stopClass.array_stop.order_num Всё бы хорошо, но я не могу отловить сам результат выполнения стоп заявки, когда стоп исполнился. В моём понимании когда срабатывает стоп, создаётся новая заявка с новым номером заявки которая не равна номеру стопа. Хотелось бы увидеть схему OnStopOrder -> ... -> ... -> здесь признак того что стоп сработал.
Стопы у меня перевыставляемые, как я писал выше и у меня происходит следующая ошибка, которая очень критичная. Приходит информация о срабатывании стопа(заявки ///) -> стоп не снимается потому-что в информации об изменении статуса приходит изменённая информация не соответствующая number и так далее. в итоге робот перевыставляет стоп(потому что видит, что произошла продажа, но заявки висят не снятые), пока не упрётся в лимит по деньгам (лол) . Не могу понять куда копать...
Как и где (OnOrder, OnStopOrder, OnTrade ), по какому окончательному признаку понять что стоп заявка поменяла статус?
xorax написал: Редактировать пост выше нельзя (( Дополню здесь
Корректно ли будет не выставлять стоп-заявки и помечать, что стоп в работе если OnStopOrder flags == 15 (Идет расчет минимума-максимума) ??
Когда идет расчет минимума максимума, номер заявки неизменный, её можно изменить запросто, много раз вручную это делал. При изменении заявки в таблице стоп заявок она меняет цвет с зеленого на красный (из расчета переходит в обычное состояние).
Демидков Юрий написал: Руководство пользователя интерпретатора языка Lua раздел 5.3. Флаги таблицы Стоп заявки
bit 0 Заявка активна, иначе не активна.
бит 1 Заявка снята. Если не установлен и значение бит0 равно 0, значит исполнена.
Сам пока не использовал, но думаю, копать надо здесь. Дальше где-то откопать номер выставленной лимитированной заявки.
Вы не внимательно прочитали мои сообщения. У стоп-заявки много статусов, такие как расчёт цены, выставления лимитной заявки после расчёта цены и так далее. Мне надо понять где правильнее отслеживать состояние и какое состояние является корректным при начале отработки стоп-заявки...
p.s. Слижу за Вашим творчеством, подписан давно на Ваш канал... Молодцы
xorax написал: Редактировать пост выше нельзя (( Дополню здесь
Корректно ли будет не выставлять стоп-заявки и помечать, что стоп в работе если OnStopOrder flags == 15 (Идет расчет минимума-максимума) ??
Когда идет расчет минимума максимума, номер заявки неизменный, её можно изменить запросто, много раз вручную это делал. При изменении заявки в таблице стоп заявок она меняет цвет с зеленого на красный (из расчета переходит в обычное состояние).
Стоп-заявка и лимитная заявка которая выставляется после расчёта цены они разные и логично что они должны иметь разный номер
Демидков Юрий написал: Дальше где-то откопать номер выставленной лимитированной заявки.
Пример для таблицы заявок. linkedorder - в таблице стоп-заявок и есть номер лимитки.
Код
function CheckOrders() -- Функция проверяет таблицу заявок
local gNOf = getNumberOf("orders")-1 -- Номер последней строки в таблице заявок
for i = NumLineTO+1, gNOf, 1 do -- Перебирает строки в таблице заявок начиная от NumLineTO+1
local orders = getItem("orders",i) -- Параметры заявки
...
local num = 0 -- Номер заявки
if bit.test(orders.flags, 0) then -- Заявка активна
num = orders.order_num -- Контроль заявки
end
local stopNum = orders.linkedorder -- Номер стоп-заявки
...
end
end
Демидков Юрий написал: Дальше где-то откопать номер выставленной лимитированной заявки.
Пример для таблицы заявок. linkedorder - в таблице стоп-заявок и есть номер лимитки.
Код
function CheckOrders () -- Функция проверяет таблицу заявок
local gNOf = getNumberOf ( "orders" ) - 1 -- Номер последней строки в таблице заявок
for i = NumLineTO + 1 , gNOf, 1 do -- Перебирает строки в таблице заявок начиная от NumLineTO+1
local orders = getItem ( "orders" ,i) -- Параметры заявки
.. .
local num = 0 -- Номер заявки
if bit.test (orders.flags, 0 ) then -- Заявка активна
num = orders.order_num -- Контроль заявки
end
local stopNum = orders.linkedorder -- Номер стоп-заявки
.. .
end
end
В какой лимитной заявке? Когда выставляется стоп, ни какой лимитной заявки нет. Перечитайте мои сообщения. Лимитная заявка выставляется только после того, как условия выполнились согласно указанным условиям в стоп заявке или в тейке.
Вопрос наверное больше к сапорту Прикинул, мне надо видимо, согласно моим условиям, момент когда цена подошла к стопу и стоп-заявка именно рассчитывает, что стоп сработал и идёт расчёт цены где поставить лимитную заявку. В каком callback методе API должен прийти расчёт с данными по заявке? и будут ли там присутствовать номер и id транкзакции? Не может ли произойти ситуация когда информация о расчёте цены придёт позже того, как заявка на продажу/покупку по стопу выставлена и исполнена или просто же выставлена? Лимитка которая выставляется при исполнения стоп приказа она имеет тот же trans_id, что и стоп приказ?
А может ответы на ваши вопросы внимательнее изучать?)))
Цитата
В какой лимитной заявке? Когда выставляется стоп, ни какой лимитной заявки нет. Лимитная заявка выставляется только после того, как условия выполнились согласно указанным условиям в стоп заявке или в тейке.
Все верно. Теперь нам нужно
Цитата
Всё бы хорошо, но я не могу отловить сам результат выполнения стоп заявки, когда стоп исполнился. В моём понимании когда срабатывает стоп, создаётся новая заявка с новым номером заявки которая не равна номеру стопа. Хотелось бы увидеть схему OnStopOrder -> ... -> ... -> здесь признак того что стоп сработал.
Сработала стоп-заявка - нужно это действие отследить, так? В таблице стоп-заявок есть поля: Номер и Номер заявки. Поле Номер - это номер нашей стоп-заявки, поле Номер заявки - это номер лимитной заявки - данное поле при выставлении стоп-заявки пустое, как только наша стоп-заявка превратится в лимитную - это поле заполнится - номер лимитной заявки - все.