Как закрылась сделка?

 
Здравствуйте. Такой вопрос. Как определить закрылась последня сделка по стоп лосу или или пот тейк профиту. Думаю кто-то уже решал такие проблемы, был бы очень признателен за помощь.
 С уважением Александр.
 

Ну а что тут сравнивать:

OrderSelect(морер позиции, SELECT_BY_POS , MODE_HISTORY)

Заселектировал, а теперь проверяешь цену закрытия ордера с тейком или стопом. Удачи!

 
colci:
Здравствуйте. Такой вопрос. Как определить закрылась последня сделка по стоп лосу или или пот тейк профиту. Думаю кто-то уже решал такие проблемы, был бы очень признателен за помощь.
 С уважением Александр.
Пока что в коментах пишется по разному ( [tp], [sl] ). Только можно ли расчитывать, что это в будущем сохранится?
 
BabyBear:
Пока что в коментах пишется по разному ( [tp], [sl] ). Только можно ли расчитывать, что это в будущем сохранится?
Зачем тебе это? Проверяй размер дохода по закрытой сделке. Если сделка закрылась в плюс - значит профит, в минус - лосс. И это будет всегда.
 
//+----------------------------------------------------------------------------+
//|  Возвращает флаг закрытия последней позиции по стопу.                      |
//|  Параметры:                                                                |
//|    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);
}
 
//+----------------------------------------------------------------------------+
//|  Возвращает флаг убыточности последней позиции.                            |
//|  Параметры:                                                                |
//|    sym - наименование инструмента  ("" - текущий символ)                   |
//|    op  - операция                  (-1 - любая позиция)                    |
//|    mn  - MagicNumber               (-1 - любой магик)                      |
//+----------------------------------------------------------------------------+
bool isLossLastPos(string sym="", int op=-1, int mn=-1) {
  datetime oct;
  int      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)) {
    if (OrderProfit()<0) return(True);
  }
  return(False);
}
 
Если сделка закрылась по СЛ, её OrderStopLoss() == OrderClosePrice() (или "MathAbs( OrderStopLoss() - OrderClosePrice() ) < Point", если быть точным).
С тейкпрофитом - аналогично.

Для отслеживания момента срабатывания СЛ и/или ТП можно использовать функцию из статьи События в МetaТrader 4.
 
timbo:
BabyBear:
Пока что в коментах пишется по разному ( [tp], [sl] ). Только можно ли расчитывать, что это в будущем сохранится?
Зачем тебе это? Проверяй размер дохода по закрытой сделке. Если сделка закрылась в плюс - значит профит, в минус - лосс. И это будет всегда.
Вовсе нет.Пример: срабатывание стоп-лосса, передвигаемого трейлинг-стопом - сделка в плюсах, или ограничение убытков с помощью тэйк-профита - сделка закрывается в минусах.
 

timbo:
BabyBear:
Пока что в коментах пишется по разному ( [tp], [sl] ). Только можно ли расчитывать, что это в будущем сохранится?
Зачем тебе это? Проверяй размер дохода по закрытой сделке. Если сделка закрылась в плюс - значит профит, в минус - лосс. И это будет всегда.

Если закрыться с рынка, но не получится так, как ты говоришь.
 
Это уже дополнительная информация, которой не было в изначальной постановке вопроса.
Тогда проверять чуть глубже - так как сказал компостер.
Если хочется узнать и про трэйлинг-стоп, то придётся вводить доп.переменные и хранить информацию в них. А если..., то тогда ещё и ...
И даже комментарии уже не помогут.
Причина обращения: