//+------------------------------------------------------------------+ //| MultiX2MASignal.mq5 | //| Copyright © 2012, Nikolay Kositsin | //| Khabarovsk, farria@mail.redcom.ru | //+------------------------------------------------------------------+ //| The indicator requires SmoothAlgorithms.mqh, it mus be placed | //| to the directory: MetaTrader\\MQL5\Include | //| X2MA.mq5 must be placed to: MetaTrader\\MQL5\Indicators | //+------------------------------------------------------------------+ #property copyright "Copyright © 2012, Nikolay Kositsin" #property link "farria@mail.redcom.ru" #property description "" //--- indicator version number #property version "1.00" //--- drawing indicator in a separate window #property indicator_separate_window //--- fixed height of the indicator subwindow in pixels #property indicator_height 50 //--- lower and upper scale limit of a separate indicator window #property indicator_maximum +4.9 #property indicator_minimum +0.4 //+-----------------------------------+ //| declaration of constants | //+-----------------------------------+ #define RESET 0 // The constant for returning the indicator recalculation command to the terminal #define INDTOTAL 4 // The constant for the number of displayed indicators //+-----------------------------------+ //--- number of indicator buffers #property indicator_buffers 16 // INDTOTAL*4 //--- total plots used #property indicator_plots 12 // INDTOTAL*3 //+-----------------------------------+ //| Indicator 1 drawing parameters | //+-----------------------------------+ //--- drawing indicator 1 as a line #property indicator_type1 DRAW_COLOR_LINE //--- the following colors are used as the indicator line color #property indicator_color1 clrGray,clrMagenta,clrLime //--- the indicator line is dashed #property indicator_style1 STYLE_SOLID //--- the indicator line width is 3 #property indicator_width1 3 //--- displaying the indicator label #property indicator_label1 "Signal line 1" //+-----------------------------------+ //| Indicator 1 drawing parameters | //+-----------------------------------+ //--- drawing the indicator 1 as a label #property indicator_type2 DRAW_ARROW //--- the color used as a label color #property indicator_color2 clrTeal //--- the indicator line width is 5 #property indicator_width2 5 //--- displaying the indicator label #property indicator_label2 "Up X2MA 1" //+-----------------------------------+ //| Indicator 1 drawing parameters | //+-----------------------------------+ //--- drawing the indicator 1 as a label #property indicator_type3 DRAW_ARROW //--- the color used as a label color #property indicator_color3 clrRed //--- the indicator line width is 5 #property indicator_width3 5 //--- displaying the indicator label #property indicator_label3 "Down X2MA 1" //+-----------------------------------+ //| Indicator 2 drawing parameters | //+-----------------------------------+ //--- drawing the indicator 2 as a line #property indicator_type4 DRAW_COLOR_LINE //--- the following colors are used as the indicator line color #property indicator_color4 clrGray,clrMagenta,clrLime //--- the indicator line is dashed #property indicator_style4 STYLE_SOLID //--- the indicator line width is 3 #property indicator_width4 3 //--- displaying the indicator label #property indicator_label4 "Signal line 2" //+-----------------------------------+ //| Indicator 2 drawing parameters | //+-----------------------------------+ //--- drawing the indicator 2 as a label #property indicator_type5 DRAW_ARROW //--- the color used as a label color #property indicator_color5 clrTeal //--- the indicator line width is 5 #property indicator_width5 5 //--- displaying the indicator label #property indicator_label5 "Up X2MA 2" //+-----------------------------------+ //| Indicator 2 drawing parameters | //+-----------------------------------+ //--- drawing the indicator 2 as a label #property indicator_type6 DRAW_ARROW //--- the color used as a label color #property indicator_color6 clrRed //--- the indicator line width is 5 #property indicator_width6 5 //--- displaying the indicator label #property indicator_label6 "Down X2MA 2" //+-----------------------------------+ //| Indicator 3 drawing parameters | //+-----------------------------------+ //--- drawing the indicator 3 as a line #property indicator_type7 DRAW_COLOR_LINE //--- the following colors are used as the indicator line color #property indicator_color7 clrGray,clrMagenta,clrLime //--- the indicator line is dashed #property indicator_style7 STYLE_SOLID //--- the indicator line width is 3 #property indicator_width7 3 //--- displaying the indicator label #property indicator_label7 "Signal line 3" //+-----------------------------------+ //| Indicator 3 drawing parameters | //+-----------------------------------+ //--- drawing the indicator 3 as a label #property indicator_type8 DRAW_ARROW //--- the color used as a label color #property indicator_color8 clrTeal //--- the indicator line width is 5 #property indicator_width8 5 //--- displaying the indicator label #property indicator_label8 "Up X2MA 3" //+-----------------------------------+ //| Indicator 3 drawing parameters | //+-----------------------------------+ //--- drawing the indicator 3 as a label #property indicator_type9 DRAW_ARROW //--- the color used as a label color #property indicator_color9 clrRed //--- the indicator line width is 5 #property indicator_width9 5 //--- displaying the indicator label #property indicator_label9 "Down X2MA 3" //+-----------------------------------+ //| Indicator 4 drawing parameters | //+-----------------------------------+ //--- drawing the indicator 4 as a line #property indicator_type10 DRAW_COLOR_LINE //--- the following colors are used as the indicator line color #property indicator_color10 clrGray,clrMagenta,clrLime //--- the indicator line is dashed #property indicator_style10 STYLE_SOLID //--- the indicator line width is 3 #property indicator_width10 3 //--- displaying the indicator label #property indicator_label10 "Signal line 4" //+-----------------------------------+ //| Indicator 4 drawing parameters | //+-----------------------------------+ //--- drawing the indicator 4 as a label #property indicator_type11 DRAW_ARROW //--- the color used as a label color #property indicator_color11 clrTeal //--- the indicator line width is 5 #property indicator_width11 5 //--- displaying the indicator label #property indicator_label11 "Up X2MA 4" //+-----------------------------------+ //| Indicator 4 drawing parameters | //+-----------------------------------+ //--- drawing the indicator 4 as a label #property indicator_type12 DRAW_ARROW //--- the color used as a label color #property indicator_color12 clrRed //--- the indicator line width is 5 #property indicator_width12 5 //--- displaying the indicator label #property indicator_label12 "Down X2MA 4" //+-----------------------------------+ //| declaration of enumerations | //+-----------------------------------+ enum Smooth_Method { MODE_SMA_, //SMA MODE_EMA_, //EMA MODE_SMMA_, //SMMA MODE_LWMA_, //LWMA MODE_JJMA, //JJMA MODE_JurX, //JurX MODE_ParMA, //ParMA MODE_T3, //T3 MODE_VIDYA, //VIDYA MODE_AMA, //AMA }; //+-----------------------------------+ //| declaration of enumerations | //+-----------------------------------+ enum Applied_price_ //Type of constant { PRICE_CLOSE_ = 1, //Close PRICE_OPEN_, //Open PRICE_HIGH_, //High PRICE_LOW_, //Low PRICE_MEDIAN_, //Median Price (HL/2) PRICE_TYPICAL_, //Typical Price (HLC/3) PRICE_WEIGHTED_, //Weighted Close (HLCC/4) PRICE_SIMPL_, //Simpl Price (OC/2) PRICE_QUARTER_, //Quarted Price (HLOC/4) PRICE_TRENDFOLLOW0_, //TrendFollow_1 Price PRICE_TRENDFOLLOW1_ //TrendFollow_2 Price }; //+-----------------------------------+ //| Indicator input parameters | //+-----------------------------------+ input ENUM_TIMEFRAMES TimeFrame0=PERIOD_H12; //1 Chart period input ENUM_TIMEFRAMES TimeFrame1=PERIOD_H6; //2 Chart period input ENUM_TIMEFRAMES TimeFrame2=PERIOD_H3; //3 Chart period input ENUM_TIMEFRAMES TimeFrame3=PERIOD_H1; //4 Chart period //--- input Smooth_Method MA_Method1=MODE_SMA; // First smoothing averaging method input int Length1=5; // First smoothing depth input int Phase1=100; // First smoothing parameter //--- Phase1: for JJMA, it varies within the range -100 ... +100 and influences the quality of the transient process; //--- Phase1: for VIDIA, it is a CMO period, for AMA, it is a slow moving average period input Smooth_Method MA_Method2=MODE_JJMA; // Second smoothing averaging method input int Length2=3; // Second smoothing depth input int Phase2=100; // Second smoothing parameter //--- Phase2: for JJMA, it varies within the range -100 ... +100 and influences the quality of the transient process; //--- Phase2: for VIDIA, it is a CMO period, for AMA, it is a slow moving average period input Applied_price_ IPC=PRICE_CLOSE; // Price constant //+-----------------------------------+ //--- declaration of a variable for storing the indicator initialization result bool Init; //--- declaration of integer variables of data starting point int min_rates_total; //+------------------------------------------------------------------+ //| Getting time frame as string | //+------------------------------------------------------------------+ string GetStringTimeframe(ENUM_TIMEFRAMES timeframe) { //--- return(StringSubstr(EnumToString(timeframe),7,-1)); //--- } //+------------------------------------------------------------------+ //| Indicator buffer class | //+------------------------------------------------------------------+ class CIndBuffers { //--- public: double m_UpBuffer[]; double m_DnBuffer[]; double m_LineBuffer[]; double m_ColorLineBuffer[]; int m_Handle; ENUM_TIMEFRAMES m_TimeFrame; //--- }; //--- declaration of dynamic arrays that further will be used as indicator buffers CIndBuffers Ind[INDTOTAL]; //+------------------------------------------------------------------+ //| X2MA indicator initialization function | //+------------------------------------------------------------------+ bool IndInit(uint Number, Smooth_Method XMAMethod1, uint XLength1, int XPhase1, Smooth_Method XMAMethod2, uint XLength2, int XPhase2, Applied_price_ XIPC) { //--- checking the chart periods for correctness if(Ind[Number].m_TimeFrameRates_Total || Prev_Calculated<=0)// checking for the first start of the indicator calculation { LastCountBar[Number]=Rates_Total; limit_=Limit; } else limit_=int(LastCountBar[Number])+Limit; // starting index for the calculation of new bars //--- main indicator calculation loop for(int bar=int(limit_); bar>=0 && !IsStopped(); bar--) { //--- zero out the contents of the indicator buffers for the calculation Ind[Number].m_UpBuffer[bar]=EMPTY_VALUE; Ind[Number].m_DnBuffer[bar]=EMPTY_VALUE; Ind[Number].m_LineBuffer[bar]=Number+1; Ind[Number].m_ColorLineBuffer[bar]=0; Time0=Time[bar]; //--- copy the new data into the array if(CopyTime(Symbol(),Ind[Number].m_TimeFrame,Time0,1,Time_)<=0) return(RESET); if(Time0>=Time_[0] && Time[bar+1]X2MA[0]) { Ind[Number].m_UpBuffer[bar]=Number+1; Ind[Number].m_ColorLineBuffer[bar]=2; } if(X2MA[1]rates_total || prev_calculated<=0)// checking for the first start of the indicator calculation { limit=rates_total-min_rates_total-1; // starting index for the calculation of all bars } else limit=rates_total-prev_calculated; // starting index for the calculation of new bars //--- indexing array elements as time series ArraySetAsSeries(time,true); //--- for(int count=0; count