Функция ExistOPNearMarket().
Данная функция возвращает флаг существования ордера или позиции около рынка (на заданном расстоянии в пунктах от рынка). Более точный отбор проверяемых ордеров или позиций задаётся внешними параметрами:
- sy - Наименование инструмента. Если задать этот параметр, то функция проверит ордера или позиции только заданного инструмента. "" или NULL означает текущий инструмент.
- op - Торговая операция, тип ордера или позиции. Допустимые значения: OP_BUY, OP_SELL, OP_BUYLIMIT, OP_SELLLIMIT, OP_BUYSTOP, OP_SELLSTOP или -1. Значение по умолчанию -1 означает любую торговую операцию.
- mn - Идентификатор ордера или позиции (MagicNumber). Значение по умолчанию -1 - любой идентификатор.
- ds - Расстояние от рынка в пунктах. Значение по умолчанию 1000000.
bool ExistOPNearMarket(string sy="", int op=-1, int mn=-1, int ds=1000000) {
int i, k=OrdersTotal(), ot;
if (sy=="" || sy=="0") sy=Symbol();
double p=MarketInfo(sy, MODE_POINT);
if (p==0) if (StringFind(sy, "JPY")<0) p=0.0001; else p=0.01;
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
ot=OrderType();
if ((OrderSymbol()==sy) && (op<0 || ot==op)) {
if (mn<0 || OrderMagicNumber()==mn) {
if (ot==OP_BUY || ot==OP_BUYLIMIT || ot==OP_BUYSTOP) {
if (MathAbs(MarketInfo(sy, MODE_ASK)-OrderOpenPrice())<ds*p) return(True);
}
if (ot==OP_SELL || ot==OP_SELLLIMIT || ot==OP_SELLSTOP) {
if (MathAbs(OrderOpenPrice()-MarketInfo(sy, MODE_BID))<ds*p) return(True);
}
}
}
}
}
return(False);
} |