Функция DistMarketAndPos().
Ну вот! Пошли функции поинтереснее! Например, такая, которая возвращает расстояние в пунктах между рынком и ближайшей позицей. Более точный отбор проверяемых позиций задаётся внешними параметрами:
- sy - Наименование инструмента. Если задать этот параметр, то функция проверит позиции только заданного инструмента. "" или NULL означает текущий инструмент.
- op - Торговая операция, тип позиции. Допустимые значения: OP_BUY, OP_SELL или -1. Значение по умолчанию -1 - означает любую позицию.
- mn - Идентификатор позиции (MagicNumber). Значение по умолчанию -1 - любой магик.
int DistMarketAndPos(string sy="", int op=-1, int mn=-1) {
double d, p;
int i, k=OrdersTotal(), r=1000000;
if (sy=="" || sy=="0") sy=Symbol();
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)) {
if ((OrderSymbol()==sy) && (op<0 || OrderType()==op)) {
if (mn<0 || OrderMagicNumber()==mn) {
if (OrderType()==OP_BUY) {
d=MathAbs(MarketInfo(sy, MODE_ASK)-OrderOpenPrice())/p;
if (r>d) r=NormalizeDouble(d, 0);
}
if (OrderType()==OP_SELL) {
d=MathAbs(OrderOpenPrice()-MarketInfo(sy, MODE_BID))/p;
if (r>d) r=NormalizeDouble(d, 0);
}
}
}
}
}
return(r);
} |