Помогите в советнике правильно сформулировать условие if!

 

Доброго времени суток!

Помогите в советнике правильно сформулировать условие if индикатора для открытия на покупку/продажу, с возможностью изменения настроек индикатора. Спасибо!

 

и 

Файлы:
i-Regr.mq4  5 kb
 
Artem Ashikhmin:
А когда должен быть сигнал? При изгибе линий или пересечении цены выше ниже?

Так стрелочками на скрине показано - вверх и вниз =)  

Для ТС: тут условий несколько может быть, можно просто "закрытие выше/ниже", "хай выше/ниже" ну и ещё можно придумать, но от этого будет зависеть конечный результат качества сигналов.

 
Artem Ashikhmin:

А когда должен быть сигнал? При изгибе линий или пересечении цены выше ниже?
Можно сделать изгиб средней и пересечение ценой верхней линии и нижней  

При изгибе средней много ложных сигналов, а пересечение - вот как раз то!

Спасибо за помощь. Протестирую - отпишусь! 

 
Vitaly Muzichenko:

Так стрелочками на скрине показано - вверх и вниз =)  

Для ТС: тут условий несколько может быть, можно просто "закрытие выше/ниже", "хай выше/ниже" ну и ещё можно придумать, но от этого будет зависеть конечный результат качества сигналов.

Думаю что "хай", что "закрытие" - одинаково. Главное -  цена пересекла линию - вход в рынок.
 

только учтите что изгиб меняется, и индикатор выгибается в другую сторону. 

Т.е. он рисует.  

 

//+-----------------------------------------------------------------------------------------------+
//|                                                                                  EA i-Reg.mq4 |
//|                                                                                          2016 |
//|                                                                                               |
//+-----------------------------------------------------------------------------------------------+
extern double Lot = 0.01;
extern int slip = 3;
extern int TakeProfit = 10;
extern int MagicNumber = 9999;
extern int TrailingStop = 15;

extern int    TF = 5;
extern int    degree = 3;
extern double kstd = 2.0;
extern int    bars = 250;
extern int    shift = 0;
//----------------------+
//int Signal_Buy=-1;
//int Signal_Sell=-1;
int cnt,ticket,total;
//----------------------+
int start() {
//--------------------------------------------------------------------------------------------------------------------+
// получение сигнала ________

     //double RegrBend1 = iCustom(Symbol(),TF,"i-Regr",degree,kstd,bars,shift, 0,1); // 0 средняя линия
     //double RegrBend2 = iCustom(Symbol(),TF,"i-Regr",degree,kstd,bars,shift, 0,2); // 0 средняя линия
    // double MA        = iMA(Symbol(),TF,3,0,3,0,1); //MA используется как цена, можно так же использовать Bid > линии, Ask < линии          
     double RegrUp    = iCustom(Symbol(),TF,"i-Regr",degree,kstd,bars,shift, 1,1); // 1 верхняя линия
     double RegrDown  = iCustom(Symbol(),TF,"i-Regr",degree,kstd,bars,shift, 2,1); // 2 нижняя линия

     /*int Buy=-1;    
      if(MA<RegrDown || Ask<RegrDown) Buy=0; //если пересечение МА или Ask нижней линии в низ (перепроданность)
      if(Buy==0) {Signal_Buy=0;}
//-------------------------------+
     int Sell=-1;    
      if(MA>RegrUp || Bid>RegrUp) Sell=1; //если пересечение МА или Bid верхней линии вверх (перекупленность)
      if(Sell==1) {Signal_Sell=1;}*/

//=====================================================================================================================
total=OrdersTotal();
   if(total<1){
   if(/*MA<RegrDown ||*/ Ask<RegrDown){
   ticket=OrderSend (Symbol(),OP_BUY, Lot,Ask,slip,0,Ask+TakeProfit*Point,0, MagicNumber,0,Blue);
                        return(0);
        }
        
   if(/*MA>RegrUp || */ Bid>RegrUp){
   ticket=OrderSend (Symbol(),OP_SELL, Lot,Bid,slip,0,Bid-TakeProfit*Point,0, MagicNumber,0,Red);
                       return(0);
       }
}

    if (total>0)
     for(cnt=OrdersTotal();cnt>=0;cnt--)
   {
     if(!OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES))continue;
          if (OrderSymbol() == Symbol()&& OrderMagicNumber() == MagicNumber)
          {    
                  if (OrderType()==OP_SELL)
                  {                    
                          if (TrailingStop>0)
                          {
                                  if((OrderOpenPrice()-Ask)>(Point*TrailingStop))
                 {
                  if((OrderStopLoss()>(Ask+Point*TrailingStop)) || (OrderStopLoss()==0))
                    {
                     //--- modify order and exit
                     if(!OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red))
                        Print("OrderModify error ",GetLastError());
                                                 return(0);                                            
                                         }
                                  }
                          }
                  }
  
                  if (OrderType()==OP_BUY)
                  {
                         if (TrailingStop>0)
                         {
                            if(Bid-OrderOpenPrice()>Point*TrailingStop)
                 {
                  if(OrderStopLoss()<Bid-Point*TrailingStop)
                    {
                     //--- modify order and exit
                     if(!OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green))
                        Print("OrderModify error ",GetLastError());
                   return(0);
                    }
                }
            }
         }
      }
  }
  return(0);
}

Вот собственно и сам советник. Может слегка "грязно", есть лишнее, но результат есть! Не существенно, но чуть подправил условие входа. Именно с такими настройками и вводными получил, что хотел! 

Индюк перерисовывает, что следовало ожидать. Имеет смысл работать с TF индикатора Н1 и kstd 1.0 на более меньшем временном интервале.

Вместо стопов и трейлинга, думаю, логичнее сделать усреднение из-за существенной просадки. На истории возврат цены и взятие ТР слишком долго. 

Пишите мнения - будет интересно! 

 Artem Ashikhmin, спасибо! 

 
Roman Rymar:
//+-----------------------------------------------------------------------------------------------+
//|                                                                                  EA i-Reg.mq4 |
//+-----------------------------------------------------------------------------------------------+
...
}

Пишите мнения - будет интересно! 

 Artem Ashikhmin, спасибо! 

Мне интересно, именно эту логику храню в архиве более года - никак нет времени написать, но там очень много факторов для выхода со сделки.

Вы бы скрин тестера приложили, ну и картинку со входами в рынок по индикатору, это было-бы в несколько раз эффективнее для обсуждения.

Если не сложно - приложите! 

 

Это надо видеть! Тест длиться ооооччень долго! На видео лучше всего будет видно работу советника. Тест на М1 (настройки сова можна увидеть в видео). Вот минут 10 идет тест - (с января по сегодня) еще январь не весь "прошел")) В 20 числах января ровная линия и +23% ($1000, Lot - 0.1, tp - 10, traling - 3)

 

 

 

Спешу добавить скрин (за январь) :

 

test#1 

 
Artem Ashikhmin:

Отлично!! Так будет по чище))

      return(0); //зачем тут выход из старта? условие же есть: если в рынке 1 ордер, то больше открытий не будет вообще!!

... 

      return(0);  // и тут тоже не нужен return(0);
    

 Супер!
Не получалось как-то по другому, чтоб не выходить. Бай нормально исполнялся, а когда селл, то вместе с бай! Вот так пришлось их "упорядочить".

 

К стате, это не страшно и вообще не ERROR)), но...))))