//+---------------------------------------------------------------------+ //| MultiSlow-Stochx7Signal.mq5 | //| Copyright © 2014, Nikolay Kositsin | //| Khabarovsk, farria@mail.redcom.ru | //+---------------------------------------------------------------------+ //| Place the SmoothAlgorithms.mqh file | //| in the directory: terminal_data_folder\MQL5\Include | //+---------------------------------------------------------------------+ #property copyright "Copyright © 2014, Nikolay Kositsin" #property link "farria@mail.redcom.ru" #property description "" //--- indicator version #property version "1.60" //--- drawing the indicator in a separate window #property indicator_separate_window //--- fixed height of the indicator subwindow in pixels #property indicator_height 90 //--- lower and upper scale limit of a separate indicator window #property indicator_maximum +7.9 #property indicator_minimum +0.3 //+-----------------------------------+ //| Declaration of constants | //+-----------------------------------+ #define RESET 0 // A constant for returning the indicator recalculation command to the terminal #define INDTOTAL 7 // A constant for the number of displayed indicator #define INDICATOR_NAME "Slow-Stoch" // A constant for the indicator name //+-----------------------------------+ //--- number of indicator buffers #property indicator_buffers 28 // INDTOTAL*4 //--- total plots used #property indicator_plots 21 // INDTOTAL*3 //+-----------------------------------+ //| Indicator 1 drawing parameters | //+-----------------------------------+ //--- drawing indicator 1 as a line #property indicator_type1 DRAW_COLOR_LINE //--- the following colors are used for the indicator line #property indicator_color1 clrGray,clrDarkOrange,clrTeal //--- the indicator line is dashed #property indicator_style1 STYLE_SOLID //--- 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 clrLimeGreen //--- indicator line width is 5 #property indicator_width2 5 //--- displaying the indicator label //#property indicator_label2 "Up Slow-Stoch 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 clrIndianRed //--- indicator line width is 5 #property indicator_width3 5 //--- displaying the indicator label //#property indicator_label3 "Down Slow-Stoch 1" //+-----------------------------------+ //| Indicator 2 drawing parameters | //+-----------------------------------+ //--- drawing indicator 2 as a line #property indicator_type4 DRAW_COLOR_LINE //--- the following colors are used for the indicator line #property indicator_color4 clrGray,clrDarkOrange,clrTeal //--- the indicator line is dashed #property indicator_style4 STYLE_SOLID //--- 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 clrLimeGreen //--- indicator line width is 5 #property indicator_width5 5 //--- displaying the indicator label //#property indicator_label5 "Up Slow-Stoch 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 clrIndianRed //--- indicator line width is 5 #property indicator_width6 5 //--- displaying the indicator label //#property indicator_label6 "Down Slow-Stoch 2" //+-----------------------------------+ //| Indicator 3 drawing parameters | //+-----------------------------------+ //--- drawing indicator 3 as a line #property indicator_type7 DRAW_COLOR_LINE //--- the following colors are used for the indicator line #property indicator_color7 clrGray,clrDarkOrange,clrTeal //--- the indicator line is dashed #property indicator_style7 STYLE_SOLID //--- 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 clrLimeGreen //--- indicator line width is 5 #property indicator_width8 5 //--- displaying the indicator label //#property indicator_label8 "Up Slow-Stoch 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 clrIndianRed //--- indicator line width is 5 #property indicator_width9 5 //--- displaying the indicator label //#property indicator_label9 "Down Slow-Stoch 3" //+-----------------------------------+ //| Indicator 4 drawing parameters | //+-----------------------------------+ //--- drawing the indicator 4 as a line #property indicator_type10 DRAW_COLOR_LINE //--- the following colors are used for the indicator line #property indicator_color10 clrGray,clrDarkOrange,clrTeal //--- the indicator line is dashed #property indicator_style10 STYLE_SOLID //--- 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 clrLimeGreen //--- indicator line width is 5 #property indicator_width11 5 //--- displaying the indicator label //#property indicator_label11 "Up Slow-Stoch 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 clrIndianRed //--- indicator line width is 5 #property indicator_width12 5 //--- displaying the indicator label //#property indicator_label12 "Down Slow-Stoch 4" //+-----------------------------------+ //| Indicator 5 drawing parameters | //+-----------------------------------+ //--- drawing the indicator 5 as a line #property indicator_type13 DRAW_COLOR_LINE //--- the following colors are used for the indicator line #property indicator_color13 clrGray,clrDarkOrange,clrTeal //--- the indicator line is dashed #property indicator_style13 STYLE_SOLID //--- indicator line width is 3 #property indicator_width13 3 //--- displaying the indicator label //#property indicator_label13 "Signal line 5" //+-----------------------------------+ //| Indicator 5 drawing parameters | //+-----------------------------------+ //--- drawing the indicator 5 as a label #property indicator_type14 DRAW_ARROW //--- the color used as a label color #property indicator_color14 clrLimeGreen //--- indicator line width is 5 #property indicator_width14 5 //--- displaying the indicator label //#property indicator_label14 "Up Slow-Stoch 5" //+-----------------------------------+ //| Indicator 5 drawing parameters | //+-----------------------------------+ //--- drawing the indicator 5 as a label #property indicator_type15 DRAW_ARROW //--- the color used as a label color #property indicator_color15 clrIndianRed //--- indicator line width is 5 #property indicator_width15 5 //--- displaying the indicator label //#property indicator_label15 "Down Slow-Stoch 5" //+-----------------------------------+ //| Indicator 6 drawing parameters | //+-----------------------------------+ //--- Drawing indicator 6 as line #property indicator_type16 DRAW_COLOR_LINE //--- the following colors are used for the indicator line #property indicator_color16 clrGray,clrDarkOrange,clrTeal //--- the indicator line is dashed #property indicator_style16 STYLE_SOLID //--- indicator line width is 3 #property indicator_width16 3 //--- displaying the indicator label //#property indicator_label16 "Signal line 6" //+-----------------------------------+ //| Indicator 6 drawing parameters | //+-----------------------------------+ //--- drawing the indicator 6 as a label #property indicator_type17 DRAW_ARROW //--- the color used as a label color #property indicator_color17 clrLimeGreen //--- indicator line width is 5 #property indicator_width17 5 //--- displaying the indicator label //#property indicator_label17 "Up Slow-Stoch 6" //+-----------------------------------+ //| Indicator 6 drawing parameters | //+-----------------------------------+ //--- drawing the indicator 6 as a label #property indicator_type18 DRAW_ARROW //--- the color used as a label color #property indicator_color18 clrIndianRed //--- indicator line width is 5 #property indicator_width18 5 //--- displaying the indicator label //#property indicator_label18 "Down Slow-Stoch 6" //+-----------------------------------+ //| Indicator 7 drawing parameters | //+-----------------------------------+ //--- drawing the indicator 7 as a line #property indicator_type19 DRAW_COLOR_LINE //--- the following colors are used for the indicator line #property indicator_color19 clrGray,clrDarkOrange,clrTeal //--- the indicator line is dashed #property indicator_style19 STYLE_SOLID //--- indicator line width is 1 #property indicator_width19 1 //--- displaying the indicator label //#property indicator_label19 "Signal line 7" //+-----------------------------------+ //| Indicator 7 drawing parameters | //+-----------------------------------+ //--- drawing the indicator 7 as a label #property indicator_type20 DRAW_ARROW //--- the color used as a label color #property indicator_color20 clrLimeGreen //--- indicator line width is 2 #property indicator_width20 2 //--- displaying the indicator label //#property indicator_label20 "Up Slow-Stoch 7" //+-----------------------------------+ //| Indicator 7 drawing parameters | //+-----------------------------------+ //--- drawing the indicator 7 as a label #property indicator_type21 DRAW_ARROW //--- the color used as a label color #property indicator_color21 clrIndianRed //--- indicator line width is 2 #property indicator_width21 2 //--- displaying the indicator label //#property indicator_label21 "Down Slow-Stoch 7" //+-----------------------------------+ //| 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 }; //+-----------------------------------+ //| Indicator input parameters | //+-----------------------------------+ input ENUM_TIMEFRAMES TimeFrame0=PERIOD_D1; //1 Chart period input ENUM_TIMEFRAMES TimeFrame1=PERIOD_H12; //2 Chart period input ENUM_TIMEFRAMES TimeFrame2=PERIOD_H8; //3 Chart period input ENUM_TIMEFRAMES TimeFrame3=PERIOD_H6; //4 Chart period input ENUM_TIMEFRAMES TimeFrame4=PERIOD_H4; //5 Chart period input ENUM_TIMEFRAMES TimeFrame5=PERIOD_H2; //6 Chart period input ENUM_TIMEFRAMES TimeFrame6=PERIOD_M30; //7 Chart period //+-----------------------------------------+ //| Input parameters of Slow-Stoch: | //+-----------------------------------------+ input uint KPeriod=5; input uint DPeriod=3; input uint Slowing=3; input ENUM_MA_METHOD STO_Method=MODE_SMA; input ENUM_STO_PRICE Price_field=STO_LOWHIGH; input Smooth_Method XMA_Method=MODE_JJMA; // Method of averaging input uint XLength=5; // Type of smoothing input int XPhase=15; // Smoothing parameter //--- XPhase: for JJMA it varies within the range -100 ... +100 and influences the quality of the transient period; //--- XPhase: for VIDIA it is a CMO period, for AMA it is a slow average period //+-----------------------------------+ //--- declaration of integer variables of data starting point int min_rates_total; //+------------------------------------------------------------------+ //| Getting a timeframe 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 will be used as indicator buffers CIndBuffers Ind[INDTOTAL]; //+------------------------------------------------------------------+ //| Slow-Stoch indicator initialization function | //+------------------------------------------------------------------+ bool IndInit(uint Number) { //--- checking correctness of the chart periods 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 calculation loop of the indicator 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.0; Ind[Number].m_ColorLineBuffer[bar]=0; Time0=Time[bar]; //--- copy newly appeared data in the array if(CopyTime(Symbol(),Ind[Number].m_TimeFrame,Time0,1,Time_)<=0) return(RESET); //--- if(Time0>=Time_[0] && Time[bar+1]DnStoch[0]) { Ind[Number].m_UpBuffer[bar]=Number+1.0; Ind[Number].m_ColorLineBuffer[bar]=2; } if(UpStoch[0]rates_total || prev_calculated<=0)// checking for the first start of calculation of an indicator 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 //--- apply timeseries indexing to array elements ArraySetAsSeries(time,true); for(int count=0; count