//+------------------------------------------------------------------+ //| Multi_Oscillator_v1.mq4 | //+------------------------------------------------------------------+ #property copyright "By cja for tsd forum" #property link "http://cjatradingtools.com/" #property indicator_separate_window #property indicator_buffers 8 #property indicator_color1 LimeGreen #property indicator_color3 Red #property indicator_color4 Gold #property indicator_color5 Red #property indicator_color6 Red #property indicator_color7 Red #property indicator_color8 Gold #property indicator_width1 1 #property indicator_width3 2 #property indicator_width4 2 #property indicator_width5 1 #property indicator_width6 1 #property indicator_width7 2 #property indicator_width8 2 #property indicator_style1 0 #property indicator_style3 0 #property indicator_style4 0 #property indicator_style5 2 #property indicator_style6 2 #property indicator_style7 0 #property indicator_style8 0 //---- input parameters extern string __________________LABEL_1 =" MA METHOD Settings"; extern string MODE_SMA. ="0 = Simple moving average"; extern string MODE_EMA. ="1 = Exponential moving average"; extern string MODE_SMMA. ="2 = Smoothed moving average"; extern string MODE_LWMA. ="3 = Linear weighted moving average"; extern string __________________LABEL_2 =" MA PRICE Settings"; extern string PRICE_CLOSE. ="0 = Close price"; extern string PRICE_OPEN. ="1 = Open price"; extern string PRICE_HIGH. ="2 = High price"; extern string PRICE_LOW. ="3 = Low price"; extern string PRICE_MEDIAN. ="4 = Median price, (high+low)/2"; extern string PRICE_TYPICAL. ="5 = Typical price, (high+low+close)/3"; extern string PRICE_WEIGHTED. ="6 = Weighted price, (hi+low+cl+cl)/4"; extern string ___________________________="______________________________"; extern string __________________LABEL_3 = " Base PERIOD + PRICE"; extern int Multi_Period = 13; extern int Multi_Price = 0; extern string __________________LABEL_4 = "Select ONLY 1 Indicator"; extern bool RSI = false; extern bool CCI = false; extern bool MFI = false; extern bool STO = false; extern bool DEM = true; extern bool WPR = false; extern bool RVI = false; extern string __________________LABEL_5 = "2 x MA Smoothing Applied"; extern string __________________MA1 =""; extern int MAPeriod1 = 28; extern int MAMethod1 = 0; extern string __________________MA2 =""; extern int MAPeriod2 = 18; extern int MAMethod2 = 0; extern string __________________LABEL_6 = "SHOW or HIDE Lines"; extern bool Show_Histo_Display = false; extern bool Show_Base_Indicator = true; extern bool Show_MA1_Line = true; extern bool Show_MA2_Line = true; extern string __________________LABEL_7 = "Level Color + Style"; extern color Level_color = DarkSlateGray; extern int Level_Style = 2; //---- indicator buffers double MULTIBuffer[]; double MABuffer1[]; double MABuffer2[]; double BarBuffer[]; double UPBuffer[]; double DNBuffer[]; double RVIBuffer[]; double STOBuffer[]; string indicator; double bar,bar2,bar3; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { // Main source Indicator Buffer SetIndexDrawBegin(0,Multi_Period); SetIndexBuffer(0,MULTIBuffer); if(Show_Histo_Display==true){SetIndexStyle(0,DRAW_NONE);} else if(Show_Base_Indicator==true){SetIndexStyle(0,DRAW_LINE);} else{SetIndexStyle(0,DRAW_NONE);} // Histo Buffers SetIndexBuffer(1,BarBuffer); SetIndexStyle(1,DRAW_NONE); SetIndexBuffer(2,UPBuffer); SetIndexStyle(2,DRAW_HISTOGRAM); SetIndexBuffer(3,DNBuffer); SetIndexStyle(3,DRAW_HISTOGRAM); // 2nd Lines for STO & RVI SetIndexDrawBegin(4,Multi_Period); SetIndexBuffer(4,RVIBuffer); if(Show_Histo_Display==true||Show_Base_Indicator==false){SetIndexStyle(4,DRAW_NONE);} else if(RVI==true){SetIndexStyle(4,DRAW_LINE);} else{SetIndexStyle(4,DRAW_NONE);} SetIndexDrawBegin(5,Multi_Period); SetIndexBuffer(5,STOBuffer); if(Show_Histo_Display==true||Show_Base_Indicator==false){SetIndexStyle(5,DRAW_NONE);} else if(STO==true){SetIndexStyle(5,DRAW_LINE);} else{SetIndexStyle(5,DRAW_NONE);} // MA Line Buffers SetIndexDrawBegin(6,MAPeriod1); SetIndexBuffer(6,MABuffer1); if(Show_Histo_Display==true){SetIndexStyle(6,DRAW_HISTOGRAM);} else if(Show_MA1_Line==true){SetIndexStyle(6,DRAW_LINE);} else{SetIndexStyle(6,DRAW_NONE);} SetIndexDrawBegin(7,MAPeriod2); SetIndexBuffer(7,MABuffer2); if(Show_Histo_Display==true){SetIndexStyle(7,DRAW_HISTOGRAM);} else if(Show_MA2_Line==true){SetIndexStyle(7,DRAW_LINE);} else{SetIndexStyle(7,DRAW_NONE);} IndicatorDigits(1); // Indicator Label code if(RSI==true)indicator="RSI"; if(CCI==true)indicator="CCI"; if(MFI==true)indicator="MFI"; if(STO==true)indicator="STOCH"; if(DEM==true)indicator="DEM"; if(WPR==true)indicator="WPR"; if(RVI==true)indicator="RVI"; SetIndexLabel(0,"Multi "+indicator+""); SetIndexLabel(1,"MA1 "+MAPeriod1+""); SetIndexLabel(2,"MA2 "+MAPeriod2+""); IndicatorShortName("Multi_Oscillator v1 "+indicator+" "+Multi_Period+" ( MA1 "+MAPeriod1+" ) ( MA2 "+MAPeriod2+" )"); //---- initialization done return(0); } //+------------------------------------------------------------------+ //| Multi Oscillator | //+------------------------------------------------------------------+ int start() { int counted_bars=IndicatorCounted(); int limit = Bars-counted_bars-1; for(int i=limit; i>=0; i--) { // Source Base Indicators if(RSI==true){MULTIBuffer[i]=iRSI(NULL,0,Multi_Period,Multi_Price,i);} if(CCI==true){MULTIBuffer[i]=iCCI(NULL,0,Multi_Period,Multi_Price,i);} if(MFI==true){MULTIBuffer[i]=iMFI(NULL,0,Multi_Period,i);} if(STO==true){MULTIBuffer[i]=iStochastic(NULL,0,Multi_Period,Multi_Period/2,Multi_Period/2,0,Multi_Price,MODE_SIGNAL,i);} if(STO==true){STOBuffer[i]=iStochastic(NULL,0,Multi_Period,Multi_Period/2,Multi_Period/2,0,Multi_Price,MODE_MAIN,i);} if(DEM==true){MULTIBuffer[i]=iDeMarker(NULL,0,Multi_Period,i);} if(WPR==true){MULTIBuffer[i]=iWPR(NULL,0,Multi_Period,i);} if(RVI==true){MULTIBuffer[i]=iRVI(NULL,0,Multi_Period,MODE_SIGNAL,i);} if(RVI==true){RVIBuffer[i]=iRVI(NULL,0,Multi_Period,MODE_MAIN,i);} // Indicator line levels if(Show_Histo_Display==false){ if(CCI==true){SetLevelValue(0,0);SetLevelValue(1,100);SetLevelValue(2,-100);SetLevelValue(3,-250);SetLevelValue(4,250);} if(RSI==true||MFI==true){SetLevelValue(0,50);SetLevelValue(1,70);SetLevelValue(2,30);} if(STO==true){SetLevelValue(0,50);SetLevelValue(1,80);SetLevelValue(2,20);} if(WPR==true){SetLevelValue(0,-50);SetLevelValue(1,-80);SetLevelValue(2,-20);} if(RVI==true){SetLevelValue(0,0);} SetLevelStyle(Level_Style,0,Level_color);} else{SetLevelValue(0,0);SetLevelValue(1,0);SetLevelValue(2,0);SetLevelValue(3,0);SetLevelValue(4,0);SetLevelStyle(Level_Style,0,Level_color);} } // MA Buffers for Lines for (i=limit-1;i>=0;i--) { if(Show_Histo_Display==false){ MABuffer1[i]=iMAOnArray(MULTIBuffer,0,MAPeriod1,0,MAMethod1,i); MABuffer2[i]=iMAOnArray(MULTIBuffer,0,MAPeriod2,0,MAMethod2,i); } // MA Buffers for Histograms if(Show_Histo_Display==true){ BarBuffer[i]=(iMAOnArray(MULTIBuffer,0,MAPeriod2,0,MAMethod2,i)-iMAOnArray(MULTIBuffer,0,MAPeriod1,0,MAMethod1,i))*10; UPBuffer[i]=iMAOnArray(MULTIBuffer,0,MAPeriod1,0,MAMethod1,i); DNBuffer[i]=iMAOnArray(MULTIBuffer,0,MAPeriod2,0,MAMethod2,i); bar =BarBuffer[i]; bar2=UPBuffer[i]; bar3=DNBuffer[i]; if(bar2 > bar3) { UPBuffer[i] = bar; DNBuffer[i] = EMPTY_VALUE; } if(bar2 < bar3) { UPBuffer[i] = EMPTY_VALUE; DNBuffer[i] = bar; } } } //---- done return(0); } //+------------------------------------------------------------------+
Sample
Analysis
Market Information Used:
Indicator Curves created:
Implements a curve of type DRAW_NONE
Implements a curve of type DRAW_LINE
Implements a curve of type DRAW_HISTOGRAM
Indicators Used:
Relative strength index
Commodity channel index
Money flow index
Stochastic oscillator
DeMarker indicator
Larry William percent range indicator
Relative Vigor index
Moving average indicator
Custom Indicators Used:
Order Management characteristics:
Other Features: