Скачать MetaTrader 5

OnTrade() Вопросы

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Yedelkin
4532
Yedelkin  

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

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

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

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

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

Дмитрий Александрович
1705
Дмитрий Александрович  
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. Параллельно - на сколько я знаю, не могут, последовательность, не знаю.
Vladimir Batrudinov
4930
Vladimir Batrudinov  
Yedelkin:

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

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

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

Vladimir Batrudinov
4930
Vladimir Batrudinov  
Yedelkin:

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

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

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

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

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

MetaQuotes
Админ
25154
Renat Fatkhullin  
Interesting:

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

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

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

Vladimir Batrudinov
4930
Vladimir Batrudinov  
Renat:

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

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

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

PS

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

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

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

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

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

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

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

Валерий
1433
Валерий  
Yedelkin:

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

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


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


12
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий