Сегодня понадобилось узнать цену открытия определенного номера в сетке ордеров, чтобы закрывать всю сетку, если цена поднимается выше предпоследнего ордера в сетке Бай-ордеров. И наоборот.
Функция 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);
}