Сб. Апр 27th, 2024

Сегодня понадобилось узнать цену открытия определенного номера в сетке ордеров, чтобы закрывать всю сетку, если цена поднимается выше предпоследнего ордера в сетке Бай-ордеров. И наоборот.

Функция MQL4 возвращает цену открытия ордера, заданного в аргументах:

double NumberPriceOpen(int type,int number)
  {
   int totalOrders=CountTrades(type);
   double prices[];
   ArrayResize(prices,totalOrders,totalOrders);
   int c=0;
   if(totalOrders>number)
     {
      for(int i=0; i<CountTrades(-1); i++)
        {
         if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
           {
            if(OrderSymbol()==Symbol() && OrderType()==type && OrderMagicNumber()==Magic)
              {
               prices[c]=OrderOpenPrice();
               c++;
              }
           }
        }
      if(type==OP_BUY) ArraySort(prices,WHOLE_ARRAY,0,MODE_ASCEND);
      if(type== OP_SELL) ArraySort(prices,WHOLE_ARRAY,0,MODE_DESCEND);
      return(prices[number]);
     }
   return(0);
  }
//И функция количества ордеров нужного типа
int CountTrades(int type, int magic)
  {
   int count = 0;
   for(int i = OrdersTotal()-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && (OrderType()==type || type==-1) && OrderMagicNumber()==magic)
            count++;
        }
     }
   return(count);
  }

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

от drivermql

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

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

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