Чт. Ноя 21st, 2024

Функция определения количества пунктов в идущих подряд убыточных ордерах

Убытки подряд в пунктах

Допустим имеется 3 подряд убыточных ордера и нужно узнать, сколько в этих трех ордерах убытка в пунктах (спред не учитывается). Применяем эту функцию:
[sociallocker]

//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента             (""   - любой символ,         |
//|                                               NULL - текущий символ)       |
//|    op - операция                             (-1   - любая позиция)        |
//|    mn - MagicNumber                          (-1   - любой магик)          |
//|    dt - Дата и время в секундах с 1970 года  ( 0   - с начала истории)     |
//+----------------------------------------------------------------------------+
int NumberOfLastLossPosFromDateInPoint(string sy="", int op=-1, int mn=-1, datetime dt=0) {
  int i, k=OrdersHistoryTotal();
  int kp=0;

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
      if ((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (mn<0 || OrderMagicNumber()==mn) {
            if (dt<OrderCloseTime()) {
              if (OrderProfit()<0) 
              {
                  kp += (MathAbs(OrderOpenPrice()-OrderClosePrice())) / Point;
              }            
              else kp=0;
            }
          }
        }
      }
    }
  }
  return(kp);
}

[/sociallocker]

от drivermql

Добавить комментарий

Ваш адрес email не будет опубликован.

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.