trafficlight_637





#property copyright "Wtf11"

#property indicator_separate_window
#property indicator_minimum 0
#property indicator_maximum 5
#property indicator_buffers 8
#property indicator_color1 Green
#property indicator_color2 Green
#property indicator_color3 Green
#property indicator_color4 Green
#property indicator_color5 FireBrick
#property indicator_color6 FireBrick
#property indicator_color7 FireBrick
#property indicator_color8 FireBrick


//---- input parameters
extern int Period1=5;
extern int Period2=10;
extern int Period3=20;
extern int Period4=40;
extern int tf1=PERIOD_W1;
extern int tf2=PERIOD_D1;
extern int tf3=PERIOD_H4;
extern int tf4=PERIOD_H1;
extern double GapStop=1; //size of gap relative to previous bar size.  Will display black if there is a gap on relevant TF.

//---- buffers
double Buffer1[];
double Buffer2[];
double Buffer3[];
double Buffer4[];
double Buffer5[];
double Buffer6[];
double Buffer7[];
double Buffer8[];


//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
   string short_name;
//---- 2 additional buffers are used for counting.
   IndicatorBuffers(8);

//---- indicator line
   SetIndexStyle(0,DRAW_ARROW);
   SetIndexBuffer(0,Buffer1);
   SetIndexArrow(0, 174);
//---- indicator line
   SetIndexStyle(1,DRAW_ARROW);
   SetIndexBuffer(1,Buffer2);
   SetIndexArrow(1, 174);
//---- indicator line
   SetIndexStyle(2,DRAW_ARROW);
   SetIndexBuffer(2,Buffer3);
   SetIndexArrow(2, 174);
//---- indicator line
   SetIndexStyle(3,DRAW_ARROW);
   SetIndexBuffer(3,Buffer4);
   SetIndexArrow(3, 174);
//---- indicator line
   SetIndexStyle(4,DRAW_ARROW);
   SetIndexBuffer(4,Buffer5);
   SetIndexArrow(4, 174);
//---- indicator line
   SetIndexStyle(5,DRAW_ARROW);
   SetIndexBuffer(5,Buffer6);
   SetIndexArrow(5, 174);
//---- indicator line
   SetIndexStyle(6,DRAW_ARROW);
   SetIndexBuffer(6,Buffer7);
   SetIndexArrow(6, 174);
//---- indicator line
   SetIndexStyle(7,DRAW_ARROW);
   SetIndexBuffer(7,Buffer8);
   SetIndexArrow(7, 174);

//---- name for DataWindow and indicator subwindow label
   short_name="Traffic Light";
   IndicatorShortName(short_name);
   SetIndexLabel(0,short_name);
//----
   SetIndexDrawBegin(0,Period4);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Relative Strength Index                                          |
//+------------------------------------------------------------------+
int start()
  {
   int    i,counted_bars=IndicatorCounted();
//----
   if(Bars<=Period4) return(0);
//---- initial zero
   if(counted_bars<1)
      for(i=1;i<=Period4;i++) 
         {
         Buffer1[Bars-i]=-10.0;
         Buffer2[Bars-i]=-10.0;
         Buffer3[Bars-i]=-10.0;
         Buffer4[Bars-i]=-10.0;
         Buffer5[Bars-i]=-10.0;
         Buffer6[Bars-i]=-10.0;
         Buffer7[Bars-i]=-10.0;
         Buffer8[Bars-i]=-10.0;
         }
//----
   i=Bars-Period4-1;
   if(counted_bars>=Period4) i=Bars-counted_bars-1;
   while(i>=0)
     {
      double MA, MA1, MA2, MA3, MA4;
      int RYG;
      

 //   traffic light code.  Must set RYG to -1 for red, 0 for black, 1 for green
 
      int bb=HighBar(Symbol(), 0, i, tf1);
      if (bb==-1) continue;
      MA1=iMA(NULL,tf1,Period1,0,MODE_EMA,PRICE_CLOSE,bb);
      MA3=iMA(NULL,tf1,Period3,0,MODE_EMA,PRICE_CLOSE,bb);
      double bbCL=iClose(Symbol(), tf1, bb);
      
      RYG=0;
      if ((bbCL>MA1)&&(bbCL>MA3)) RYG=1;
      if ((bbCL<MA1)&&(bbCL<MA3)) RYG=-1;
      
 //   display lowest traffic light
      switch(RYG) 
         {
         case 1:
            Buffer1[i]=1.0;
            Buffer5[i]=-10.0;
            break;
         case -1:   
            Buffer1[i]=-10.0;
            Buffer5[i]=1.0;
            break;
         case 0:
            Buffer1[i]=-10.0;
            Buffer5[i]=-10.0;
            break;   
         }
      
  //   traffic light code.  Must set RYG to -1 for red, 0 for black, 1 for green
 
      bb=HighBar(Symbol(), 0, i, tf2);
      if (bb==-1) continue;
      MA1=iMA(NULL,tf2,Period1,0,MODE_EMA,PRICE_CLOSE,bb);
      MA3=iMA(NULL,tf2,Period3,0,MODE_EMA,PRICE_CLOSE,bb);
      bbCL=iClose(Symbol(), tf2, bb);
      
      RYG=0;
      if ((bbCL>MA1)&&(bbCL>MA3)) RYG=1;
      if ((bbCL<MA1)&&(bbCL<MA3)) RYG=-1;
      
 //   display second lowest traffic light
      switch(RYG) 
         {
         case 1:
            Buffer2[i]=2.0;
            Buffer6[i]=-10.0;
            break;
         case -1:   
            Buffer2[i]=-10.0;
            Buffer6[i]=2.0;
            break;
         case 0:
            Buffer2[i]=-10.0;
            Buffer6[i]=-10.0;
            break;   
         }
      
   //   traffic light code.  Must set RYG to -1 for red, 0 for black, 1 for green
      bb=HighBar(Symbol(), 0, i, tf3);
      if (bb==-1) continue;
      MA1=iMA(NULL,tf3,Period1,0,MODE_EMA,PRICE_CLOSE,bb);
      MA3=iMA(NULL,tf3,Period3,0,MODE_EMA,PRICE_CLOSE,bb);
      bbCL=iClose(Symbol(), tf3, bb);
      
      RYG=0;
      if ((bbCL>MA1)&&(bbCL>MA3)) RYG=1;
      if ((bbCL<MA1)&&(bbCL<MA3)) RYG=-1;
      
 //   display second top traffic light
      switch(RYG) 
         {
         case 1:
            Buffer3[i]=3.0;
            Buffer7[i]=-10.0;
            break;
         case -1:   
            Buffer3[i]=-10.0;
            Buffer7[i]=3.0;
            break;
         case 0:
            Buffer3[i]=-10.0;
            Buffer7[i]=-10.0;
            break;   
         }
     
   //   traffic light code.  Must set RYG to -1 for red, 0 for black, 1 for green
      bb=HighBar(Symbol(), 0, i, tf4);
      if (bb==-1) continue;
      MA1=iMA(NULL,tf4,Period1,0,MODE_EMA,PRICE_CLOSE,bb);
      MA3=iMA(NULL,tf4,Period3,0,MODE_EMA,PRICE_CLOSE,bb);
      bbCL=iClose(Symbol(), tf4, bb);
      
      RYG=0;
      if ((bbCL>MA1)&&(bbCL>MA3)) RYG=1;
      if ((bbCL<MA1)&&(bbCL<MA3)) RYG=-1;
      
 //   display second lowest traffic light
      switch(RYG) 
         {
         case 1:
            Buffer4[i]=4.0;
            Buffer8[i]=-10.0;
            break;
         case -1:   
            Buffer4[i]=-10.0;
            Buffer8[i]=4.0;
            break;
         case 0:
            Buffer4[i]=-10.0;
            Buffer8[i]=-10.0;
            break;   
         }
     
 
 
   
      i--;
     }
//----      TempBuffer[i]=
   return(0);
  }
//+------------------------------------------------------------------+

int HighBar(string symbol, int TFLow, int BarLow, int TFHigh)
{
   datetime BarTimeLow=iTime(symbol, TFLow, BarLow);
   int error=GetLastError();
   if(error==4066) return (-1);
   
   int res=iBarShift(symbol, TFHigh, BarTimeLow, false);
   error=GetLastError();
   if(error==4066) return (-1);
   
   return (res);
   
   }






Sample





Analysis



Market Information Used:

Series array that contains close prices for each bar


Indicator Curves created:

Implements a curve of type DRAW_ARROW


Indicators Used:

Moving average indicator


Custom Indicators Used:

Order Management characteristics:

Other Features: