Как определить по SL или TP закрылся предыдущий ордер?

 
Сорри, если это уже обсуждалось - перерыл документацию, не нашел ответ на вопрос: как проверить по SL или TP закрылся предыдущий ордер?
Спасибо.
 
Сравнивать OrderClosePrice() c OderStopLoss() или OrderTakeProfit() .

А также поиск выводит.
 
//+----------------------------------------------------------------------------+
//|  Возвращает флаг закрытия последней позиции по стопу.                      |
//|  Параметры:                                                                |
//|    sym - наименование инструмента  ("" - текущий символ)                   |
//|    op  - операция                  (-1 - любая позиция)                    |
//|    mn  - MagicNumber               (-1 - любой магик)                      |
//+----------------------------------------------------------------------------+
bool isCloseLastPosByStop(string sym="", int op=-1, int mn=-1) {
  datetime oct;
  double   ocp, osl;
  int      dg, i, j=-1, k=HistoryTotal();
 
  if (sym=="") sym=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
      if (OrderSymbol()==sym) {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (oct<OrderCloseTime()) {
                oct=OrderCloseTime();
                j=i;
              }
            }
          }
        }
      }
    }
  }
  if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) {
    dg=MarketInfo(sym, MODE_DIGITS);
    if (dg==0) if (StringFind(sym, "JPY")<0) dg=4; else dg=2;
    ocp=NormalizeDouble(OrderClosePrice(), dg);
    osl=NormalizeDouble(OrderStopLoss(), dg);
    if (ocp==osl) return(True);
  }
  return(False);
}
 
//+----------------------------------------------------------------------------+
//|  Возвращает флаг закрытия последней позиции по тейку.                      |
//|  Параметры:                                                                |
//|    sym - наименование инструмента  ("" - текущий символ)                   |
//|    op  - операция                  (-1 - любая позиция)                    |
//|    mn  - MagicNumber               (-1 - любой магик)                      |
//+----------------------------------------------------------------------------+
bool isCloseLastPosByTake(string sym="", int op=-1, int mn=-1) {
  datetime oct;
  double   ocp, otp;
  int      dg, i, j=-1, k=HistoryTotal();
 
  if (sym=="") sym=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
      if (OrderSymbol()==sym) {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (oct<OrderCloseTime()) {
                oct=OrderCloseTime();
                j=i;
              }
            }
          }
        }
      }
    }
  }
  if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) {
    dg=MarketInfo(sym, MODE_DIGITS);
    if (dg==0) if (StringFind(sym, "JPY")<0) dg=4; else dg=2;
    ocp=NormalizeDouble(OrderClosePrice(), dg);
    otp=NormalizeDouble(OrderTakeProfit(), dg);
    if (ocp==otp) return(True);
  }
  return(False);
}
 
Почему MarketInfo а не Digits?
Зачем подмутка для йены?
 
cout:
Почему MarketInfo а не Digits?
Для универсальности... чтоб можно было использовать не только для текущей пары


cout:
Зачем подмутка для йены?
Потому что MarketInfo иногда возвращает 0.
Причина обращения: