Обнаружение срабатывания стопа в бэктесте OnTradeTransaction

 

Здравствуйте,

Я пытаюсь определить исполнение стопа в моем советнике. К сожалению, я получаю толькоDEAL_ENTRY_IN, предоставленный MqlTradeTransaction, переданный в OnTradeTransaction.

Похоже, что это происходит только в бэктесте.

Кто-нибудь знает, как надежно определить сработавший стоп в бэктесте - лучше всего вместе с ценой и (частичной) прибылью?

Спасибо

Documentation on MQL5: Standard Constants, Enumerations and Structures / Trade Constants / Deal Properties
Documentation on MQL5: Standard Constants, Enumerations and Structures / Trade Constants / Deal Properties
  • www.mql5.com
Standard Constants, Enumerations and Structures / Trade Constants / Deal Properties - Documentation on MQL5
 
chinaski:

Здравствуйте,

Я пытаюсь определить исполнение стопа в моем советнике. К сожалению, я получаю толькоDEAL_ENTRY_IN, предоставленный MqlTradeTransaction, переданный в OnTradeTransaction.

Похоже, что это происходит только в бэктесте.

Кто-нибудь знает, как надежно определить сработавший стоп в бэктесте - лучше всего вместе с ценой и (частичной) прибылью?

Спасибо

В OnTradeTransaction вы должны проверить наличие :

trans.order_state = ORDER_STATE_PLACED;

За ней следует другая сделка с :

trans.type = TRADE_TRANSACTION_DEAL_ADD;
 
angevoyageur:

В OnTradeTransaction необходимо проверить наличие :

После этого следует другая транзакция с :

Здравствуйте, Angevoyageur,

пожалуйста, взгляните на мой дамп. Этот дамп печатает ВСЕ транзакции в файл. Мой советник очень прост. Он покупает или продает вместе со стопом и целью. К сожалению, я не могу найти в журнале ни одной транзакции, которая бы

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

20130507 00:26:59:672 entry short at 1.32176 <- entry short
20130507 00:26:59:672 symbol=EURUSD price=1.3217600 volume=0.01 sl=1.3229200 tp=1.3202000 order=2 deal=2 entry-type=IN trans-type=DEAL_ADD order_type=BUY deal_type=DEAL_TYPE_SELL type_time=0 expiration=1970.01.01 00:00 price_trigger=0.0000000 profit=0.00
20130507 00:26:59:672 symbol=EURUSD price=1.3217600 volume=0.01 sl=1.3229200 tp=1.3202000 order=2 deal=0 entry-type=IN trans-type=ORDER_DELETE order_type=SELL deal_type=DEAL_TYPE_BUY type_time=0 expiration=1970.01.01 00:00 price_trigger=0.0000000 profit=0.00
20130507 00:26:59:672 symbol=EURUSD price=1.3217600 volume=0.00 sl=1.3229200 tp=1.3202000 order=2 deal=0 entry-type=IN trans-type=HISTORY_ADD order_type=SELL deal_type=DEAL_TYPE_BUY type_time=0 expiration=1970.01.01 00:00 price_trigger=0.0000000 profit=0.00
20130507 00:26:59:672 symbol= price=0.0000000 volume=0.00 sl=0.0000000 tp=0.0000000 order=0 deal=0 entry-type=IN trans-type=REQUEST order_type=BUY deal_type=DEAL_TYPE_BUY type_time=0 expiration=1970.01.01 00:00 price_trigger=0.0000000 profit=0.00

/// before the entry long, the stop or target of entry short should be triggerd.
/// The EA does not allow to enter new trade before latest is closed, simply by check current positions for symbol before open an entry tradde.

20130507 00:26:59:674 entry long at 1.32140 <- entry long
20130507 00:26:59:674 symbol=EURUSD price=1.3214000 volume=0.01 sl=1.3200900 tp=1.3231100 order=3 deal=3 entry-type=IN trans-type=DEAL_ADD order_type=BUY deal_type=DEAL_TYPE_BUY type_time=0 expiration=1970.01.01 00:00 price_trigger=0.0000000 profit=0.00
20130507 00:26:59:674 symbol=EURUSD price=1.3214000 volume=0.01 sl=1.3200900 tp=1.3231100 order=3 deal=0 entry-type=IN trans-type=ORDER_DELETE order_type=BUY deal_type=DEAL_TYPE_BUY type_time=0 expiration=1970.01.01 00:00 price_trigger=0.0000000 profit=0.00
20130507 00:26:59:674 symbol=EURUSD price=1.3214000 volume=0.00 sl=1.3200900 tp=1.3231100 order=3 deal=0 entry-type=IN trans-type=HISTORY_ADD order_type=BUY deal_type=DEAL_TYPE_BUY type_time=0 expiration=1970.01.01 00:00 price_trigger=0.0000000 profit=0.00
20130507 00:26:59:674 symbol= price=0.0000000 volume=0.00 sl=0.0000000 tp=0.0000000 order=0 deal=0 entry-type=IN trans-type=REQUEST order_type=BUY deal_type=DEAL_TYPE_BUY type_time=0 expiration=1970.01.01 00:00 price_trigger=0.0000000 profit=0.00

/// As you can see, my entry short shows transaction BUY, SELL, SELL what ever the purpose of this confusing transactions is.
/// No a bit about stop or target orders

Итак, как получить транзакции по стопу и цели? Я говорю здесь о бэктесте. Не уверен, что это также происходит в реальных условиях.

 
chinaski:

Здравствуйте, Анжевояжер,

пожалуйста, взгляните на мой дамп. Этот дамп печатает ВСЕ сделки в файл. Мой советник очень прост. Он покупает или продает вместе со стопом и целью. К сожалению, я не могу найти в журнале ни одной транзакции, которая бы

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

Итак, как получить транзакции по стопу и цели? Я говорю здесь о бэктесте. Не уверен, что так же будет и в реальных условиях.

Хорошо, извините, я неправильно понял ваш первый вопрос, я думал об отложенном ордере (buy stop или sell stop), когда вы сказали "сработал стоп".

Вы уверены, что вам нужно отслеживать сделки? Если вы размещаете только одну сделку за раз, вы можете просто проверить свою открытую позицию с помощью PositionSelect(_Symbol).

 
angevoyageur:

Хорошо, извините, я неправильно понял ваш первый вопрос, я думал об отложенном ордере (buy stop или sell stop), когда вы сказали "сработавший стоп".

Вы уверены, что вам нужно отслеживать сделки? Если вы размещаете только одну сделку за раз, вы можете просто проверить вашу открытую позицию с помощью PositionSelect(_Symbol).

Здравствуйте,

для того, чтобы проверить, открыта позиция или нет, я делаю это уже.CPositionInfo.Select.

Но как получить исполненный стоп или целевую цену, когда сработал стоп или цель? Есть ли умный метод?

 
chinaski:

Здравствуйте,

Для того, чтобы проверить, открыта позиция или нет, я делаю это уже.CPositionInfo.Select.

Но как получить исполненный стоп или целевую цену, если сработал стоп или цель? Есть ли какой-нибудь умный метод?

Почему бы не проверить историю сделок?
 
angevoyageur:
Почему бы не проверить историю сделок?

Не могли бы вы дать более подробную информацию, пожалуйста. Мне нужен исполненный стоп или целевая цена. У меня нет идентификатора сделки или тикета сработавшей цели или стопа (не передается как транзакция).

История предоставляетDEAL_PRICE, но мне нужен номер сделки или тикет. Какой тикет или сделку брать? Спасибо.

Documentation on MQL5: Standard Constants, Enumerations and Structures / Trade Constants / Deal Properties
Documentation on MQL5: Standard Constants, Enumerations and Structures / Trade Constants / Deal Properties
  • www.mql5.com
Standard Constants, Enumerations and Structures / Trade Constants / Deal Properties - Documentation on MQL5
 
chinaski:

Не могли бы вы дать более подробную информацию, пожалуйста. Мне нужен исполненный стоп или целевая цена. У меня нет идентификатора сделки или тикета сработавшей цели или стопа (не передается как транзакция).

История предоставляетDEAL_PRICE, но мне нужен номер сделки или тикет. Какой тикет или сделку брать? Спасибо.

Когда срабатывает sl или tp, у вас добавляется сделка с противоположной стороной вашей сделки. Например, у вас открыта позиция BUY 0.25 лота. Когда сработает sl/tp, у вас появится сделка типа SELL, вы можете использовать OnTradeTransaction для отслеживания этого или просто проверить историю сделок, как только вы узнаете, что ваша позиция закрыта.

Смотрите пример кода здесь.

 
angevoyageur:

Когда срабатывает sl или tp, у вас добавляется сделка с противоположной стороной вашей сделки. Например, у вас открыта позиция BUY 0.25 лота. Когда сработает sl/tp, у вас появится сделка типа SELL, вы можете использовать OnTradeTransaction для отслеживания этого или просто проверить историю сделок, как только вы узнаете, что ваша позиция закрыта.

Смотрите пример кода здесь.

Здравствуйте, angev,

вот моя проблема: очевидно, что я не могу использовать OnTradeTransaction. Пожалуйста, посмотрите мои логи выше. Там не указан стоп или целевой ордер - значит НЕТ сделки, связанной со стопом или целью. Дамп создается для КАЖДОЙ сделки, переданной в OnTradeTransaction.

Опять же, я говорю о бэктесте.

 
chinaski:

Здравствуйте, angev,

Вот моя проблема: очевидно, что я не могу использовать OnTradeTransaction. Пожалуйста, посмотрите мои логи выше. Там нет стоп или целевого ордера - значит, НЕТ сделки, связанной со стопом или целью. Дамп создается для КАЖДОЙ сделки, переданной в OnTradeTransaction.

Опять же, я говорю о бэктесте.

Единственное, что я могу сделать, это протестировать ваш код, если вы его предоставите. У меня нет такой проблемы.
 
angevoyageur:
Единственное, что я могу сделать, это протестировать ваш код, если вы его предоставите. У меня нет такой проблемы.

Здравствуйте, angevoyageur,

Прилагаю простой советник, который демонстрирует проблему. Советник открывает длинную позицию вместе со стопом и целью, затем короткую, затем длинную и так далее.

Также содержится метод сброса. Просто примените EUR.USD 1 минута 1 неделя и смотрите дампы сделок в журнале бэктестов.

Спасибо за помощь.

Файлы:
tc_ea_trans.mq5  11 kb
Причина обращения: