Стоп на уровне Хая/Лоя предыдущего бара

 

Всем привет!

Уже больше недели меня мучает один вопрос - как правильно выставить стопы. Перебрал уже больше десятка вариантов и никак :(

Постоянно фигурируют две ошибки:

 130 - Слишком близкие стопы или неправильно рассчитанные

4051 - Недопустимое значение параметра функции

----------------------

А всего то требуется выставить стоп на уровне Хая или Лоя предыдущего бара.

Мои варианты:

if(TrendDOWN() == True && OrderCloseTimeBool() != True && EMA_Filtr() == True)
               {
                if(PinUpWhite()   == True ||
                   PinUpBlack()   == True ||
                   PatternBuy_0() == True ||
                   PatternBuy_1() == True ||
                   PatternBuy_2() == True ||
                   PatternBuy_3() == True)
                  {
                   int Ticket = OrderSend(Symbol(),OP_BUY,Lots(),Ask,Slippage,0,0,"",Magic,0,Blue);
                   if(Ticket > 0 )
                     {
                     double SL_Buy = NormalizeDouble(Ask -((Ask-iLow(NULL,0,1))/Point),Digits);
                     bool mod = OrderModify(Ticket,OrderOpenPrice(),SL_Buy,0,0);
                     }
                  }
               }

Еще вариант в качестве функции:

double StopLossOP_BUY()
{
if(OrdersTotal()>0)
  {
   for(int i=0; i<OrdersTotal(); i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == OP_BUY)
           {
            double StopOP_BUY = NormalizeDouble(OrderOpenPrice(),Digits) -                 //цена открытия ордера
                               (NormalizeDouble(OrderOpenPrice()-iLow(NULL,0,1),Digits)+   //разница между ценой открытия ордера и Лоем предыдщей свечи
                                NormalizeDouble(MarketInfo(Symbol(),MODE_SPREAD)*Point,Digits));//спред
            
            return(NormalizeDouble(StopOP_BUY,Digits));  
           }
        }
     }//for
  }//if
  return(0);
}

 

Второй вариант, также в качестве функции:

double StopLossOP_BUY2()
{
if(OrdersTotal()>0)
  {
   for(int i=0; i<OrdersTotal(); i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == OP_BUY)
           {
            
            RefreshRates();
            double StopOP_BUY = NormalizeDouble(OrderOpenPrice(),Digits)-                       //цена открытия ордера
                               (NormalizeDouble(OrderOpenPrice()-iLow(NULL,0,1),Digits)+        //разница между ценой открытия ордера и Лоем предыдщей свечи
                                NormalizeDouble(MarketInfo(Symbol(),MODE_SPREAD)*Point,Digits));//спред
            
            if(StopOP_BUY >= NormalizeDouble(Ask - MarketInfo(Symbol(),MODE_STOPLEVEL)*Point,Digits))
              {
               RefreshRates();
               return(NormalizeDouble(Ask - MarketInfo(Symbol(),MODE_STOPLEVEL)*Point,Digits));
              }
            else
              {
               RefreshRates();
               return(NormalizeDouble(StopOP_BUY,Digits)); 
              }
           }
        }
     }//for
  }//if
  return(0);
}

 

Люди добрые, помогите чем можно :(

Или приведите свои примеры правильного выставления стопов на уровне Хая/Лоя предыдущего бара.

 

Я схожу с ума :)

   

 

задача уже решена!

всем спасибо!

форум мертв! :( 

 
kreativ_25:

задача уже решена!

всем спасибо!

форум мертв! :( 


нашел решение и не поделился им?

вот так и работают русские форумы!

 
На счет 130 ошибки это нормальная ситуация, так называемый стоп-левел. Если брокер плохой, то он присутствует, его необходимо обработать программой.
 
sergeev:


нашел решение и не поделился им?

вот так и работают русские форумы!

Ошибка заключалась в том, что всем стопам присваивалось одно и тоже значение! 

И необходимо отметить, что выше указанные  примеры выставления стопов рабочие! А ошибка находилась в коде вне стопов. 

Файлы:
9b0974.jpg  248 kb
 
Bonifacy:
На счет 130 ошибки это нормальная ситуация, так называемый стоп-левел. Если брокер плохой, то он присутствует, его необходимо обработать программой.
Можно в принципе виртуальаный стоп прописать и ничего не надо выставлять. И брокер не увидит и проблем с исполнением кода будет возможно меньше.
 
kreativ_25:
Можно в принципе виртуальаный стоп прописать и ничего не надо выставлять. И брокер не увидит и проблем с исполнением кода будет возможно меньше.
Только нужна 100% бесперебойная связь...
Причина обращения: