Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 1098

[Удален]  
Artyom Trishkin:

..................      

У ордера тоже есть свой тикет. Как и у сделки и позиции. Но у позиции есть ещё и идентификатор. Идентификатор позиции всегда будет равен тикету самого первого её ордера - приказа на открытие этой позиции.

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

У сделки есть тикет (её тикет), есть идентификатор ордера - в результате которого была совершена эта сделка, и есть идентификатор позиции - позиция, которая появилась в результате совершения этой сделки, либо позиция, которая была изменена в результате совершения этой сделки

У позиции есть тикет, который ей присваивается при открытии или изменении. Если позиция только открыта, то её тикет будет равен её идентификатору - уникальному номеру позиции, который не изменяется на протяжении всей жизни позиции. В то время как тикет у позиции может неоднократно изменяться и соответствовать тикету ордера - в результате срабатывания этого ордера появляется новая сделка, которая изменяет эту позицию - тикет этого ордера присваивается тикету позиции.

Если внимательно понаблюдать за всеми этими метаморфозами в позиции, то мы легко увидим поведение позиции в mql4 при её частичных закрытиях - там тоже меняется её тикет.

Это получается, что несоответствие получалось из-за задержки превращения ордера в сделку - позицию? Даже в тестере?... Офигеть. 

Значит, после выставления ордера ещё нужно убедиться, что позиция открылась... А сколько ждать нужно? Это нужно подвешивать сову до подтверждения всех превращений? Или как это вообще?

 
Сергей Таболин:

Это получается, что несоответствие получалось из-за задержки превращения ордера в сделку - позицию? Даже в тестере?... Офигеть. 

Значит, после выставления ордера ещё нужно убедиться, что позиция открылась... А сколько ждать нужно? Это нужно подвешивать сову до подтверждения всех превращений? Или как это вообще?

Выставили торговый приказ (запомнили тикет сделки) и взвели флаг ожидания - как только в OnTradeTransaction получили гарантированное срабатывание - тип транзакции TRADE_TRANSACTION_DEAL_ADD - проверяем тикет сделки. Если всё сошлось - ладушки. 

Это реальная жизнь - события могут приходить с различным интервалом, возможно обрывы связи ... Да куча всего может быть. Это реальность - нет жесткой цепочки.

[Удален]  
Vladimir Karputov:

Выставили торговый приказ (запомнили тикет сделки) и взвели флаг ожидания - как только в OnTradeTransaction получили гарантированное срабатывание - тип транзакции TRADE_TRANSACTION_DEAL_ADD - проверяем тикет сделки. Если всё сошлось - ладушки. 

Это реальная жизнь - события могут приходить с различным интервалом, возможно обрывы связи ... Да куча всего может быть. Это реальность - нет жесткой цепочки.

Ну это же, по сути, подвешивание советника... Ждать пока придёт или не придёт подтверждение... Что то я прям растерялся... Как организовать это ожидание? Через while() ?

 
Сергей Таболин:

Ну это же, по сути, подвешивание советника... Ждать пока придёт или не придёт подтверждение... Что то я прям растерялся... Как организовать это ожидание? Через while() ?

Нет. Sleep и While запрещены категорически.

[Удален]  
Vladimir Karputov:

Нет. Sleep и While запрещены категорически.

О как. А как?

 
Сергей Таболин:

Ну это же, по сути, подвешивание советника... Ждать пока придёт или не придёт подтверждение... Что то я прям растерялся... Как организовать это ожидание? Через while() ?

Ничего подвешивать никуда не нужно.

В MQL4 некоторые шаги открытия позиции просто сокрыты от пользователя в отличие от MQL5.

В MQL4 вы

  1. отослали ордер и
  2. получили ответ от сервера в виде либо отказа исполнения, либо тикет открытой позиции.

В MQL5 вы

  1. отослали ордер и получили ответ о результате его постановки в очередь на исполнение.
  2. Затем получили ответ о срабатывании этого ордера (о факте совершения сделки) и
  3. в итоге получили позицию, тикет и идентификатор которой прописаны в сделке.

Это вкратце если. Таким образом - в MQL4 некоторые шаги от вас сокрыты, и терминал после отправки торгового запроса на сервер впадает в ожидание ответа - ожидание, о котором вы говорите. Таким образом - эта команда всегда заставляет вас ожидать результат торгового запроса и тормозит все ваши действия - больше вы ничего не сможете делать после отправки запроса, пока не дождётесь ответа от сервера.

В MQL5 вы можете ничего не ожидать, а продолжать выполнять другие действия, одновременно контролируя результат вашего торгового запроса. Это гораздо выгоднее, чем в MQL4. Главное - с умом пользоваться.

 
Artyom Trishkin:

Это гораздо выгоднее, чем в MQL4. Главное - с умом пользоваться. 

В MT4 часто ощущаете отсутствие этой выгоды?

 
Граждане - не сорим в ветке. Читаем название: MQL5.
 
Vladimir Karputov:
Граждане - не сорим в ветке. Читаем название: MQL5.

А сравнивать возможности можно?

 
fxsaber:

В MT4 часто ощущаете отсутствие этой выгоды?

Да, бывало.