Мы должны найти наибольшую цену открытия из всех открытых позиций по данному инструменту.
Сам код выглядит так:
- Код: выделить все
double f_GetMaxOpenPriceLevel(int op, int mn)
{
/*
Версия : 23.11.2016
Описание : Определяет наибольшую цену открытия из открытых позиций
Вернет "0" в случае отсутствие позиций
Параметры:
op - операция (-1 - любая позиция)
mn - MagicNumber (-1 - любой магик)
*/
double dbl_Ymax = 0;
for(int i = 0; i < OrdersTotal(); i++)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if(OrderSymbol() == Symbol())
{
if(OrderType()== OP_BUY || OrderType()== OP_SELL)
{
if(op < 0 || OrderType() == op)
{
if(mn < 0 || OrderMagicNumber() == mn)
{
if(OrderOpenPrice() > dbl_Ymax) dbl_Ymax = OrderOpenPrice();
}
}
}
}
}
}
return(dbl_Ymax);
}
Функция типа double под названием f_GetMaxOpenPriceLevel(int op, int mn) имеет два параметра:
- op - тип операции (OP_BUY, OP_SELL или "-1" - или покупка или продажа);
- mn - MagicNumber.
В цикле пробегаем по всем открытым позициям и выбираем по заданным критериям (параметры функции) нужные. Отмечаем цену открытия и сравниваем сначала с нулем, а потом с большей по уровню. Так находим сделку с самой максимальной ценой открытия. Если же такой не окажется (вообще нет позиций по заданным критериям), функция вернет ноль.