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