Вопрос о функции OnTradeTransaction - страница 10

 
Alexey Viktorov #:

Это опять «переворот» позиции?

Может это от того, что одна сделка влияет на две позиции? У одной позиции убавляет количество лотов, а у второй прибавляет…


Алексей, не приплетайте сюда позицию. 

TRADE_TRANSACTION_DEAL_ADD

Добавление сделки в историю. Осуществляется в результате исполнения ордера или проведения операций с балансом счета.


Добавление сделки в историю точка

Причём здесь позиция?! Открытие, закрытие или переворот отражается в свойстве DEAL_ENTRY, но не количестве вызовов функции OnTradeTransaction.

Вот логи чистого закрытия путем срабатывания лимитного ордера, если у вас какие то сомнения с переворотом:

CS      0       13:08:27.396    eSyntheticChartLimit (RTS-6.23,M1)      OnTradeTransaction: deal: 17158254   order: 825058054   volume: 2.000000
CS      0       13:08:27.396    eSyntheticChartLimit (RTS-6.23,M1)      OnTradeTransaction: Deal Select   ticket_limit_up: 0   ticket_limit_down: 0
CS      0       13:08:27.396    eSyntheticChartLimit (RTS-6.23,M1)      OnTradeTransaction: Deal Entry: DEAL_ENTRY_OUT   Deal Type: DEAL_TYPE_SELL
CS      0       13:08:27.406    eSyntheticChartLimit (RTS-6.23,M1)      OnTradeTransaction: deal: 17158255   order: 825058054   volume: 1.000000
CS      0       13:08:27.406    eSyntheticChartLimit (RTS-6.23,M1)      OnTradeTransaction: Deal Select   ticket_limit_up: 0   ticket_limit_down: 0
CS      0       13:08:27.406    eSyntheticChartLimit (RTS-6.23,M1)      OnTradeTransaction: Deal Entry: DEAL_ENTRY_OUT   Deal Type: DEAL_TYPE_SELL
CS      0       13:08:27.406    eSyntheticChartLimit (RTS-6.23,M1)      OnTradeTransaction: deal: 17158255   order: 825058054   volume: 1.000000
CS      0       13:08:27.406    eSyntheticChartLimit (RTS-6.23,M1)      OnTradeTransaction: Processed transaction found: 17158255
CS      0       13:08:27.406    eSyntheticChartLimit (RTS-6.23,M1)      OnTradeTransaction: deal: 17158256   order: 825058054   volume: 1.000000
CS      0       13:08:27.406    eSyntheticChartLimit (RTS-6.23,M1)      OnTradeTransaction: Deal Select   ticket_limit_up: 0   ticket_limit_down: 0
CS      0       13:08:27.406    eSyntheticChartLimit (RTS-6.23,M1)      OnTradeTransaction: Deal Entry: DEAL_ENTRY_OUT   Deal Type: DEAL_TYPE_SELL
CS      0       13:08:27.406    eSyntheticChartLimit (RTS-6.23,M1)      OnTradeTransaction: deal: 17158255   order: 825058054   volume: 1.000000
CS      0       13:08:27.406    eSyntheticChartLimit (RTS-6.23,M1)      OnTradeTransaction: Processed transaction found: 17158255
CS      0       13:08:27.407    eSyntheticChartLimit (RTS-6.23,M1)      OnTradeTransaction: deal: 17158256   order: 825058054   volume: 1.000000
CS      0       13:08:27.407    eSyntheticChartLimit (RTS-6.23,M1)      OnTradeTransaction: Processed transaction found: 17158256
CS      0       13:08:27.407    eSyntheticChartLimit (RTS-6.23,M1)      OnTradeTransaction: deal: 17158257   order: 825058054   volume: 1.000000
CS      0       13:08:27.407    eSyntheticChartLimit (RTS-6.23,M1)      OnTradeTransaction: Deal Select   ticket_limit_up: 0   ticket_limit_down: 0
CS      0       13:08:27.407    eSyntheticChartLimit (RTS-6.23,M1)      OnTradeTransaction: Deal Entry: DEAL_ENTRY_OUT   Deal Type: DEAL_TYPE_SELL
CS      0       13:08:27.407    eSyntheticChartLimit (RTS-6.23,M1)      OnTradeTransaction: deal: 17158255   order: 825058054   volume: 1.000000
CS      0       13:08:27.407    eSyntheticChartLimit (RTS-6.23,M1)      OnTradeTransaction: Processed transaction found: 17158255
CS      0       13:08:27.407    eSyntheticChartLimit (RTS-6.23,M1)      OnTradeTransaction: deal: 17158256   order: 825058054   volume: 1.000000
CS      0       13:08:27.407    eSyntheticChartLimit (RTS-6.23,M1)      OnTradeTransaction: Processed transaction found: 17158256
CS      0       13:08:27.407    eSyntheticChartLimit (RTS-6.23,M1)      OnTradeTransaction: deal: 17158257   order: 825058054   volume: 1.000000
CS      0       13:08:27.407    eSyntheticChartLimit (RTS-6.23,M1)      OnTradeTransaction: Processed transaction found: 17158257
CS      0       13:08:27.407    eSyntheticChartLimit (RTS-6.23,M1)      OnTradeTransaction: deal: 17158258   order: 825058054   volume: 2.000000
CS      0       13:08:27.407    eSyntheticChartLimit (RTS-6.23,M1)      OnTradeTransaction: Deal Select   ticket_limit_up: 0   ticket_limit_down: 0
CS      0       13:08:27.407    eSyntheticChartLimit (RTS-6.23,M1)      OnTradeTransaction: Deal Entry: DEAL_ENTRY_OUT   Deal Type: DEAL_TYPE_SELL
CS      0       13:08:27.407    eSyntheticChartLimit (RTS-6.23,M1)      OnTradeTransaction: deal: 17158259   order: 825058055   volume: 2.000000
CS      0       13:08:27.407    eSyntheticChartLimit (RTS-6.23,M1)      OnTradeTransaction: Deal Select   ticket_limit_up: 0   ticket_limit_down: 0
CS      0       13:08:27.407    eSyntheticChartLimit (RTS-6.23,M1)      OnTradeTransaction: Deal Entry: DEAL_ENTRY_OUT   Deal Type: DEAL_TYPE_SELL
CS      0       13:08:27.416    eSyntheticChartLimit (RTS-6.23,M1)      OnTradeTransaction: deal: 17158260   order: 825058055   volume: 5.000000
CS      0       13:08:27.416    eSyntheticChartLimit (RTS-6.23,M1)      OnTradeTransaction: Deal Select   ticket_limit_up: 0   ticket_limit_down: 0
CS      0       13:08:27.416    eSyntheticChartLimit (RTS-6.23,M1)      OnTradeTransaction: Deal Entry: DEAL_ENTRY_OUT   Deal Type: DEAL_TYPE_SELL
Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Свойства сделок
Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Свойства сделок
  • www.mql5.com
Свойства сделок - Торговые константы - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Andrey Kaunov #:


Алексей, не приплетайте сюда позицию. 

TRADE_TRANSACTION_DEAL_ADD

Добавление сделки в историю. Осуществляется в результате исполнения ордера или проведения операций с балансом счета.


Добавление сделки в историю точка

Причём здесь позиция?! Открытие, закрытие или переворот отражается в свойстве DEAL_ENTRY, но не количестве вызовов функции OnTradeTransaction.

Вот логи чистого закрытия путем срабатывания лимитного ордера, если у вас какие то сомнения с переворотом:

Андрей, сделка сама по себе не существует как что-то видимое… Сделка находится между ордером и позицией. Если ордер может существовать без сделки, то позиция никак не обходится без сделки. Любая сделка так или иначе оказывает какое-то действие с позицией. Иначе не бывает.

 

Алексей, какое это имеет отношение ко всему описанному на предыдущих трёх страницах ветки?

Вам стоит статью почитать, ссылку на которую любезно предоставил Владимир на 8 странице.

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

 
Andrey Kaunov #:

Алексей, какое это имеет отношение ко всему описанному на предыдущих трёх страницах ветки?

Вам стоит статью почитать, ссылку на которую любезно предоставил Владимир на 8 странице.

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

Да просто не ответил бы сам и всё было-бы понятно. Нет проблем…

 

Неожиданно для себя нашел закономерность в повторных ошибочных вызовах функции OnTradeTransaction.

Разберу на примере последнего лога, он самый первый на этой странице.

Первой добавляется в историю сделка № 17158254 (подчёркнуто), здесь нет никаких проблем. Функция  OnTradeTransaction вызывается подсистемой терминала однократно

CS      0       13:08:27.396    eSyntheticChartLimit (RTS-6.23,M1)      OnTradeTransaction: deal: 17158254   order: 825058054   volume: 2.000000
CS      0       13:08:27.396    eSyntheticChartLimit (RTS-6.23,M1)      OnTradeTransaction: Deal Select   ticket_limit_up: 0   ticket_limit_down: 0
CS      0       13:08:27.396    eSyntheticChartLimit (RTS-6.23,M1)      OnTradeTransaction: Deal Entry: DEAL_ENTRY_OUT   Deal Type: DEAL_TYPE_SELL

Следующей добавляется в историю сделка № 17158255 (подчёркнуто). Функция OnTradeTransaction вызывается подсистемой терминала по этому событию, а следом за за этим сразу же вызывается повторно (обратите внимание на таймкод слева) 

CS      0       13:08:27.396    eSyntheticChartLimit (RTS-6.23,M1)      OnTradeTransaction: deal: 17158254   order: 825058054   volume: 2.000000
CS      0       13:08:27.396    eSyntheticChartLimit (RTS-6.23,M1)      OnTradeTransaction: Deal Select   ticket_limit_up: 0   ticket_limit_down: 0
CS      0       13:08:27.396    eSyntheticChartLimit (RTS-6.23,M1)      OnTradeTransaction: Deal Entry: DEAL_ENTRY_OUT   Deal Type: DEAL_TYPE_SELL
CS      0       13:08:27.406    eSyntheticChartLimit (RTS-6.23,M1)      OnTradeTransaction: deal: 17158255   order: 825058054   volume: 1.000000
CS      0       13:08:27.406    eSyntheticChartLimit (RTS-6.23,M1)      OnTradeTransaction: Deal Select   ticket_limit_up: 0   ticket_limit_down: 0
CS      0       13:08:27.406    eSyntheticChartLimit (RTS-6.23,M1)      OnTradeTransaction: Deal Entry: DEAL_ENTRY_OUT   Deal Type: DEAL_TYPE_SELL
CS      0       13:08:27.406    eSyntheticChartLimit (RTS-6.23,M1)      OnTradeTransaction: deal: 17158255   order: 825058054   volume: 1.000000
CS      0       13:08:27.406    eSyntheticChartLimit (RTS-6.23,M1)      OnTradeTransaction: Processed transaction found: 17158255

Далее добавляется в историю третья сделка № 17158256 (подчёркнуто). Функция OnTradeTransaction вызывается как и положено по этому событию. А следом вызывается по событию добавления предыдущей сделки № 17158255, и сразу же дублируется вызов по добавлению  сделки № 17158256

CS      0       13:08:27.396    eSyntheticChartLimit (RTS-6.23,M1)      OnTradeTransaction: deal: 17158254   order: 825058054   volume: 2.000000
CS      0       13:08:27.396    eSyntheticChartLimit (RTS-6.23,M1)      OnTradeTransaction: Deal Select   ticket_limit_up: 0   ticket_limit_down: 0
CS      0       13:08:27.396    eSyntheticChartLimit (RTS-6.23,M1)      OnTradeTransaction: Deal Entry: DEAL_ENTRY_OUT   Deal Type: DEAL_TYPE_SELL
CS      0       13:08:27.406    eSyntheticChartLimit (RTS-6.23,M1)      OnTradeTransaction: deal: 17158255   order: 825058054   volume: 1.000000
CS      0       13:08:27.406    eSyntheticChartLimit (RTS-6.23,M1)      OnTradeTransaction: Deal Select   ticket_limit_up: 0   ticket_limit_down: 0
CS      0       13:08:27.406    eSyntheticChartLimit (RTS-6.23,M1)      OnTradeTransaction: Deal Entry: DEAL_ENTRY_OUT   Deal Type: DEAL_TYPE_SELL
CS      0       13:08:27.406    eSyntheticChartLimit (RTS-6.23,M1)      OnTradeTransaction: deal: 17158255   order: 825058054   volume: 1.000000
CS      0       13:08:27.406    eSyntheticChartLimit (RTS-6.23,M1)      OnTradeTransaction: Processed transaction found: 17158255
CS      0       13:08:27.406    eSyntheticChartLimit (RTS-6.23,M1)      OnTradeTransaction: deal: 17158256   order: 825058054   volume: 1.000000
CS      0       13:08:27.406    eSyntheticChartLimit (RTS-6.23,M1)      OnTradeTransaction: Deal Select   ticket_limit_up: 0   ticket_limit_down: 0
CS      0       13:08:27.406    eSyntheticChartLimit (RTS-6.23,M1)      OnTradeTransaction: Deal Entry: DEAL_ENTRY_OUT   Deal Type: DEAL_TYPE_SELL
CS      0       13:08:27.406    eSyntheticChartLimit (RTS-6.23,M1)      OnTradeTransaction: deal: 17158255   order: 825058054   volume: 1.000000
CS      0       13:08:27.406    eSyntheticChartLimit (RTS-6.23,M1)      OnTradeTransaction: Processed transaction found: 17158255
CS      0       13:08:27.407    eSyntheticChartLimit (RTS-6.23,M1)      OnTradeTransaction: deal: 17158256   order: 825058054   volume: 1.000000
CS      0       13:08:27.407    eSyntheticChartLimit (RTS-6.23,M1)      OnTradeTransaction: Processed transaction found: 17158256

Далее в историю добавляется четвёртая сделка № 17158257 (подчёркнуто). Функция вызывается по ней (как и положено), затем вызывается по сделкам №№ 17158255, 17158256, и потом дублируется по ней же № 17158257

CS      0       13:08:27.396    eSyntheticChartLimit (RTS-6.23,M1)      OnTradeTransaction: deal: 17158254   order: 825058054   volume: 2.000000
CS      0       13:08:27.396    eSyntheticChartLimit (RTS-6.23,M1)      OnTradeTransaction: Deal Select   ticket_limit_up: 0   ticket_limit_down: 0
CS      0       13:08:27.396    eSyntheticChartLimit (RTS-6.23,M1)      OnTradeTransaction: Deal Entry: DEAL_ENTRY_OUT   Deal Type: DEAL_TYPE_SELL
CS      0       13:08:27.406    eSyntheticChartLimit (RTS-6.23,M1)      OnTradeTransaction: deal: 17158255   order: 825058054   volume: 1.000000
CS      0       13:08:27.406    eSyntheticChartLimit (RTS-6.23,M1)      OnTradeTransaction: Deal Select   ticket_limit_up: 0   ticket_limit_down: 0
CS      0       13:08:27.406    eSyntheticChartLimit (RTS-6.23,M1)      OnTradeTransaction: Deal Entry: DEAL_ENTRY_OUT   Deal Type: DEAL_TYPE_SELL
CS      0       13:08:27.406    eSyntheticChartLimit (RTS-6.23,M1)      OnTradeTransaction: deal: 17158255   order: 825058054   volume: 1.000000
CS      0       13:08:27.406    eSyntheticChartLimit (RTS-6.23,M1)      OnTradeTransaction: Processed transaction found: 17158255
CS      0       13:08:27.406    eSyntheticChartLimit (RTS-6.23,M1)      OnTradeTransaction: deal: 17158256   order: 825058054   volume: 1.000000
CS      0       13:08:27.406    eSyntheticChartLimit (RTS-6.23,M1)      OnTradeTransaction: Deal Select   ticket_limit_up: 0   ticket_limit_down: 0
CS      0       13:08:27.406    eSyntheticChartLimit (RTS-6.23,M1)      OnTradeTransaction: Deal Entry: DEAL_ENTRY_OUT   Deal Type: DEAL_TYPE_SELL
CS      0       13:08:27.406    eSyntheticChartLimit (RTS-6.23,M1)      OnTradeTransaction: deal: 17158255   order: 825058054   volume: 1.000000
CS      0       13:08:27.406    eSyntheticChartLimit (RTS-6.23,M1)      OnTradeTransaction: Processed transaction found: 17158255
CS      0       13:08:27.407    eSyntheticChartLimit (RTS-6.23,M1)      OnTradeTransaction: deal: 17158256   order: 825058054   volume: 1.000000
CS      0       13:08:27.407    eSyntheticChartLimit (RTS-6.23,M1)      OnTradeTransaction: Processed transaction found: 17158256
CS      0       13:08:27.407    eSyntheticChartLimit (RTS-6.23,M1)      OnTradeTransaction: deal: 17158257   order: 825058054   volume: 1.000000
CS      0       13:08:27.407    eSyntheticChartLimit (RTS-6.23,M1)      OnTradeTransaction: Deal Select   ticket_limit_up: 0   ticket_limit_down: 0
CS      0       13:08:27.407    eSyntheticChartLimit (RTS-6.23,M1)      OnTradeTransaction: Deal Entry: DEAL_ENTRY_OUT   Deal Type: DEAL_TYPE_SELL
CS      0       13:08:27.407    eSyntheticChartLimit (RTS-6.23,M1)      OnTradeTransaction: deal: 17158255   order: 825058054   volume: 1.000000
CS      0       13:08:27.407    eSyntheticChartLimit (RTS-6.23,M1)      OnTradeTransaction: Processed transaction found: 17158255
CS      0       13:08:27.407    eSyntheticChartLimit (RTS-6.23,M1)      OnTradeTransaction: deal: 17158256   order: 825058054   volume: 1.000000
CS      0       13:08:27.407    eSyntheticChartLimit (RTS-6.23,M1)      OnTradeTransaction: Processed transaction found: 17158256
CS      0       13:08:27.407    eSyntheticChartLimit (RTS-6.23,M1)      OnTradeTransaction: deal: 17158257   order: 825058054   volume: 1.000000
CS      0       13:08:27.407    eSyntheticChartLimit (RTS-6.23,M1)      OnTradeTransaction: Processed transaction found: 17158257

Далее пошли, как и положено, однократные вызовы функции. Не буду приводить лог, он есть выше. Закономерность налицо, своеобразный каскад нарастающих вызовов функции OnTradeTransaction. Он такой же точно и в двух приведённых мною ранее логах здесь и здесь

Обратите внимание на таймкод. Срабатывание лимитника происходит хоть и по частям, но практически мгновенно, за несколько миллисекунд (причем во всех трёх логах). Может в сверх малом промежутке времени кроется ключ к пониманию этой ошибки?! Возможно подсистема не успевает расставить флаги на сделки, событие добавления которых в историю уже было отправлено на вызов в функцию OnTradeTransaction. Здесь я не компетентен, и строить догадки не буду.

Интересно обратить внимание и на объём сделок. Во всех задублированных вызовах он равен 1 лоту, а 2 и более не дублируются. Но в первом логе сделка № 17157065 тоже не продублировалась, хоть и объём её 1 лот. Но что по объёму есть закономерность, утверждать не буду.

 
Andrey Kaunov #:

Неожиданно для себя нашел закономерность в повторных ошибочных вызовах функции OnTradeTransaction.

Андрей, возможно и ошибаюсь, но надеюсь, что все ответы на Ваши вопросы найдёте в этой статье про OnTradeTransaction.

Особенно мне понравился вот этот абзац статьи:

"... Однако, чтобы объяснить, как это работает, по возможности будем избегать разговоров о данных файла журнала, потому что, если вы попытаетесь увидеть логику, следуя файлам или шаблонам, найденным в файлах журналов, то вы можете сойти с ума. Это связано с тем, что иногда у данных не будет какой-либо закономерности. Причина в том, что эта функция является обработчиком событий. Данные события исходят от торгового сервера, так что забудьте о файлах журнала. Мы сосредоточимся на управлении событиями, которые отправляются с торгового сервера, независимо от порядка их появления..."

С уважением, Владимир.

 
MrBrooklin #:

Андрей, возможно и ошибаюсь, но надеюсь, что все ответы на Ваши вопросы найдёте в этой статье про OnTradeTransaction.

Особенно мне понравился вот этот абзац статьи:

"... Однако, чтобы объяснить, как это работает, по возможности будем избегать разговоров о данных файла журнала, потому что, если вы попытаетесь увидеть логику, следуя файлам или шаблонам, найденным в файлах журналов, то вы можете сойти с ума. Это связано с тем, что иногда у данных не будет какой-либо закономерности. Причина в том, что эта функция является обработчиком событий. Данные события исходят от торгового сервера, так что забудьте о файлах журнала. Мы сосредоточимся на управлении событиями, которые отправляются с торгового сервера, независимо от порядка их появления..."

С уважением, Владимир.

Нет Владимир, дело как раз в том, что журнал заполняется из функции OnTradeTransaction. И соответственно если принимать какое-то решение на основании события, то может получиться принять это решение 2 или 3 и даже больше раз. 

 
MrBrooklin #:

Андрей, возможно и ошибаюсь, но надеюсь, что все ответы на Ваши вопросы найдёте в этой статье про OnTradeTransaction.

Особенно мне понравился вот этот абзац статьи:

"... Однако, чтобы объяснить, как это работает, по возможности будем избегать разговоров о данных файла журнала, потому что, если вы попытаетесь увидеть логику, следуя файлам или шаблонам, найденным в файлах журналов, то вы можете сойти с ума. Это связано с тем, что иногда у данных не будет какой-либо закономерности. Причина в том, что эта функция является обработчиком событий. Данные события исходят от торгового сервера, так что забудьте о файлах журнала. Мы сосредоточимся на управлении событиями, которые отправляются с торгового сервера, независимо от порядка их появления..."

С уважением, Владимир.

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

А тут речь о том, что одно и то же событие, по одной сделке, приходит несколько раз.


Кстати, я у себя храню в стейте тикет последней учтённой сделки.

 
JRandomTrader #:

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

А тут речь о том, что одно и то же событие, по одной сделке, приходит несколько раз.


Кстати, я у себя храню в стейте тикет последней учтённой сделки.

+1!

 
MrBrooklin #:

Андрей, возможно и ошибаюсь, но надеюсь, что все ответы на Ваши вопросы найдёте в этой статье про OnTradeTransaction.

Особенно мне понравился вот этот абзац статьи:

"... Однако, чтобы объяснить, как это работает, по возможности будем избегать разговоров о данных файла журнала, потому что, если вы попытаетесь увидеть логику, следуя файлам или шаблонам, найденным в файлах журналов, то вы можете сойти с ума. Это связано с тем, что иногда у данных не будет какой-либо закономерности. Причина в том, что эта функция является обработчиком событий. Данные события исходят от торгового сервера, так что забудьте о файлах журнала. Мы сосредоточимся на управлении событиями, которые отправляются с торгового сервера, независимо от порядка их появления..."

С уважением, Владимир.

Да, Владимир, Но статьи пишут люди. А людям свойственно ошибаться, заблуждаться или просто иметь собственное мнение. Главную мысль этого абзаца, на мой взгляд, я выделил.

Я отталкиваюсь лишь от правил работы функции, заявленной в документации и на собственных тестах. Если функция несколько раз срабатывает на событие добавления одной уникальной сделки в историю, то какой от неё в таком случае смысл. Проще использовать тогда OnTrade(), и написать все нужные проверки самому как в MQL4.

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