Советники: iWPR EA and Filter

 

iWPR EA and Filter:

Стратегия по индикатору iWPR (Williams’ Percent Range, %R) плюс фильтр в виде пользовательского индикатора MA Color N Bars

iWPR EA and Filter

Автор: Vladimir Karputov

 
Привет Vladimir,
Насколько я понял, фильтрацию сигналов осуществляет индикатор "MA Color N Bars".
Можете ли вы четко сформулировать «правила» фильтра, применяемого к сигналам iWPR, если это возможно?
 
Edviao #:
Привет Vladimir,
Насколько я понял, фильтрацию сигналов осуществляет индикатор "MA Color N Bars".
Можете ли вы четко сформулировать «правила» фильтра, применяемого к сигналам iWPR, если это возможно?

Торговые сигналы:

Сигнал на открытие позиции SELL: iWPR пересекает снизу вверх нижний уровень ('WPR: Level DOWN'), сигнал на открытие BUY:  iWPR пересекает сверху вниз верхний уровень ('WPR: Level UP'). Дополнительно сигналы отсеиваются при помощи фильтра: для позиции SELL цвет фильтра должен быть ' clrRed', а для позиции BUY - ' clrBlue':

 
Спасибо, Vladimir.
 
Edviao #:
Спасибо, Vladimir.

Вы также можете смотреть все сигналы в функции 'SearchTradingSignals' (всё что относится к WPR я выделил цветом)

//+------------------------------------------------------------------+
//| Search trading signals                                           |
//+------------------------------------------------------------------+
bool SearchTradingSignals(void)
  {
   if(iTime(m_symbol.Name(),InpWorkingPeriod,0)==m_last_deal_in) // on one bar - only one deal
      return(true);
   if(!TimeControlHourMinute())
      return(true);
   double wpr[],ma_color[];
   ArraySetAsSeries(wpr,true);
   ArraySetAsSeries(ma_color,true);
   int start_pos=0,count=6;
   if(!iGetArray(handle_iWPR,0,start_pos,count,wpr) || !iGetArray(handle_iCustom,1,start_pos,count,ma_color))
     {
      return(false);
     }
   int size_need_position=ArraySize(SPosition);
   if(size_need_position>0)
      return(true);
//--- BUY Signal
   if(wpr[m_bar_current+1]<Inp_WPR_level_down && wpr[m_bar_current]>Inp_WPR_level_down)
      if(ma_color[m_bar_current]==1.0)
        {
         if(!InpReverse)
           {
            if(InpTradeMode!=sell)
              {
               ArrayResize(SPosition,size_need_position+1);
               SPosition[size_need_position].pos_type=POSITION_TYPE_BUY;
               if(InpPrintLog)
                  Print(__FILE__," ",__FUNCTION__,", OK: ","Signal BUY");
               return(true);
              }
           }
         else
           {
            if(InpTradeMode!=buy)
              {
               ArrayResize(SPosition,size_need_position+1);
               SPosition[size_need_position].pos_type=POSITION_TYPE_SELL;
               if(InpPrintLog)
                  Print(__FILE__," ",__FUNCTION__,", OK: ","Signal SELL");
               return(true);
              }
           }
        }
//--- SELL Signal
   if(wpr[m_bar_current+1]>Inp_WPR_level_up && wpr[m_bar_current]<Inp_WPR_level_up)
      if(ma_color[m_bar_current]==2.0)
        {
         if(!InpReverse)
           {
            if(InpTradeMode!=buy)
              {
               ArrayResize(SPosition,size_need_position+1);
               SPosition[size_need_position].pos_type=POSITION_TYPE_SELL;
               if(InpPrintLog)
                  Print(__FILE__," ",__FUNCTION__,", OK: ","Signal SELL");
               return(true);
              }
           }
         else
           {
            if(InpTradeMode!=sell)
              {
               ArrayResize(SPosition,size_need_position+1);
               SPosition[size_need_position].pos_type=POSITION_TYPE_BUY;
               if(InpPrintLog)
                  Print(__FILE__," ",__FUNCTION__,", OK: ","Signal BUY");
               return(true);
              }
           }
        }
//---
   return(true);
  }