//+------------------------------------------------------------------+ //| Custom Moving Average.mq4 | //| Copyright © 2004, MetaQuotes Software Corp. | //| http://www.metaquotes.net/ | //+------------------------------------------------------------------+ #property copyright "TraderSeven" #property link "TraderSeven@gmx.net" // Ron integrated the iFXAnalyser concept // and cxhanged the simpleMA code to a real MA // Mar 4, 2006 #property indicator_chart_window #property indicator_buffers 6 #property indicator_color1 Red #property indicator_color2 Orange #property indicator_color3 Black #property indicator_color4 Black #property indicator_color5 Black #property indicator_color6 White #property indicator_color7 White double _fba[1505]; double _Slow1[1505], _Fast1[1505]; double _Slow2[1505], _Fast2[1505]; // FireBird Externals and // Divergence controls extern int FB_Simple.1_HMA.2=2; extern int FB_Period=16; extern int FB_Price=1; extern double DVLimit=0.0007; extern double Percent=0.19; extern double FB_Shift=1; extern int DV_Simple.1_HMA.2=1; extern int Fast_Period=5; extern int Fast_Price = PRICE_OPEN; extern int Slow_Period=7; extern int Slow_Price = PRICE_OPEN; extern int BarCount=1500; // percent calculation results double UpperBand; double LowerBand; //indicator buffers double ExtMapBuffer1[]; double ExtMapBuffer2[]; double ExtMapBuffer3[]; double ExtMapBuffer4[]; double ExtMapBuffer5[]; double ExtMapBuffer6[]; double ExtMapBuffer7[]; int init() { // 233 up arrow // 234 down arrow // 159 big dot // 158 little dot // 168 open square // 120 box with X ArraySetAsSeries(_fba,true); ArraySetAsSeries(_Slow1,true); ArraySetAsSeries(_Fast1,true); ArraySetAsSeries(_Slow2,true); ArraySetAsSeries(_Fast2,true); UpperBand=(1+Percent/100); LowerBand=1-Percent/100; //---- drawing settings SetIndexStyle (0,DRAW_LINE); SetIndexBuffer(0,ExtMapBuffer1); SetIndexStyle (1,DRAW_LINE); SetIndexBuffer(1,ExtMapBuffer2); SetIndexBuffer(2,ExtMapBuffer3); SetIndexBuffer(3,ExtMapBuffer4); SetIndexBuffer(4,ExtMapBuffer5); SetIndexBuffer(5,ExtMapBuffer6); SetIndexStyle (5,DRAW_ARROW); SetIndexArrow (5,168); SetIndexBuffer(6,ExtMapBuffer7); SetIndexStyle (6,DRAW_ARROW); SetIndexArrow (6,159); int i; //remove the old objects for(i=0; i<=BarCount; i++) { ObjectDelete("myx"+DoubleToStr(i,0)); } } int deinit() { int i; //remove the old objects for(i=0; i<=BarCount; i++) { ObjectDelete("myx"+DoubleToStr(i,0)); } } int start() { int pos; double myMA; double MAfull, MAhalf; double myDynamic=Close[0]; double maF1, maF2, maS1, maS2; // HMA variables int fullPeriod; int halfPeriod; int sqrtPeriod; // HMA or not if(FB_Simple.1_HMA.2==2) { // FireBird array fullPeriod = FB_Period; halfPeriod = FB_Period/2; for(pos=BarCount; pos>=0; pos--) { MAfull=iMA(Symbol(),0,fullPeriod,0,MODE_LWMA,FB_Price,pos); MAhalf=iMA(Symbol(),0,halfPeriod,0,MODE_LWMA,FB_Price,pos); _fba[pos]=(2*MAhalf)-MAfull; } } if(DV_Simple.1_HMA.2==2) { // Divergence Step 1 fullPeriod = Fast_Period; halfPeriod = Fast_Period/2; for(pos=BarCount; pos>=0; pos--) { MAfull=iMA(Symbol(),0,fullPeriod,0,MODE_LWMA,Fast_Price,pos); MAhalf=iMA(Symbol(),0,halfPeriod,0,MODE_LWMA,Fast_Price,pos); _Fast1[pos]=(2*MAhalf)-MAfull; } fullPeriod = Slow_Period; halfPeriod = Slow_Period/2; for(pos=BarCount; pos>=0; pos--) { MAfull=iMA(Symbol(),0,fullPeriod,0,MODE_LWMA,Slow_Price,pos); MAhalf=iMA(Symbol(),0,halfPeriod,0,MODE_LWMA,Slow_Price,pos); _Slow1[pos]=(2*MAhalf)-MAfull; } // Divergence Step 2 fullPeriod = Fast_Period; halfPeriod = Fast_Period/2; for(pos=BarCount; pos>=0; pos--) { MAfull=iMA(Symbol(),0,fullPeriod,0,MODE_LWMA,Fast_Price,pos+1); MAhalf=iMA(Symbol(),0,halfPeriod,0,MODE_LWMA,Fast_Price,pos+1); _Fast2[pos]=(2*MAhalf)-MAfull; } fullPeriod = Slow_Period; halfPeriod = Slow_Period/2; for(pos=BarCount; pos>=0; pos--) { MAfull=iMA(Symbol(),0,fullPeriod,0,MODE_LWMA,Slow_Price,pos+1); MAhalf=iMA(Symbol(),0,halfPeriod,0,MODE_LWMA,Slow_Price,pos+1); _Slow2[pos]=(2*MAhalf)-MAfull; } } for(pos=BarCount; pos>=0; pos--) { // create Firebird channel (Simple or HMA) if(FB_Simple.1_HMA.2==1) { myMA=iMA(Symbol(),0,FB_Period,0,0,FB_Price,pos+FB_Shift); } if(FB_Simple.1_HMA.2==2) { sqrtPeriod = MathFloor(MathSqrt(FB_Period*1.00)); myMA=iMAOnArray(_fba,0,sqrtPeriod,0,MODE_LWMA,pos); } ExtMapBuffer1[pos]=myMA*UpperBand; ExtMapBuffer2[pos]=myMA*LowerBand; // Create Divergence arrays and difference line // calculate 1st mode if(DV_Simple.1_HMA.2==1) { maF1=iMA(Symbol(),0,Fast_Period,0,MODE_SMA,Fast_Price,pos); maS1=iMA(Symbol(),0,Slow_Period,0,MODE_SMA,Slow_Price,pos); ExtMapBuffer3[pos]=(maF1-maS1)+myDynamic; } if(DV_Simple.1_HMA.2==2) { sqrtPeriod = MathFloor(MathSqrt(Fast_Period*1.00)); maF1=iMAOnArray(_Fast1,0,sqrtPeriod,0,MODE_LWMA,pos); sqrtPeriod = MathFloor(MathSqrt(Slow_Period*1.00)); maS1=iMAOnArray(_Slow1,0,sqrtPeriod,0,MODE_LWMA,pos); ExtMapBuffer3[pos]=(maF1-maS1)+myDynamic; } //Shaun's Slope counted in the 2-nd buffer if(DV_Simple.1_HMA.2==1) { maF2=iMA(Symbol(),0,Fast_Period,0,MODE_SMA,Fast_Price,pos+1); maS2=iMA(Symbol(),0,Slow_Period,0,MODE_SMA,Slow_Price,pos+1); ExtMapBuffer4[pos]=((maF1-maS1)-(maF2-maS2))+myDynamic; } if(DV_Simple.1_HMA.2==2) { sqrtPeriod = MathFloor(MathSqrt(Fast_Period*1.00)); maF1=iMAOnArray(_Fast2,0,sqrtPeriod,0,MODE_LWMA,pos); sqrtPeriod = MathFloor(MathSqrt(Slow_Period*1.00)); maS1=iMAOnArray(_Slow2,0,sqrtPeriod,0,MODE_LWMA,pos); ExtMapBuffer4[pos]=((maF1-maS1)-(maF2-maS2))+myDynamic; } // dynamic around Close(0) ExtMapBuffer5[pos]=(ExtMapBuffer3[pos]-ExtMapBuffer4[pos])+myDynamic; if( ExtMapBuffer5[pos] >= myDynamic+DVLimit )ExtMapBuffer6[pos]=ExtMapBuffer1[pos]; if( ExtMapBuffer5[pos] <= myDynamic-DVLimit )ExtMapBuffer6[pos]=ExtMapBuffer2[pos]; } //for } //start
Sample
image not available
Analysis
Market Information Used:
Series array that contains close prices for each bar
Indicator Curves created:
Indicators Used:
Moving average indicator
Custom Indicators Used:
Order Management characteristics:
Other Features: