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

 

Не могли бы вы ответить, если вы знаете, о чем говорите?

Это тема о MT5/mql5, я буду удалять все не относящиеся к теме сообщения.

На MT5 нет цены стоплосса в истории.

 

Основная проблема в mql5 (счет хеджирования) заключается в том, чтобы узнать цену Stop Loss, когда позиция закрывается, из-за отсутствия истории позиций. Вы можете использовать HistorySelectByPosition(), чтобы найти ваш первоначальный Stop Loss (Stop Loss первоначального ордера), но если вы изменили этот Stop Loss позже, он генерирует новые ордера для этого, без того же POSITION_ID, и поэтому они не будут выбраны функцией HistorySelectByPosition(), поэтому становится очень трудно узнать последний Stop Loss, который вы разместили.

Я не знаю, можно ли считать это ошибкой, но если нет, то следовало бы.

С уважением.

Documentation on MQL5: Trade Functions / HistorySelectByPosition
Documentation on MQL5: Trade Functions / HistorySelectByPosition
  • www.mql5.com
Trade Functions / HistorySelectByPosition - Reference on algorithmic/automated trading language for MetaTrader 5
 
Jose Francisco Casado Fernandez:

Основная проблема в mql5 (счет хеджирования) - узнать цену Stop Loss, когда позиция закрывается, из-за отсутствия истории позиций. Вы можете использовать HistorySelectByPosition(), чтобы найти ваш начальный Stop Loss (Stop Loss начального ордера)...

Нет, не можете, или я вас неправильно понял.

Текущий Stoploss нигде не находится в истории.

 
Alain Verleyen:

Нет, не можете, или я вас неправильно понял.

Стоплосс нигде в истории не фигурирует.

Вы можете использовать HistorySelectByPosition(), с вашим POSITION_ID, а затем вы можете найти первый ордер с этим POSITION_ID, и проверить Stop Loss этого ордера (HistoryOrderGetDouble(ticket, ORDER_SL)). Это сработало для меня, но
.проблема возникает, когда вы изменяете этот Stop Loss позже.
 
Jose Francisco Casado Fernandez:
Вы можете использовать HistorySelectByPosition(), с вашим POSITION_ID, а затем вы можете найти первый ордер с этим POSITION_ID, и проверить Stop Loss этого ордера (HistoryOrderGetDouble(ticket, ORDER_SL)). Это сработало для меня, но
.проблема возникает, когда вы изменяете этот Stop Loss позже.

Теперь вы поняли, вы правы.

 
Jose Francisco Casado Fernandez:
Вы можете использовать HistorySelectByPosition(), с вашим POSITION_ID, а затем вы можете найти первый ордер с этим POSITION_ID, и проверить Stop Loss этого ордера (HistoryOrderGetDouble(ticket, ORDER_SL)). Это сработало для меня, но
проблема возникает, когда вы позже изменяете этот Stop Loss.
И затем, проверьте ORDER_POSITION_ID равным DEAL_POSITION_ID,
затем проверьте DEAL_ENTRY, если OUT, получите HystoryDealGetDouble(ticket,DEAL_PRICE).

Если DEAL_PRICE равна HistoryOrderGetDouble(ticket,ORDER_SL), то это означает, что ордер был закрыт по стоп-лоссу.

Вот мое мнение.

 
Alain Verleyen:

Теперь вы поняли, вы правы.

Хорошо, а знаете ли вы, почему если вы позже измените стоп-лосс, то новый ордер, сгенерированный для этого, не показывает тот же POSITION_ID? Это было бы идеальным решением для этого вопроса. Это ошибка? Спасибо.
 
Roberto Jacobs:

Если DEAL_PRICE равна HistoryOrderGetDouble(ticket,ORDER_SL), то это означает, что ордер был закрыт по стоп-лоссу.

А как насчет проскальзывания?
 
Roberto Jacobs:
И затем, проверьте ORDER_POSITION_ID равный DEAL_POSITION_ID,
затем проверьте DEAL_ENTRY, если OUT, получите HystoryDealGetDouble(ticket,DEAL_PRICE).

Если DEAL_PRICE равна HistoryOrderGetDouble(ticket,ORDER_SL), то это означает, что ордер был закрыт по стоп-лоссу.

Вот мое мнение.

Да, это то, о чем я говорил. Я сделал так, и это сработало, но если вы изменяете начальный Stop Loss, он генерирует новый ордер БЕЗ того же POSITION_ID. Я не знаю почему. Я думаю, это ошибка. С уважением,.
 
honest_knave:
Как насчет проскальзывания?

Не нужно смотреть проскальзывание, потому что ордер был закрыт, и цена закрытия находится на HystoryDealGetDouble(ticket, DEAL_PRICE).
Если ордер не был в закрытии, и вы делаете ордер на закрытие, то нужно учитывать , сколько проскальзывать, чтобы не было ошибки реквот.

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