//+------------------------------------------------------------------+ //| X2MA_KLx3_Cloud.mq5 | //| Copyright © 2011, Nikolay Kositsin | //| Khabarovsk, farria@mail.redcom.ru | //+------------------------------------------------------------------+ //| Place the SmoothAlgorithms.mqh file | //| in the directory: MetaTrader\MQL5\Include | //+------------------------------------------------------------------+ #property copyright "Copyright © 2011, Nikolay Kositsin" #property link "farria@mail.redcom.ru" #property description "X2MA Keltner Channel" //---- indicator version #property version "1.00" //---- drawing the indicator in the main window #property indicator_chart_window //---- number of indicator buffers 11 #property indicator_buffers 11 //---- 7 graphical plots are used in total #property indicator_plots 7 //+-----------------------------------+ //| Indicator drawing parameters | //+-----------------------------------+ //---- drawing the indicator as a line #property indicator_type1 DRAW_LINE //---- use BlueViolet color for the indicator line #property indicator_color1 BlueViolet //---- the indicator line is a dash-dotted curve #property indicator_style1 STYLE_DASHDOTDOT //---- indicator line width is equal to 1 #property indicator_width1 1 //---- displaying the indicator label #property indicator_label1 "X2MA" //+--------------------------------------------+ //| Levels indicator drawing parameters | //+--------------------------------------------+ //---- drawing Keltner Channels as lines #property indicator_type2 DRAW_LINE #property indicator_type3 DRAW_LINE //---- selection of Keltner Channels colors #property indicator_color2 Blue #property indicator_color3 Blue //---- Keltner Channels are dott-dash curves #property indicator_style2 STYLE_DASHDOTDOT #property indicator_style3 STYLE_DASHDOTDOT //---- Keltner Channels width is equal to 1 #property indicator_width2 1 #property indicator_width3 1 //---- display of Keltner Channels labels #property indicator_label2 "Up Keltner" #property indicator_label3 "Dn Keltner" //+--------------------------------------------+ //| Background drawing parameters | //+--------------------------------------------+ //---- drawing the background as a cloud #property indicator_type4 DRAW_FILLING #property indicator_type5 DRAW_FILLING #property indicator_type6 DRAW_FILLING #property indicator_type7 DRAW_FILLING //---- selection of background colors #property indicator_color4 Aquamarine #property indicator_color5 PaleTurquoise #property indicator_color6 Wheat #property indicator_color7 LightPink //---- display of Keltner Channels labels #property indicator_label4 "Up Keltner Cloud Out" #property indicator_label5 "Up Keltner Cloud In" #property indicator_label6 "Dn Keltner Cloud In" #property indicator_label7 "Dn Keltner Cloud Out" //+-----------------------------------+ //| Smoothings classes description | //+-----------------------------------+ #include //+-----------------------------------+ //---- declaration of the CXMA and CStdDeviation classes variables from the SmoothAlgorithms.mqh file CXMA XMA1,XMA2; //+-----------------------------------+ //| 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_SIMPLE, // Simple Price (OC/2) PRICE_QUARTER_, // Quarted Price (HLOC/4) PRICE_TRENDFOLLOW0_, // TrendFollow_1 Price PRICE_TRENDFOLLOW1_ // TrendFollow_2 Price }; /*enum Smooth_Method - enumeration is declared in the SmoothAlgorithms.mqh file { 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 Smooth_Method MA_Method1=MODE_SMA; // First smoothing method input int Length1=40; // First smoothing depth input int Phase1=15; // First smoothing parameter input Smooth_Method MA_Method2=MODE_JJMA; // Second smoothing method input int Length2=20; // Second smoothing depth input int Phase2=100; // Second smoothing parameter input int KeltnerPeriod=20; // Keltner smoothing period input double Ratio = 2.0; // First level ratio input Applied_price_ IPC=PRICE_CLOSE; // Applied price input int Shift=0; // Horizontal shift of the indicator in bars input int PriceShift=0; // Vertical shift of the indicator in points //+-----------------------------------+ //---- declaration of a dynamic array that //---- will be used as an indicator buffer double X2MA[]; //---- declaration of dynamic arrays that //---- will be used as Keltner Channels indicator buffers double ExtLineBuffer1[],ExtLineBuffer2[]; double ExtLineBuffer3[],ExtLineBuffer4[]; double ExtLineBuffer5[],ExtLineBuffer6[]; double ExtLineBuffer7[],ExtLineBuffer8[]; double ExtLineBuffer9[],ExtLineBuffer10[]; //---- declaration of the average vertical shift value variable double dPriceShift; //---- declaration of the integer variables for the start of data calculation int StartBars,StartBars1,StartBars2; //+------------------------------------------------------------------+ //| Calculation of the half of the Keltner Channel width | //+------------------------------------------------------------------+ double GetKeltner(int period,int bar,const double &High[],const double &Low[]) { //---- double Resalt,sum=0; for(int iii=0; iiirates_total || prev_calculated<=0) // checking for the first start of the indicator calculation { first1=0; // starting index for calculation of all bars for the average first2=StartBars; // starting index for calculation of all bars for the channel } else { first1=prev_calculated-1; // starting index for calculation of the new bars for the average first2=first1; // starting index for calculation of the new bars for the channel } //---- main indicator calculation loop for(bar=first1; bar