Сб. Ноя 23rd, 2024

Как выбрать последний ордер и определить его прибыль?

Здесь приведу достаточно полезную функцию определения прибыльности или убыточности последнего закрытого ордера. Функция возвращает размер прибыли/убытка. Соответственно, если прибыль > 0, то ордер закрылся с профитом, если < 0, то с убытком.

Вызывается функция так:

isCloseLastPosByStopTrade(Symbol(),OP_BUY или OP_SELL,Magic);

Если вместо OP_BUY или OP_SELL поставить -1, то будет определяться прибыль любого типа ордера. Если на место Magic поставить -1, будет определен профит/убыток ордера с любым магиком.

Функция:

double isCloseLastPosByStopTrade(string sy,int op,int mn)
  {
   datetime t;
   double   ocp,osl;
   int      dg,i,j=-1,k=OrdersHistoryTotal();

   if(sy=="0") sy=Symbol();
   for(i=0; i<k; i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
        {
         if(OrderSymbol()==sy) // || sy=="")
           {
            if(OrderType()==OP_BUY || OrderType()==OP_SELL)
              {
               if(op<0 || OrderType()==op)
                 {
                  if(mn<0 || OrderMagicNumber()==mn)
                    {
                     if(t<OrderCloseTime())
                       {
                        t=OrderCloseTime();
                        j=i;
                       }
                    }
                 }
              }
           }
        }
     }
   if(OrderSelect(j,SELECT_BY_POS,MODE_HISTORY))
     {
      return(OrderProfit());
     }

  }

от drivermql

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

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

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