Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Вот и думаю теперь, как перебрать ВСЕ ордера по ОДНОМУ разу.
Хз. стараться писать так чтобы подобные соскоки не приводили к критичным последствиям.
Как вариант - разносить ботов по разным счетам. вероятность уменьшится, но минус диверсификация и усложнение управления счетами.
Как вариант - разносить ботов по разным счетам.
Тогда запрещать, например, expiration отложек. В общем, костыль.
Основополагающая необходимость с такой печальной особенностью. Видимо, через снепшоты делать как-то.
Спасибо за подробный ответ! Вот и думаю теперь, как перебрать ВСЕ ордера по ОДНОМУ разу.
может запомнить первый и последний ордер ( тикет )?
и после окончания цикла проверить, что первый и последний ордер имеют те же тикеты, что и перед подсчетом
ЗЫ: по логике за вот такую коллизию должен и отвечать OrderSelect() - вернуть false в случае если изменилась таблица ордеров, но даже не припомню, чтобы где то читал на форуме, что у кого-нибудь OrderSelect() вернул false, как и обработчиков ошибки OrderSelect() тоже не встречал
может запомнить первый и последний ордер ( тикет )?
Без полного запоминания последовательности тикетов такое решение будет давать сбои.
Без полного запоминания последовательности тикетов такое решение будет давать сбои.
а полное запоминание тикетов тоже будет давать сбои ибо пока бежим по циклу, может измениться состояние ордеров которые уже обработали
я конечно не уверен, но если будет закрыт ордер когда мы в цикле, то изменится OrderTotal()
если закроется ордер и откроется новый, тогда изменится тикет и/или OrderSelect(0) или OrderSelect(OrderTotal()-1)
а по Вашему мнению, какая ситуация может произойти, чтобы остались прежние "крайние ордера" и сам OrderTotal() ?
а по Вашему мнению, какая ситуация может произойти, чтобы остались прежние "крайние ордера" и сам OrderTotal() ?
Скорее всего, OrdersTotal поменяется при перетряхивании таблицы ордеров.
А так возможна доливка лимитника с порождением дополнительной позиции.
может запомнить первый и последний ордер ( тикет )?
запоминание первого ничего не дает
Существует ли теоретическая возможность, что данный код пропустит какой-то ордер, что существовал ДО и ПОСЛЕ вызова функции? Или же учтет дважды.
Т.е. что происходит с индексацией, когда во время перебора какой-то ордер удалится или появится?
я собираю массив тикетов и работаю с ним.
Если произошло изменение OrdersTotal, или Баланса, или Маржи - значит нужно пересобрать список заново.
то есть ЕА всегда работает только со своими, отобранными тикетами
запоминание первого ничего не дает
это особенности реализации архитектуры , которые не документированы и никто не гарантирует в дальнейшем...
по сабжу, запомнить OrderTotal() и OrdersHistoryTotal() , и тикеты крайних ордеров
если после расчетов в цикле изменились эти значения, то обрабатываем
но универсального и надежного решения не может быть, тут задача угадать что произойдет на сервере, как доставляются данные по сети, да и что творится на соседних чартах в терминале ))))
единственное на что надеяться, так на скорость работы OrderSelect() - если правильно помню, то более миллиона вызовов в секунду
Без полного запоминания последовательности тикетов такое решение будет давать сбои.
Запоминать может и не дорого, а вот отслеживать состояние полное может быть дорого. Согласен с предыдущими, снижать нагрузку логикой разумности и приоритетов.
Асинхронный мир, в котором и мы живем, не гарантирует порядок ответов порядку запросов, и вообще порядка не гарантирует.