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

 
Igor Makanu:

Благодарю!

Да это и искал решение если не получилось с помощью СБ в "пять строк" написать

Но сколько я понял, что одной СБ CTrade не получится решить мою задачу?  И нужно было еще и CPositionInfo использовать? - если хочу по нескольким ТФ одновременно 9 позиций сопровождать?

ЗЫ: сижу со смарт ТВ справку MQL5 листаю - довольно неплохо описаны торговые функции, использование СБ под вопросом.... примитивные стратегии вроде имеет смысл использовать СБ, чуть сложнее - функционал недостаточен или не очевидное использование, возможно нужна практика - попробую еще "покрутить" СБ


Еще раз Спасибо!

Для "открыть-закрыть позицию" в тестере - норм, ну или для учебных кодов как замена. В остальном - своё делать нужно или наследоваться от CTrade для организации своего полноценного класса для проведения торговых операций с учётом различных нюансов.
В СБ есть гораздо более приятные вещи - вы о них знаете и используете.

 
fxsaber:

Там нет ошибки, т.к. список сформирован через HistorySelectByPosition.

Да, упустил из виду, что это не полный список.

 
Artyom Trishkin:

В СБ есть гораздо более приятные вещи - вы о них знаете и используете.

так вот эти приятные вещи и вводят в заблуждение! - была надежда, что за столько лет СБ разработчики вылизали и сделали ожидаемый функционал, а я просто юзвер который не сумел воспользоваться в 2 клика СБ, но оказалось, что не я юзвер - грусть-печаль в общем!!! 

ЗЫ: справка MQL5 очень изощренно написана, сплошные ордера... а ведь говорили - пока не забудешь слово ордер, ты безнадежен!!! 

 
Igor Makanu:

так вот эти приятные вещи и вводят в заблуждение! - была надежда, что за столько лет СБ разработчики вылизали и сделали ожидаемый функционал, а я просто юзвер который не сумел воспользоваться в 2 клика СБ, но оказалось, что не я юзвер - грусть-печаль в общем!!! 

ЗЫ: справка MQL5 очень изощренно написана, сплошные ордера... а ведь говорили - пока не забудешь слово ордер, ты безнадежен!!! 

Тут всё просто. Ордер -> сделка -> позиция. В MQL5 от ордеров тоже никуда не деться - они есть, и с них всё начинается. Отсылаем торговый приказ на сервер (это и есть ордер), сервер его принимает/не принимает и возвращает код. Иногда - при неверном составлении запроса, ордер вообще не отправляется на сервер - его отправка блокируется на уровне терминала. После того, как ордер успешно отправлен на сервер и поставлен в очередь на исполнение, мы ожидаем срабатывание этого ордера (его исполнение, иными словами - сделка), в результате совершения сделки (срабатывания ордера - маркет-, или отложенного), образуется позиция (не всегда - на неттинге, и при условии наличия позиции в том же направлении, просто добавляется объём к существующей, если в обратном направлении, то в зависимости от объёма совершённой сделки, текущая позиция либо частично закрывается, либо закрывается, либо переворачивается)

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

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

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

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

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

 
Artyom Trishkin:

Если внимательно понаблюдать за всеми этими метаморфозами в позиции

Спасибо! Вот и наблюдаю второй день, но тут только практика нужна, вот за сегодня с СБ разобрался...ну в общем разобрался ;)

PS: хорошо объясняешь, однозначно талант!

 
Igor Makanu:

Спасибо! Вот и наблюдаю второй день, но тут только практика нужна, вот за сегодня с СБ разобрался...ну в общем разобрался ;)

PS: хорошо объясняешь, однозначно талант!

Рад помочь ;)

 
Artyom Trishkin:

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

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

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

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

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

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

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

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

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

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

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

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

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

 
Vladimir Karputov:

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

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

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

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

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

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

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