Функция ClosePosWithMaxProfitInCurrency().
Эта функция выполняет закрытие одной позиции с максимальным положительным профитом в валюте депозита. То есть из пяти позиций, профит каждой из которых в данный момент составляет -34, 15, 73, -90, 41, будет закрыта позиция с профитом 73 единицы в валюте депозита. Более точный отбор закрываемых позиций задаётся внешними параметрами:
- sy - Наименование инструмента. Если задать этот параметр, то функция проверит позиции только заданного инструмента. NULL означает текущий инструмент, а "" (по умолчанию) - любой инструмент.
- op - Торговая операция, тип позиции. Допустимые значения: OP_BUY, OP_SELL или -1. Значение по умолчанию -1 - означает любую позицию.
- mn - Идентификатор позиции (MagicNumber). Значение по умолчанию -1 - любой магик.
void ClosePosWithMaxProfitInCurrency(string sy="", int op=-1, int mn=-1) {
double pr=0;
int i, k=OrdersTotal(), np=-1;
if (sy=="0") sy=Symbol();
for (i=k-1; i>=0; i--) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if ((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) {
if (mn<0 || OrderMagicNumber()==mn) {
if (pr<OrderProfit()+OrderSwap()) {
pr=OrderProfit()+OrderSwap();
np=i;
}
}
}
}
}
if (np>=0) {
if (OrderSelect(np, SELECT_BY_POS, MODE_TRADES)) {
ClosePosBySelect();
}
}
} |