Функция определяет будущую прибыль открытых ордеров

Функция для mql4 возвращает суммарную потенциальную прибыль открытых позиций в валюте депозита.

//+----------------------------------------------------------------------------+
//|  Описание : Возвращает суммарную потенциальную прибыль                     |
//|             открытых позиций в валюте депозита.                            |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
double GetPotentialLossInCurrency(string sy="", int op=-1, int mn=-1)
  {
   double pl=0;
   double po, tv;                   // Пункт, спрэд и стоимость пункта
   int    i, k=OrdersTotal();

   if(sy=="0")
      sy=Symbol();
   for(i=0; i<k; i++)
     {
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
        {
         if((OrderSymbol()==sy || sy=="") && (mn<0 || OrderMagicNumber()==mn))
           {
            if((OrderType()==OP_BUY || OrderType()==OP_SELL) && (op<0 || OrderType()==op))
              {
               if(OrderTakeProfit()>0)
                 {
                  po=MarketInfo(OrderSymbol(), MODE_POINT);
                  if(po==0)
                     Print("В обзоре рынка отсутствует символ "+OrderSymbol()+". Точность расчётов не гарантируется!");
                  else
                    {
                     tv=MarketInfo(OrderSymbol(), MODE_TICKVALUE);
                     if(OrderType()==OP_BUY)
                       {
                        pl+=(OrderTakeProfit()-OrderOpenPrice())/po*OrderLots()*tv;
                       }
                     if(OrderType()==OP_SELL)
                       {
                        pl+=(OrderOpenPrice()-OrderTakeProfit())/po*OrderLots()*tv;
                       }
                     pl+=OrderCommission()+OrderSwap();
                    }
                 }
               else
                 {
                  pl=AccountBalance();
                  break;
                 }
              }
           }
        }
     }
   return(pl);
  }

Поделись с друзьями: