[MQL4] Функция подсчёта объема по всем открытым ордерам

romanzif

Постоялец
Команда форума
Администратор
Форекс робот VolnaFX
Монет
23,220
Функция заполняет внешние переменные:
summLotBuy - суммарный объём на покупку
summLotSell - суммарный объём на продажу

учитываются только ордера в рынке по символу на котором установлен советник и его Magic номер.

я использую эту функцию в усредняющих советниках для визуализации на графике, что бы не считать вручную какой уже открыт объём в текущей серии ордеров.

таким образом если мне нужно вмешаться и открыть, например, лок, то я вижу какой объём нужно выставить.

можно немного изменить код, что бы передавать параметр по какому направлению считать объёмы, а так же сделать что бы функция заполняла не внешние переменные, а возвращала значение.
если будет нужно сделать так, то напишите и переделаю код.

Код:
//+------------------------------------------------------------------+
void SummLot()
{
   double lots = 0;
   for (int i=OrdersTotal()-1; i >= 0; i--)
   {
      if (OrderSelect(i,SELECT_BY_POS))
      {
         if (OrderMagicNumber() == Magic && OrderSymbol() == Symbol() && OrderType()==OP_BUY)
         {
            lots +=OrderLots();
         }     
      }
   }
  
   summLotBuy = lots;
  
   lots = 0;
   for (int i=OrdersTotal()-1; i >= 0; i--)
   {
      if (OrderSelect(i,SELECT_BY_POS))
      {
         if (OrderMagicNumber() == Magic && OrderSymbol() == Symbol() && OrderType()==OP_SELL)
         {
            lots +=OrderLots();
         }     
      }
   }
  
   summLotSell = lots;
}       
//+------------------------------------------------------------------+
 

UASpace

Новенький
Форумчанин
Монет
935
Я считаю немого не так)

В коде это глобальные переменные
totalProfitBuy = 0; totalProfitSell = 0; totalSwapBuy = 0;
totalSwapSell = 0; totalLotsBuy = 0; totalLotsSell = 0;
Профит считаю сразу с учетом комиссии и свопа.

Код:
void totalProfitSwapLots() {
   totalProfitBuy = 0;
   totalProfitSell = 0;
   totalSwapBuy = 0;
   totalSwapSell = 0;
   totalLotsBuy = 0;
   totalLotsSell = 0;
  
  
   //Вычисляем сумму профита, лота и свопа открытых ордеров
   for (int i = OrdersTotal()-1; i >=0; i--) {        //
      if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)){//
         if (OrderMagicNumber() == MagicNumber && OrderSymbol() == Symbol()){
            if (OrderType() == OP_BUY){//открытых ордеров Buy
               totalProfitBuy += OrderProfit() + OrderSwap() + OrderCommission();
               totalLotsBuy += OrderLots();
               totalSwapBuy += OrderSwap();
            }
            if (OrderType() == OP_SELL){//открытых ордеров Sell
               totalProfitSell += OrderProfit() + OrderSwap() + OrderCommission();
               totalLotsSell += OrderLots();
               totalSwapSell += OrderSwap();
            }
         }
      }
   }
}
 

romanzif

Постоялец
Команда форума
Администратор
Форекс робот VolnaFX
Монет
23,220
У нас немного разные функции.
Вы считаете в одной функции всё, а я в этом примере только объём :)

Но спасибо за код, уверен многим пригодится ваша функция.
 

Сигналы

Заработок онлайн

Верх