Как проверить, был ли ордер закрыт по стоп-лоссу

 

Я пишу советника, модифицируя свой советник, написанный для MT4. Я открываю ордер с помощью OrderSend.

Просто если мне нужно понять (перхасп из истории), если отправленный ордер (кстати.... я должен проверить Order, Deals или Position?), был закрыт, потому что он достиг StopLoss.
Я проверил на форумах, но не нашел того, что мне нужно.....

Использую HistoryOrderGetDouble с параметромENUM_ORDER_PROPERTY_DOUBLE,

ORDER_PRICE_CURRENT

дает только текущую цену символа ордера

которая не может быть сравнена сORDER_SL. Я полагаю, что ORDER_PRICE_CURRENT - это только текущая цена символа, а не цена закрытия ордера.

Спасибо всем за поддержку.

 

См. эту тему, возможно, немного запутанную, но вы можете найти идею.

Торговая система MT5 сильно отличается от MT4, поэтому вам придется изменить свое мышление.

Detect stop trigger in OnTradeTransaction backtest
Detect stop trigger in OnTradeTransaction backtest
  • www.mql5.com
Unfortunately, i get only DEAL_ENTRY_IN provided by MqlTradeTransaction passed to OnTradeTransaction. - - Category: technical indicators
 
frankge973:

Я пишу советника, модифицируя свой советник, написанный для MT4. Я открываю ордер с помощью OrderSend.

Просто если мне нужно понять (в первую очередь из истории), если отправленный ордер (кстати.... я должен проверить Order, Deals или Position?), был закрыт, потому что он достиг StopLoss.
Я проверил на форумах, но не нашел того, что мне нужно.....

Использую HistoryOrderGetDouble с параметромENUM_ORDER_PROPERTY_DOUBLE,

ORDER_PRICE_CURRENT

дает только текущую цену символа ордера

которая не может быть сравнена сORDER_SL. Я полагаю, что ORDER_PRICE_CURRENT - это только текущая цена символа, а не цена закрытия ордера.

Спасибо всем за поддержку.

Так ли это?

//-------------------------------- ES CIERRE POR SL ----------------------------------------------
bool esCierreSL(int ind, int modoInd= SELECT_BY_TICKET, int modoHist= MODE_TRADES)
{
    bool resp= OrderSelect(ind, modoInd, modoHist)? (StringFind(OrderComment(), "[sl]", 0)>-1): false;
    return(resp);
}
 
Jose Miguel Soriano:

Так ли это?

Вопрос касается mql5, ваш код - mql4.

Комментарий к заказу не является надежным способом кодирования.

 
Alain Verleyen:

Вопрос касается mql5, ваш код - mql4.

Комментарий к заказу не является надежным способом кодирования.

Извините за некро, но это довольно интересно, на мой взгляд.

Я перехожу с mql4 на mql5 и нахожу изменения в торговых и исторических системах довольно сложными.

Для того, чтобы узнать, была ли сделка на истории закрыта по стоп-лоссу, тейк-профиту или как-то иначе:

  • в MT4 можно было сравнить OrderStopLoss(), OrderTakeProfit() и OrderClosePrice(), или просто проверить OrderComment().
  • В MT5 единственным возможным способом мне кажется проверка комментария сделки: HistoryDealGetString(tk, DEAL_COMMENT).
И MT4 и MT5 при закрытии ордера по стоп-лоссу или тейк-профиту пишут [SL price] или [TP price] в комментарии (по-разному... но все же).

Я прочитал статью: https://www.mql5.com/en/forum/11996

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

То есть должна быть программа, которая слушает (например, советник, работающий на графике), иначе ничего не будет обнаружено.

На мой взгляд, определение причины закрытия сделки должно быть сделано на истории торговой книги, потому что это (или должно быть) самый безопасный способ узнать, что произошло, так как это записано где-то, а не поймано из воздуха.

Мой анализ неверен? Что вы думаете?

Detect stop trigger in OnTradeTransaction backtest
Detect stop trigger in OnTradeTransaction backtest
  • www.mql5.com
Unfortunately, i get only DEAL_ENTRY_IN provided by MqlTradeTransaction passed to OnTradeTransaction.
 
Marco: И MT4 и MT5 при закрытии ордера по стоп-лоссу или тейк-профиту пишут [SL price] или [TP price] в комментарии (по-разному... но все же).
Нет, не пишут. Это ваш брокер.
Не очень хорошая идея, брокеры могут менять комментарии, включая полную замену.
 
whroeder1:
Нет, не имеют. Это ваш брокер.

Хорошо, оба брокера MT4 и MT5 помещают эту строку в комментарий... по крайней мере, те несколько, которые я тестировал.

И я согласен, это не очень хорошая идея, так как комментарий может быть изменен рукой брокера.

Но я не вижу, как это можно сделать по-другому, поскольку я не могу найти других следов в книге истории торговли.

Есть ли лучший способ достичь этой цели?

 

Я обращался в службу поддержки 2 года назад (по поводу MT4).

...It is not clear to me whether all brokers incorporate the letters sp or tp in the order comment when a trade hits the StopLoss or TakeProfit. Is this at the brokers' discretion or is it automatically done with every broker?

и они ответили

Это автоматически делается у каждого брокера. А также брокер может сам изменить это значение.

Так что это делает система, а не брокер. Но это все равно не помогает, если брокер может изменить это значение.

Заметьте, я не заметил ни одного случая, чтобы брокер изменил комментарий к ордеру.

Обычно в моем коде важнее знать, закрылась ли сделка с прибылью или убытком. При использовании трейлинг-стопа сделка может пробить SL, но при этом остаться в прибыли.

 
Keith Watford:

Я обращался в службу поддержки 2 года назад (по поводу MT4).

и они ответили

так что это делается системой, а не брокером. Но это все равно не помогает, если брокер может изменить это.

Заметьте, я не заметил ни одного случая, когда брокер изменил бы комментарий к ордеру.

Обычно в моем коде важнее знать, закрылась ли сделка с прибылью или убытком. При использовании трейлинг-стопа сделка может пробить SL, но при этом остаться в прибыли.

Спасибо, Кит, именно на это я и надеялся, поскольку не смог найти лучшего обходного пути.

 
honest_knave:
Я полагаю, что оба автора конвертируют MQL4 в MQL5.

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

Примечание: На реальном (особенно ECN) счете, возможно, цена срабатывания имеет разрыв между ценой стоплосса, поэтому используйте "<=" или ">=".

 
Xiangdong Guo:

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

Примечание: На реальном (особенно ECN) счете, вероятно, цена срабатывания имеет разрыв между установленной ценой стоплосса, поэтому используйте "<=" или ">=".

Вы не можете сравнивать цену закрытия с ценой стоплосса. Проскальзывание означает, что цена закрытия может быть выше или ниже стоп-лосса.

Поэтому "<=" или ">=" бесполезны.

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