FF Tunnel Chart





//+------------------------------------------------------------------+
//|                                                    FF Tunnel.mq4 |
//|                                                         FFwithFX |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "Financial Freedom with Forex"
#property link      ""

#property indicator_chart_window
#property indicator_buffers 8
#property indicator_color1 Magenta
#property indicator_color2 Red
#property indicator_color3 Silver
#property indicator_color4 Silver
#property indicator_color5 Silver
#property indicator_color6 Silver
#property indicator_color7 Blue  
#property indicator_color8 Silver
//---- input parameters
extern bool      AudioAlerts=true;
extern bool      VisualAlerts=true;
extern int       RiskModel=1;

//---- buffers
double ExtMapBuffer1[]; // 55 SMA Median
double ExtMapBuffer2[]; // 8 SMA Close
double ExtMapBuffer3[]; // 1st FibLine up
double ExtMapBuffer4[]; // 2nd FibLine up
double ExtMapBuffer5[]; // 1st FibLine down
double ExtMapBuffer6[]; // 2nd FibLine down
double ExtMapBuffer7[]; // Turning Line
double ExtMapBuffer8[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,2);
   SetIndexBuffer(0,ExtMapBuffer1);
   SetIndexLabel(0,"55 SMA");
   SetIndexStyle(1,DRAW_LINE);
   SetIndexBuffer(1,ExtMapBuffer2);
   SetIndexLabel(1,"8 SMA");   
   SetIndexStyle(2,DRAW_LINE);
   SetIndexBuffer(2,ExtMapBuffer3);
   SetIndexStyle(3,DRAW_LINE);
   SetIndexBuffer(3,ExtMapBuffer4);
   SetIndexStyle(4,DRAW_LINE);
   SetIndexBuffer(4,ExtMapBuffer5);
   SetIndexStyle(5,DRAW_LINE);
   SetIndexBuffer(5,ExtMapBuffer6);
   SetIndexStyle(6,DRAW_LINE,STYLE_DOT,1,Green);
   SetIndexBuffer(6,ExtMapBuffer7);
   SetIndexLabel(6,"Slope Change");
   SetIndexStyle(7,DRAW_LINE);
   SetIndexBuffer(7,ExtMapBuffer8);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//---- 
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int limit;
   int    counted_bars=IndicatorCounted();
   
   double curr_EMA21;
   double curr_SMA5;
   double prev_EMA21;
   double prev_SMA5;
   double WDiff;
   string Direction;
   string Filter;
  //---- check for possible errors
   if(counted_bars<0) return(-1);
  //---- last counted bar will be recounted
   if(counted_bars>0) counted_bars--;
   limit=Bars-counted_bars;
  //---- main loop
     for(int i=0; i<limit; i++)
       {
        //---- ma_shift set to 0 because SetIndexShift called abowe
         ExtMapBuffer1[i]=iMA(NULL,0,55,0,MODE_SMA,PRICE_MEDIAN,i);
         ExtMapBuffer2[i]=iMA(NULL,0,8,0,MODE_SMA,PRICE_CLOSE,i);
         ExtMapBuffer7[i]=Close[i+8];
         Filter = "OK to Trade";
         

         //Model #1 89,144,233
         if(RiskModel==1)
         {
            ExtMapBuffer3[i]=ExtMapBuffer1[i]+89*Point;  
            ExtMapBuffer4[i]=ExtMapBuffer1[i]+144*Point;
            
            ExtMapBuffer5[i]=ExtMapBuffer1[i]-89*Point;
            ExtMapBuffer6[i]=ExtMapBuffer1[i]-144*Point;
         }
         
          //Model #2 144,233,377
         if(RiskModel==2)
         {
            ExtMapBuffer3[i]=ExtMapBuffer1[i]+144*Point;
            ExtMapBuffer4[i]=ExtMapBuffer1[i]+233*Point;
            
            ExtMapBuffer5[i]=ExtMapBuffer1[i]-144*Point;
            ExtMapBuffer6[i]=ExtMapBuffer1[i]-233*Point;
         }
         
          //Model #3 233,377,610
         if(RiskModel==3)
         {
            ExtMapBuffer3[i]=ExtMapBuffer1[i]+233*Point;
            ExtMapBuffer4[i]=ExtMapBuffer1[i]+377*Point;
            
            ExtMapBuffer5[i]=ExtMapBuffer1[i]-233*Point;
            ExtMapBuffer6[i]=ExtMapBuffer1[i]-377*Point;
         }         
       }
//---- Calculate the different weekly data
         curr_EMA21=iMA(NULL,PERIOD_W1,21,0,MODE_EMA,PRICE_MEDIAN,0);
         curr_SMA5=iMA(NULL,PERIOD_W1,5,0,MODE_SMA,PRICE_MEDIAN,0);
         prev_EMA21=iMA(NULL,PERIOD_W1,21,0,MODE_EMA,PRICE_MEDIAN,1);
         prev_SMA5=iMA(NULL,PERIOD_W1,5,0,MODE_SMA,PRICE_MEDIAN,1);
         WDiff=((curr_SMA5-curr_EMA21) - (prev_SMA5-prev_EMA21));
         if (WDiff > 0.0) Direction = "^^ UP ^^";
         if (WDiff < 0.0) Direction = "vv DOWN vv";          
//       } 

// Check for FILTER conditions
         if (MathAbs(ExtMapBuffer1[0]-ExtMapBuffer2[0]) < 50*Point) {
         Filter = StringConcatenate("WARNING: Only trade if Price > ",MathMin(ExtMapBuffer1[0],ExtMapBuffer2[0])+50*Point,
         " or < ",MathMax(ExtMapBuffer1[0],ExtMapBuffer2[0])-50*Point);
         }         
         
           
         Comment("4Hr Tunnel Weekly Direction : ",Direction,"\n",Filter,
         "\nRISK MODEL #",RiskModel," (0-3)\nSlope Change : ",ExtMapBuffer7[0],
         "\n","\nMA+2 : ",ExtMapBuffer4[0],"\nMA+1 : ",ExtMapBuffer3[0],
         "\nSMA55 : ",ExtMapBuffer1[0],
         "\nMA-1 : ",ExtMapBuffer5[0],"\nMA-2 : ",ExtMapBuffer6[0]);
//       }
       
       //+--------------------------------------------------------------------------+
       //-                          ALERTS    PlaySound("alert.wav");               -
       //+--------------------------------------------------------------------------+
//      if(AudioAlerts)
//      {
//         if(Close[i]>ExtMapBuffer7[0] || Close[i]<ExtMapBuffer7[0])
//         {
//            PlaySound("alert.wav");
//         }
//      }
//
      if(VisualAlerts)
      {
         if(Close[0]==ExtMapBuffer7[0] || Close[0]==ExtMapBuffer7[0])
         {
           Alert(Symbol()," ", Period(), "min Slope Change - ",Close[0],
            "\n Time: ", TimeToStr(CurTime(),TIME_DATE|TIME_SECONDS),"\n",Filter);
         }
      }
         
  //---- done

//---- 
   
//----
   return(0);
  }
//+------------------------------------------------------------------+



Sample





Analysis



Market Information Used:

Series array that contains close prices for each bar


Indicator Curves created:

Implements a curve of type DRAW_LINE


Indicators Used:

Moving average indicator


Custom Indicators Used:

Order Management characteristics:

Other Features:

It issuies visual alerts to the screen