Отслеживание ордеров.

AlanTrade

Интересующийся
Здравия всем , Господа форумчане.
Столкнулся с необходимостью отслеживать ордера для копировщика и был удивлен сложностью вопроса.

Задача.
Отслеживать открытие, закрытие и модификацию рыночных и отложенных ордеров с возможно минимальной задержкой и нагрузкой на систему.

Возможные варианты решения.
1. Мониторить весь список ордеров каждый тик пока не очень привлекает.

2. В MQL5 есть хорошие функции OnTrade() и OnTradeTransaction(), но в MQL4 аналогов не нашел.

3. Видится привлекательным отслеживать на графике манипуляции с линиями Last ордеров и их TP и SL с помощью OnChartEvent, однако эти объекты не видны и не обрабатываются функцией. Может есть способ их "проявить"?

4. Сейчас думаю над возможностью получения информации из общего лога. Там тоже придется мониторить, но меньше.

Удовлетворительного решения пока не нашел, может, кто уже копал?
 

Ugar

Гуру форума
Прежде чем экономить на спичках, надо подумать стоит ли. Прежде чем экономить ресурсы, стоит подумать о надёжности.
ИМХО, только 1 вариант.
 

AlanTrade

Интересующийся
Не очень понятно. Вы полагаете, возможности терминала и ресурс системы столь велик, что о нем можно не заботиться? Надежность, вроде, как меня учили, тоже падает пропорционально степени равной количеству элементов.
 

Ugar

Гуру форума
Не очень понятно. Вы полагаете, возможности терминала и ресурс системы столь велик, что о нем можно не заботиться? Надежность, вроде, как меня учили, тоже падает пропорционально степени равной количеству элементов.
Надёжность зависит от количества элементов, но не всегда пропорционально. Иногда обратно пропорционально.
Пример, отправки ордера:
1. Минимальное количество элементов: Считаем что все данные корректные. Отправил приказ и забыл. Ведь он же должен исполниться. Логов нет.
2. Больше элементов: Считаем что все данные корректные. Оправил приказ, проверил исполнение, предусмотрел разные варианты действий в случае разных ошибок. Логирование ошибок.
3. Ещё больше элементов. Проверил все поступившие данные на корректность. Предусмотрел действия при получении некорректных данных. Оправил приказ, проверил исполнение, предусмотрел разные варианты действий в случае разных ошибок. Проверил даже ответ от сервера на корректность. Логирование ошибок.

В данных вариантах, чем сложнее, тем надёжнее. 1 вариант самый быстрый, но годится только для тестера, только там идеальные условия.

А вообще, не всё происходит в терминале. Например срабатывание отложенных ордеров, закрытие по стоп лосс и тейк профиту... В этих ситуациях в терминале нет никакой информации о том что это произошло. Только постоянный слежение за ордерами позволит об этом узнать.
 

AlanTrade

Интересующийся
Да, это правильно, но я о несколько другой надежности, когда технические системы выполняют одинаковые функции.
А вообще, не всё происходит в терминале. Например срабатывание отложенных ордеров, закрытие по стоп лосс и тейк профиту... В этих ситуациях в терминале нет никакой информации о том что это произошло. Только постоянный слежение за ордерами позволит об этом узнать.

Не совсем согласен. На графике появляются и исчезают линии установленных ордеров, SL и TP, сообщения в лог.
 

AlanTrade

Интересующийся
Ваше замечание о спичках сподвигло меня на небольшое исследование.
Похоже, вы правы.:unsure:
2020.03.07 08:57:47.576 TestFileRead GBPUSD,H1: 1000000 обращений к файлу 3338 ms

2020.03.07 08:52:30.611 TestСontrolOrder GBPUSD,H1: 1000000 обработок списка ордеров 203 ms
 

Ugar

Гуру форума
Опять же об экономии и надёжности. Что бы отслеживать изменения в списке, нужно сравнить его с предыдущим. А предыдущий лучше держать в памяти, а не на диске, так быстрее. Но в случае перезагрузки, в памяти всё потеряется. По этому, лучше делать бэкап в файле при каждом изменении. А при инициализации считать из файла. Так дисковые операции дадут надёжность, но так как они не частые, работать будет быстро.
 
Верх