Скачать MetaTrader 5

Как программно определить, что позиция закрылась по сл или тп?

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Aliaksandr Kryvanos
8820
Aliaksandr Kryvanos  
Как программно определить, что позиция закрылась по сл или тп? По комментарию можно, но комментарий брокер, бывает, не ставит. Как быть?
Aliaksandr Kryvanos
8820
Aliaksandr Kryvanos  
Да, вся суть в проскальзывании. У меня брокер justforex, у него на демо комментарий есть, на реале нету
fxsaber
9139
fxsaber  
Aliaksandr Kryvanos:
Как программно определить, что позиция закрылась по сл или тп? По комментарию можно, но комментарий брокер, бывает, не ставит. Как быть?
В MT5 только по комментарию
#define ORDER_TYPE_TAKEPROFIT (-1)
#define ORDER_TYPE_STOPLOSS   (-2)

int GetOrderType( const ulong OrderTicket )
{
  int OrderType = (int)::HistoryOrderGetInteger(OrderTicket, ORDER_TYPE);

  if ((OrderType == ORDER_TYPE_BUY) || (OrderType == ORDER_TYPE_SELL))
  {
    const string OrderComment = HistoryOrderGetString(OrderTicket, ORDER_COMMENT);
    const string OrderPrice = ::DoubleToString(::HistoryOrderGetDouble(OrderTicket, ORDER_PRICE_OPEN),
                                          (int)::SymbolInfoInteger(HistoryOrderGetString(OrderTicket, ORDER_SYMBOL), SYMBOL_DIGITS));

    if (OrderComment == "tp " + OrderPrice)
      OrderType = ORDER_TYPE_TAKEPROFIT;
    else if (OrderComment == "sl " + OrderPrice)
      OrderType = ORDER_TYPE_STOPLOSS;
  }

  return(OrderType);
}

Поскольку TP/SL уровни закрытых позиций в MT5-истории не доступны. В MT4 с этим нет проблем.

ЗЫ В функцию, что выше, входной параметр брать отсюда

const ulong OrderTicket = ::HistoryDealGetInteger(DealTicket, DEAL_ORDER);
Aliaksandr Kryvanos
8820
Aliaksandr Kryvanos  
Спасибо
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий