Дистанцмя между ордерами - PipStep, Distance, FiboPips...

 

Во многих сеточных советниках стоят функции по установке Дистанции между открытиями однонаправленных или противоположных ордеров. Пытаюсь их содрать по принципу "Чем меньше строка кода тем лучше", но они у меня не запускаются!

if(OrdersTotal() < 3)
{
if(Ask-StartPrice>=PipStep*Point)
// if(Ask-OpenPrice>=Point*Distance*2)
// if ((LastBuyPrice() -Ask) >= PipStep*Point)
// if (Ask>=NormalizeDouble(LastBuyPrice()+PipStep*Point,Digits))
if(open[1]<Close[0])
{
OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Bid-SL*Point,Bid+TP*Point,"Trend Long",Magic,0,Blue);
}

Либо коротких нет... либо (если повернуть обратно >= ) короткие и длинные есть,но дистанция не устанавливается. Помогите советом или поделитесь готовой простой функцией если у кого есть и желательно с объяснялкой по её установке.

 
PSira:

Во многих сеточных советниках стоят функции по установке Дистанции между открытиями однонаправленных или противоположных ордеров. Пытаюсь их содрать по принципу "Чем меньше строка кода тем лучше", но они у меня не запускаются!

if(OrdersTotal() < 3)
{
if(Ask-StartPrice>=PipStep*Point)
// if(Ask-OpenPrice>=Point*Distance*2)
// if ((LastBuyPrice() -Ask) >= PipStep*Point)
// if (Ask>=NormalizeDouble(LastBuyPrice()+PipStep*Point,Digits))
if(open[1]<Close[0])
{
OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Bid-SL*Point,Bid+TP*Point,"Trend Long",Magic,0,Blue);
}

Либо коротких нет... либо (если повернуть обратно >= ) короткие и длинные есть,но дистанция не устанавливается. Помогите советом или поделитесь готовой простой функцией если у кого есть и желательно с объяснялкой по её установке.

//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
if(OrdersTotal() < 3)
   {
  if(Open[1]<Close[0])
     { 
    if(DistMarketAndPos(NULL,OP_BUY,Magic)>10)   //  Дистанция > 10 пунктов
       {
      OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Bid-SL*Point,Bid+TP*Point,"Trend Long",Magic,0,Blue);
       }
    }
 }
//----
   return(0);
  }
//+------------------------------------------------------------------+
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает расстояние в пунктах между рынком и ближайшей       |
//|             позицей                                                        |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   ("" или NULL - текущий символ)          |
//|    op - торговая операция          (    -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);
}
Как-то так