Wilson Channels





//+------------------------------------------------------------------+
//|                                                         RSIP.mq4 |
//|                                       Copyright © 2006, Akuma99. |
//|                                      http://akuma99.blogspot.com |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2006, Akuma99."
#property link      "http://akuma99.blogspot.com"

#property indicator_chart_window
#property indicator_buffers 8
#property indicator_color1 Red
#property indicator_color2 Red
#property indicator_color3 Red
#property indicator_color4 Red
#property indicator_color5 Blue
#property indicator_color6 Blue
#property indicator_color7 Blue
#property indicator_color8 Blue

//---- input parameters
extern int          mode=0;
extern double       period=32;
extern double       overboughtStart=55;
extern double       overboughtEnd=75;
extern double       oversoldStart=45;
extern double       oversoldEnd=25;

//---- buffers
double ExtMapBuffer1[];
double ExtMapBuffer2[];
double ExtMapBuffer3[];
double ExtMapBuffer4[];
double ExtMapBuffer5[];
double ExtMapBuffer6[];
double ExtMapBuffer7[];
double ExtMapBuffer8[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
  
   IndicatorBuffers(8);
   
//---- indicators
   
   SetIndexStyle(0,DRAW_LINE);//,2,1,indicator_color2);
   SetIndexBuffer(0,ExtMapBuffer1);
   
   SetIndexStyle(1,DRAW_LINE);//,2,1,indicator_color3);
   SetIndexBuffer(1,ExtMapBuffer2);
   
   SetIndexStyle(2,DRAW_HISTOGRAM,STYLE_DOT);//,2,1,indicator_color4);
   SetIndexBuffer(2,ExtMapBuffer3);
   
   SetIndexStyle(3,DRAW_HISTOGRAM,STYLE_DOT);//,2,1,indicator_color5);
   SetIndexBuffer(3,ExtMapBuffer4);
   
   SetIndexStyle(4,DRAW_LINE);//,2,1,indicator_color5);
   SetIndexBuffer(4,ExtMapBuffer5);
   
   SetIndexStyle(5,DRAW_LINE);//,2,1,indicator_color5);
   SetIndexBuffer(5,ExtMapBuffer6);
   
   SetIndexStyle(6,DRAW_HISTOGRAM,STYLE_DOT);//,2,1,indicator_color5);
   SetIndexBuffer(6,ExtMapBuffer7);
   
   SetIndexStyle(7,DRAW_HISTOGRAM,STYLE_DOT);//,2,1,indicator_color5);
   SetIndexBuffer(7,ExtMapBuffer8);
   
   Comment("Wilson channels: available modes: 0=RSI, 1=Stochastic, 2=MFI, 3=deMarker, 4=Williams");
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int    counted_bars=IndicatorCounted();
   int    limit=Bars-counted_bars;
   double n,os1,ob1,os2,ob2;
//----
   for(int i=limit; i>=0; i--) {
      
      n = breakDownToPrice(i,50);
      os1 = breakDownToPrice(i,overboughtEnd);
      os2 = breakDownToPrice(i,overboughtStart);
      ob1 = breakDownToPrice(i,oversoldStart);
      ob2 = breakDownToPrice(i,oversoldEnd);
      
      ExtMapBuffer1[i]=ob2;
      ExtMapBuffer2[i]=ob1;
      ExtMapBuffer3[i]=ob2;
      ExtMapBuffer4[i]=ob1;
      ExtMapBuffer5[i]=os2;
      ExtMapBuffer6[i]=os1;
      ExtMapBuffer7[i]=os2;
      ExtMapBuffer8[i]=os1;
   
   }
   
   
//----
   return(0);
  }
//+------------------------------------------------------------------+

double breakDownToPrice(int cnt, int v) {
   
   double c;
   
   switch (mode) {
   
      case 0: //rsi
         c = iRSI(NULL,0,period,PRICE_CLOSE,cnt+1)-v;
         break;
      case 1: //stochastic
         c = iStochastic(NULL,0,period,3,3,MODE_SMA,0,MODE_MAIN,cnt+1)-v;
         break;
      case 2: //money flow index
         c = iMFI(NULL,0,period,cnt+1)-v;
         break;
      case 3: //demarker
         c = (iDeMarker(NULL,0,period,cnt+1)*100)-v;
         break;
      case 4:
         c = iWPR(NULL,0,period,cnt+1)+v;
         break;
    }
    
   c = c/100;
   c = Close[cnt+1]*c;
   c = Close[cnt+1]-c;
   
   return (c);

}



Sample





Analysis



Market Information Used:

Series array that contains close prices for each bar


Indicator Curves created:

Implements a curve of type DRAW_LINE

Implements a curve of type DRAW_HISTOGRAM

Indicators Used:

Relative strength index
Stochastic oscillator
Money flow index
DeMarker indicator
Larry William percent range indicator


Custom Indicators Used:

Order Management characteristics:

Other Features: