Доброго ВС!
В эксперте отслеживаю срабатывание стоплосса в событии OnTradeTransaction, чтобы проделать кое-какие манипуляции с переменными.
Не знаю, баг ли это терминала (тестера) или нет. Суть в том, что при срабатывании стопа следующие функции
HistoryDealGetInteger(deal_ticket, DEAL_ENTRY)
HistoryDealGetInteger(deal_ticket, DEAL_REASON)
должны возвращать соответственно
DEAL_ENTRY_OUT и
DEAL_REASON_SL
Так чаще всего и получается, но не всегда. Иногда (редко) при срабатывании стопа почему - то возвращаются значения как при открытии позы, то есть
DEAL_ENTRY_IN и
DEAL_REASON_EXPERT
Хотя стоп-лосс закрывается штатно, тестер пишет:
2023.12.18 21:23:43.358 2023.02.24 16:30:00 stop loss triggered #654 buy 0.09 USDJPYrfd 135.758 sl: 135.683 tp: 135.833 [#655 sell 0.09 USDJPYrfd at 135.683]
Ну и дальше мой советник естественно не работает как надо.
С таким сталкивались? В чем может быть проблема?
Не надо выбирать всю историю. Достаточно только сделку выбрать по тикету.
Эта строка
ulong deal_ticket = HistoryDealGetTicket(HistoryDealsTotal() - 1);
не всегда даёт правильный результат. Оттого и проблема.
if(trans.type == TRADE_TRANSACTION_DEAL_ADD) { if(!HistoryDealSelect(trans.deal)) DebugBreak(); if(trans.symbol == _Symbol)// && HistoryDealGetInteger(trans.deal, DEAL_MAGIC) == magick) { /******************** Если открылась позиция*******************/ if(HistoryDealGetInteger(trans.deal, DEAL_ENTRY) == DEAL_ENTRY_IN) Print("********** открытие сделка ", trans.deal, " позиция ", trans.position); /******************** Если закрылась позиция*******************/ if(HistoryDealGetInteger(trans.deal, DEAL_ENTRY) == DEAL_ENTRY_OUT) { if(HistoryDealGetInteger(trans.deal, DEAL_REASON) == DEAL_REASON_TP) { Print("********** закрытие по тейку сделка ", trans.deal, " позиция ", trans.position); } if(HistoryDealGetInteger(trans.deal, DEAL_REASON) == DEAL_REASON_SL) { Print("********** закрытие по стопу сделка ", trans.deal, " позиция ", trans.position); } } } }
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Доброго ВС!
В эксперте отслеживаю срабатывание стоплосса в событии OnTradeTransaction, чтобы проделать кое-какие манипуляции с переменными.
Не знаю, баг ли это терминала (тестера) или нет. Суть в том, что при срабатывании стопа следующие функции
HistoryDealGetInteger(deal_ticket, DEAL_ENTRY)
HistoryDealGetInteger(deal_ticket, DEAL_REASON)
должны возвращать соответственно
DEAL_ENTRY_OUT и
DEAL_REASON_SL
Так чаще всего и получается, но не всегда. Иногда (редко) при срабатывании стопа почему - то возвращаются значения как при открытии позы, то есть
DEAL_ENTRY_IN и
DEAL_REASON_EXPERT
Хотя стоп-лосс закрывается штатно, тестер пишет:
2023.12.18 21:23:43.358 2023.02.24 16:30:00 stop loss triggered #654 buy 0.09 USDJPYrfd 135.758 sl: 135.683 tp: 135.833 [#655 sell 0.09 USDJPYrfd at 135.683]
Ну и дальше мой советник естественно не работает как надо.
С таким сталкивались? В чем может быть проблема?