Функция ExistPosByPrice().
Данная функция возвращает флаг существования позиции по заданной цене открытия. Более точный отбор проверяемых позиций задаётся внешними параметрами:
- sy - Наименование рыночного инструмента. Если задать этот параметр, то функция проверит позиции только заданного инструмента. Значение по умолчанию "" означает любой рыночный инструмент. NULL означает текущий инструмент.
- op - Торговая операция, тип позиции. Допустимые значения: OP_BUY, OP_SELL или -1. Значение по умолчанию -1 означает любую позицию.
- mn - Идентификатор позиции, MagicNumber. Значение по умолчанию -1 означает любой идентификатор.
- pp - Цена открытия позиции. Значение по умолчанию 0 означает любую цену.
bool ExistPosByPrice(string sy="", int op=-1, int mn=-1, double pp=0) {
double px, py;
int d, i, k=OrdersTotal();
if (sy=="0") sy=Symbol();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if ((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
if (mn<0 || OrderMagicNumber()==mn) {
d=MarketInfo(OrderSymbol(), MODE_DIGITS);
px=NormalizeDouble(pp, d);
py=NormalizeDouble(OrderOpenPrice(), d);
if (pp<=0 || px==py) return(True);
}
}
}
}
}
return(False);
} |