OnTrade() Вопросы

 

Функция OnTick() обрабатывает событие NewTick, которое генерируется при приходе новой котировки. Событие NewTick, сгенерированное во время выполнения функции OnTick(), будет проигнорировано советником.

Функция OnTrade() обрабатывает событие Trade, которое генерируется при завершении торговой операции на сервере. Про случаи игнорирования события Trade информации не  нашёл.

Вопрос 1. Правильно ли я понимаю, что в отличие от событий  типа NewTick каждое событие Trade ставится в очередь событий эксперта (т.е. не игнорируется) и что, тем самым, советник обрабатывает все события Trade последовательно, в очередности их поступления? Возможно, с некоторой задержкой.

Вопрос 2. Правильно ли я понимаю, что события Trade, сгенерированные в период потери связи, теряются (по аналогии с потерей событий NewTick)? Т.е. что после восстановления связи сервер такие события не "досылает"?

Вопрос 3. Так как события  NewTick и Trade выглядят взаимно-независимыми, и могут приходить практически одновременно, то каким образом они обрабатываются на стороне терминала: могут ли пришедшие одновременно события NewTick и Trade  обрабатываться функциями OnTick() и  OnTrade() одновременно ("параллельно")? И если не могут, то каким образом (в какой очерёдности) происходит обработка событий в указанном случае (у какой функции больший приоритет)?

 
Yedelkin:

Функция OnTick() обрабатывает событие NewTick, которое генерируется при приходе новой котировки. Событие NewTick, сгенерированное во время выполнения функции OnTick(), будет проигнорировано советником.

Функция OnTrade() обрабатывает событие Trade, которое генерируется при завершении торговой операции на сервере. Про случаи игнорирования события Trade информации не  нашёл.

Вопрос 1. Правильно ли я понимаю, что в отличие от событий  типа NewTick каждое событие Trade ставится в очередь событий эксперта (т.е. не игнорируется) и что, тем самым, советник обрабатывает все события Trade последовательно, в очередности их поступления? Возможно, с некоторой задержкой.

Вопрос 2. Правильно ли я понимаю, что события Trade, сгенерированные в период потери связи, теряются (по аналогии с потерей событий NewTick)? Т.е. что после восстановления связи сервер такие события не "досылает"?

Вопрос 3. Так как события  NewTick и Trade выглядят взаимно-независимыми, и могут приходить практически одновременно, то каким образом они обрабатываются на стороне терминала: могут ли пришедшие одновременно события NewTick и Trade  обрабатываться функциями OnTick() и  OnTrade() одновременно ("параллельно")? И если не могут, то каким образом (в какой очерёдности) происходит обработка событий в указанном случае (у какой функции больший приоритет)?

  1. По моему опыту - в очередь, не пропускаются.
  2. Скорее всего придут после восстановления связи (не уверен)
  3. Параллельно - на сколько я знаю, не могут, последовательность, не знаю.
 
Yedelkin:

Вопрос 3. Так как события  NewTick и Trade выглядят взаимно-независимыми, и могут приходить практически одновременно, то каким образом они обрабатываются на стороне терминала: могут ли пришедшие одновременно события NewTick и Trade  обрабатываться функциями OnTick() и  OnTrade() одновременно ("параллельно")? И если не могут, то каким образом (в какой очерёдности) происходит обработка событий в указанном случае (у какой функции больший приоритет)?

Одновременно точно не могут. Скорей всего Trade должно обрвботвться, а NewTick эксперт должен проигнорировать (как я понимаю это будет правильным).
 

Спасибо за ответы! Видимо, вместо работы с OnTrade() придётся искать/ждать крупицы информации по ней.

 
Yedelkin:

Спасибо за ответы! Видимо, вместо работы с OnTrade() придётся искать/ждать крупицы информации по ней.

Скорей всего ее начинка еще не раз изменится. Вроде разработчики обещали туда параметры добавить (по крайней мере это будет не лишним).
 
Interesting:
Скорей всего ее начинка еще не раз изменится. Вроде разработчики обещали туда параметры добавить (по крайней мере это будет не лишним).
Да, читал вчера ту тему. Три месяца прошло - параметров нет. Даже вопросов задавать не стал.
 
Yedelkin:
Да, читал вчера ту тему. Три месяца прошло - параметров нет. Даже вопросов задавать не стал.

Вряд ли что-то будет в этом направлении производится до конца чемпионата. Ввод параметров ведь потребует перекомпиляции экспертов.

Организаторам это надо?

Сейчас в терминал будут вноситься те изменения и только те которые перекомпиляции экспертов не потребуют. Будем ждать окончание чемпионата...

 
Interesting:

Вроде разработчики обещали туда параметры добавить (по крайней мере это будет не лишним).

Параметры обязательно добавим, но чуть позже.

Сейчас более приоритетными задачами занимаемся.

 
Renat:

Параметры обязательно добавим, но чуть позже.

Сейчас более приоритетными задачами занимаемся.

Да, есть более интересные вещи. Хотелось бы все же получить максимум новшеств связанных с ФА (календарь новостей и прочее), а также получить дополнительные типы ордеров (как минимум взаимоотменяемые).

PS

Еще хочется встроенных функций для работы со статистико, к примеру чтобы Шарпа при помощи специализированной функции - SharpeRatio().

Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров - Документация по MQL5
 

Следующий вопрос, дабы не терять зря время.

Как известно, ордера в терминале делятся на две категории: (1) действующие отложенные ордера и (2) ордера в истории. Как я понимаю, для работы с первой категорией ордеров предназначена функция OrderSelect(), для работы со второй - функция HistoryOrderSelect(). При этом существует описание следующей ошибки:

ERR_TRADE_ORDER_NOT_FOUND  4754 Ордер не найден

Вопрос 4. Правильно ли я понимаю, что появление ошибки 4754 при вызове функции OrderSelect() будет означать отсутствие запрашиваемого ордера в списке действующих отложенных ордеров (ордеров из первой категории), а появление этой же ошибки при вызове функции HistoryOrderSelect() будет означать отсутствие запрашиваемого ордера в истории (т.е. среди ордеров из второй категории)?

Иными словами, правильно ли я понимаю, что если сам по себе ордер существует и находится во второй категории ордеров, то при обращении к этому ордеру с помошью функции OrderSelect() будет в обязательном порядке получена ошибка 4754 (при прочих равных условиях)?  И наоборот, при обращении к ордеру из первой категории с помошью функции HistoryOrderSelect() также будет в обязательном порядке получена ошибка 4754 (при прочих равных условиях)?

 
Yedelkin:

Следующий вопрос, дабы не терять зря время.

Как известно, ордера в терминале делятся на две категории: (1) действующие отложенные ордера и (2) ордера в истории. Как я понимаю, для работы с первой категорией ордеров предназначена функция OrderSelect(), для работы со второй - функция HistoryOrderSelect(). При этом существует описание следующей ошибки:


Есть ещё рыночные ордера, принятые, но ещё не исполненные, находящиеся в обработке.


Причина обращения: