Volatility StepChannel Coral

Author: Copyright 2020, fxborg
Indicators Used
Indicator of the average true rangeStochastic oscillatorRelative strength indexMACD HistogramMoving average indicator
0 Views
0 Downloads
0 Favorites
Volatility StepChannel Coral
ÿþ//+------------------------------------------------------------------+

//|                                 Volatility StepChannel Coral.mq5 |

//| Volatility StepChannel v1.03              Copyright 2015, fxborg |

//|                                   http://fxborg-labo.hateblo.jp/ |

//+------------------------------------------------------------------+

#property copyright "Copyright 2020, fxborg"

#property link      "http://fxborg-labo.hateblo.jp/"

#property version   "1.04"

//---

#include <MovingAverages.mqh>

//---

#property indicator_buffers 25

#property indicator_plots   6

#property indicator_chart_window

//+----------------------------------------------+

//|  0@0<5B@K >B@8A>2:8 <54256L53> 8=48:0B>@0   |

//+----------------------------------------------+

//---- >B@8A>2:0 8=48:0B>@0 1 2 2845 A8<2>;0

#property indicator_type1   DRAW_ARROW

//---- 2 :0G5AB25 F25B0 <54256L59 ;8=88 8=48:0B>@0 8A?>;L7>20= @>7>2K9 F25B

#property indicator_color1  Magenta

//---- B>;I8=0 ;8=88 8=48:0B>@0 1 @02=0 4

#property indicator_width1  2

//---- >B>1@065=85 <5B:8 <54256L59 ;8=88 8=48:0B>@0

#property indicator_label1  "Volatility StepChannel Coral Sell"

//+----------------------------------------------+

//|  0@0<5B@K >B@8A>2:8 1KGL3> 8=48:0B>@0       |

//+----------------------------------------------+

//---- >B@8A>2:0 8=48:0B>@0 2 2 2845 A8<2>;0

#property indicator_type2   DRAW_ARROW

//---- 2 :0G5AB25 F25B0 1KG59 ;8=88 8=48:0B>@0 8A?>;L7>20= 75;5=K9 F25B

#property indicator_color2  Lime

//---- B>;I8=0 ;8=88 8=48:0B>@0 2 @02=0 4

#property indicator_width2  2

//---- >B>1@065=85 <5B:8 1KGL59 ;8=88 8=48:0B>@0

#property indicator_label2 "Volatility StepChannel Coral Buy"

//----

#property indicator_type3 DRAW_LINE

#property indicator_type4 DRAW_LINE

#property indicator_type5 DRAW_LINE

//---

#property indicator_color3 DeepPink

#property indicator_width3 2

#property indicator_style3 STYLE_SOLID

#property indicator_color4 DarkGray

#property indicator_width4 1

#property indicator_style4 STYLE_DOT

#property indicator_color5 DarkGray

#property indicator_width5 1

#property indicator_style5 STYLE_DOT

//--- plot C

#property indicator_label6  "Volatility StepChannel Coral"

#property indicator_type6   DRAW_COLOR_LINE

#property indicator_color6  clrGreen,clrRed,clrDarkGray

#property indicator_style6  STYLE_SOLID

#property indicator_width6  2

//+----------------------------------------------+

//| E>4=K5 ?0@0<5B@K 8=48:0B>@0                 |

//+----------------------------------------------+

input double             InpCoeff            = 0.063492063492; // Coefficient= 0.063492063492

input ENUM_APPLIED_PRICE InpAppliedPrice     = PRICE_CLOSE;    // Applied price

input double             InpScaleFactor      = 2.25;           // Scale factor

input int                InpMaPeriod         = 3;              // Smooth Period

input int                InpVolatilityPeriod = 70;             // Volatility Period

input bool               PivotsLines         = true;           // Show horizontal lines

input string             InpUpperHline       = "Upper Line";   // "Upper Line": name

input string             InpAverageHline     = "Middle Line";  // "Middle Line": name

input string             InpLowerHline       = "Lower Line";   // "Lower Line": name

input string             InpColorHline       = "Color Line";   // "Color Line": name

input color              InpUpperColor       = clrDarkGray;    // "Upper Line": color

input color              InpAverageColor     = clrDeepPink;    // "Middle Line": color

input color              InpLowerColor       = clrDarkGray;    // "Lower Line": color

input color              InpColorColor       = clrGreen;       // "Color Line": color

//---

int ATR_Period=7;                             // ?5@8>4 ATR

int STO_Period=9;                             // ?5@8>4 AB>E0AB8:0

ENUM_MA_METHOD MA_Method=MODE_SMA;            // <5B>4 CA@54=5=8O

ENUM_STO_PRICE STO_Price=STO_LOWHIGH;         // <5B>4 @0AG5B0 F5=

int InpFastPeriod=int(InpVolatilityPeriod/7); // Fast Period

int InpMode=2;                                // 1:Simple Mode 2:hybrid Mode

ENUM_MA_METHOD InpMaMethod=MODE_SMMA;         // Ma Method

bool Redr;

//---- will be used as indicator buffers

double UpperBuffer[];

double MiddleBuffer[];

double LowerBuffer[];

//---

double UpperMaBuffer[];

double MiddleMaBuffer[];

double LowerMaBuffer[];

//---

double BaseBuffer[];

double BuC[];

double MiddleC[];

//---

double HighBuffer[];

double LowBuffer[];

double CloseBuffer[];

double StdDevBuffer[];

double StdDevCalcBuffer[];

//--- indicator buffers

double BufferB1[];

double BufferB2[];

double BufferB3[];

double BufferB4[];

double BufferB5[];

double BufferB6[];

double BufferMA[];

double BufferC[];

double BufferColors[];

double SellBuffer[];

double BuyBuffer[];

//--- global variables

double coeff1;

double coeff2;

double d,s;

int p,x1,x2,P_,StartBars,OldTrend;

int MA_Handle,ATR_Handle,STO_Handle,RSI_Handle,MACD_Handle;

//+------------------------------------------------------------------+

//| Custom indicator initialization function                         |

//+------------------------------------------------------------------+

int OnInit()

  {

   if(PivotsLines)

     {

      CreateHline(0,0,InpUpperHline,0,InpUpperColor,2,0,1,0,1,1,2);

      CreateHline(0,0,InpAverageHline,0,InpAverageColor,2,0,1,0,1,1,2);

      CreateHline(0,0,InpLowerHline,0,InpLowerColor,2,0,1,0,1,1,2);

      CreateHline(0,0,InpColorHline,0,InpColorColor,2,0,1,0,1,1,2);

     }

   Redr=(PivotsLines);

//---- 8=8F80;870F8O 3;>10;L=KE ?5@5<5==KE

   d=2.3;

   s=1.5;

   x1 = 53;

   x2 = 47;

   coeff1=(InpCoeff<=0.0086 ? 0.0086 : InpCoeff>1 ? 1: InpCoeff);

   coeff2=1.0-coeff1;

//---- Initialization of variables of data calculation starting point

   StartBars=1+InpFastPeriod+InpVolatilityPeriod+InpMaPeriod+InpMaPeriod+1;

//--- indicator buffers mapping

   SetIndexBuffer(23,BuC,INDICATOR_DATA);

   SetIndexBuffer(24,MiddleC,INDICATOR_DATA);

//---

   SetIndexBuffer(2,MiddleMaBuffer,INDICATOR_DATA);

   SetIndexBuffer(3,UpperMaBuffer,INDICATOR_DATA);

   SetIndexBuffer(4,LowerMaBuffer,INDICATOR_DATA);

   SetIndexBuffer(5,BufferC,INDICATOR_DATA);

   SetIndexBuffer(6,BufferColors,INDICATOR_COLOR_INDEX);

//---

   SetIndexBuffer(7,UpperBuffer,INDICATOR_CALCULATIONS);

   SetIndexBuffer(8,BaseBuffer,INDICATOR_CALCULATIONS);

   SetIndexBuffer(9,MiddleBuffer,INDICATOR_CALCULATIONS);

   SetIndexBuffer(10,LowerBuffer,INDICATOR_CALCULATIONS);

   SetIndexBuffer(11,HighBuffer,INDICATOR_CALCULATIONS);

   SetIndexBuffer(12,LowBuffer,INDICATOR_CALCULATIONS);

   SetIndexBuffer(13,CloseBuffer,INDICATOR_CALCULATIONS);

   SetIndexBuffer(14,StdDevBuffer,INDICATOR_CALCULATIONS);

   SetIndexBuffer(15,StdDevCalcBuffer,INDICATOR_CALCULATIONS);

   SetIndexBuffer(16,BufferB1,INDICATOR_CALCULATIONS);

   SetIndexBuffer(17,BufferB2,INDICATOR_CALCULATIONS);

   SetIndexBuffer(18,BufferB3,INDICATOR_CALCULATIONS);

   SetIndexBuffer(19,BufferB4,INDICATOR_CALCULATIONS);

   SetIndexBuffer(20,BufferB5,INDICATOR_CALCULATIONS);

   SetIndexBuffer(21,BufferB6,INDICATOR_CALCULATIONS);

   SetIndexBuffer(22,BufferMA,INDICATOR_CALCULATIONS);

//---

   PlotIndexSetDouble(2,PLOT_EMPTY_VALUE,0);

   PlotIndexSetDouble(3,PLOT_EMPTY_VALUE,0);

   PlotIndexSetDouble(4,PLOT_EMPTY_VALUE,0);

   PlotIndexSetDouble(5,PLOT_EMPTY_VALUE,0);

   PlotIndexSetDouble(6,PLOT_EMPTY_VALUE,0);

   PlotIndexSetDouble(7,PLOT_EMPTY_VALUE,0);

   PlotIndexSetDouble(8,PLOT_EMPTY_VALUE,0);

   PlotIndexSetDouble(9,PLOT_EMPTY_VALUE,0);

   PlotIndexSetDouble(10,PLOT_EMPTY_VALUE,0);

   PlotIndexSetDouble(11,PLOT_EMPTY_VALUE,0);

   PlotIndexSetDouble(12,PLOT_EMPTY_VALUE,0);

   PlotIndexSetDouble(13,PLOT_EMPTY_VALUE,0);

//---

   PlotIndexSetInteger(2,PLOT_DRAW_BEGIN,StartBars);

   PlotIndexSetInteger(3,PLOT_DRAW_BEGIN,StartBars);

   PlotIndexSetInteger(4,PLOT_DRAW_BEGIN,StartBars);

   ResetLastError();

//---- ?>;CG5=85 E5=4;0 8=48:0B>@0 ATR

   ATR_Handle=iATR(NULL,0,ATR_Period);

   if(ATR_Handle==INVALID_HANDLE)

      Print(" 5 C40;>AL ?>;CG8BL E5=4; 8=48:0B>@0 ATR");

//---- ?>;CG5=85 E5=4;0 8=48:0B>@0 Stochastic

   STO_Handle=iStochastic(NULL,0,STO_Period,STO_Period,1,MA_Method,STO_Price);

   if(STO_Handle==INVALID_HANDLE)

      Print(" 5 C40;>AL ?>;CG8BL E5=4; 8=48:0B>@0 Stochastic");

//---- ?>;CG5=85 E5=4;0 8=48:0B>@0 RSI

   RSI_Handle=iRSI(NULL,0,13,PRICE_CLOSE);

   if(RSI_Handle==INVALID_HANDLE)

      Print(" 5 C40;>AL ?>;CG8BL E5=4; 8=48:0B>@0 iRSI");

//---- ?>;CG5=85 E5=4;0 8=48:0B>@0 MACD

   MACD_Handle=iMACD(NULL,0,12,26,9,PRICE_CLOSE);

   if(MACD_Handle==INVALID_HANDLE)

      Print(" 5 C40;>AL ?>;CG8BL E5=4; 8=48:0B>@0 iMACD");

//---- ?>;CG5=85 E5=4;0 8=48:0B>@0 MA

   MA_Handle=iMA(NULL,0,1,0,MODE_SMA,InpAppliedPrice);

   if(MA_Handle==INVALID_HANDLE)

      Print(" 5 C40;>AL ?>;CG8BL E5=4; 8=48:0B>@0 iMA");

//---- ?@52@0I5=85 48=0<8G5A:>3> <0AA820 2 8=48:0B>@=K9 1CD5@

   SetIndexBuffer(0,SellBuffer,INDICATOR_DATA);

//---- >ACI5AB2;5=85 A42830 =0G0;0 >BAG5B0 >B@8A>2:8 8=48:0B>@0 1

   PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,StartBars);

//--- A>740=85 <5B:8 4;O >B>1@065=8O 2 DataWindow

   PlotIndexSetString(0,PLOT_LABEL,"Volatility StepChannel Coral Sell");

//---- A8<2>; 4;O 8=48:0B>@0

   PlotIndexSetInteger(0,PLOT_ARROW,72);

//---- 8=45:A0F8O M;5<5=B>2 2 1CD5@5 :0: 2 B09<A5@88

   ArraySetAsSeries(SellBuffer,true);

//---- ?@52@0I5=85 48=0<8G5A:>3> <0AA820 2 8=48:0B>@=K9 1CD5@

   SetIndexBuffer(1,BuyBuffer,INDICATOR_DATA);

//---- >ACI5AB2;5=85 A42830 =0G0;0 >BAG5B0 >B@8A>2:8 8=48:0B>@0 2

   PlotIndexSetInteger(1,PLOT_DRAW_BEGIN,StartBars);

//--- A>740=85 <5B:8 4;O >B>1@065=8O 2 DataWindow

   PlotIndexSetString(1,PLOT_LABEL,"Volatility StepChannel Coral Buy");

//---- A8<2>; 4;O 8=48:0B>@0

   PlotIndexSetInteger(1,PLOT_ARROW,71);

//---- 8=45:A0F8O M;5<5=B>2 2 1CD5@5 :0: 2 B09<A5@88

   ArraySetAsSeries(BuyBuffer,true);

//---- CAB0=>2:0 D>@<0B0 B>G=>AB8 >B>1@065=8O 8=48:0B>@0

   IndicatorSetInteger(INDICATOR_DIGITS,_Digits);

//---- 8<O 4;O >:>= 40==KE 8 ;M910 4;O AC1J>:>=

   string short_name="Volatility StepChannel Coral";

   IndicatorSetString(INDICATOR_SHORTNAME,short_name);

//---

   return(INIT_SUCCEEDED);

  }

//+------------------------------------------------------------------+

//| Indicator deinitialization function                              |

//+------------------------------------------------------------------+

void OnDeinit(const int reason)

  {

   if(PivotsLines)

     {

      ObjectDelete(0,InpUpperHline);

      ObjectDelete(0,InpAverageHline);

      ObjectDelete(0,InpLowerHline);

      ObjectDelete(0,InpColorHline);

     }

   if(Redr)

      ChartRedraw();

  }

//+------------------------------------------------------------------+

//| Custom indicator iteration function                              |

//+------------------------------------------------------------------+

int OnCalculate(const int rates_total,

                const int prev_calculated,

                const datetime &time[],

                const double &open[],

                const double &high[],

                const double &low[],

                const double &close[],

                const long &tick_volume[],

                const long &volume[],

                const int &spread[])

  {

//---- ?@>25@:0 :>;8G5AB20 10@>2 =0 4>AB0B>G=>ABL 4;O @0AG5B0

   if(BarsCalculated(ATR_Handle)<rates_total

      || BarsCalculated(STO_Handle)<rates_total

      || BarsCalculated(RSI_Handle)<rates_total

      || BarsCalculated(MACD_Handle)<rates_total

      || rates_total<=StartBars)

      return(0);

//---- >1JO2;5=8O ;>:0;L=KE ?5@5<5==KE

   int to_copy,limit,i,j,first;

   double value2[],Range[],RSI[],MACD[],MACDS[],range,range2,val1,val2,val3;

   bool RsiUp,RsiDn,MacdUp,MacdDn,ColUp,ColDn;

//---- @0AG5BK =5>1E>48<>3> :>;8G5AB20 :>?8@C5<KE 40==KE 8

//AB0@B>2>3> =><5@0 limit 4;O F8:;0 ?5@5AG5B0 10@>2

   if(prev_calculated>rates_total || prev_calculated<=0)// ?@>25@:0 =0 ?5@2K9 AB0@B @0AG5B0 8=48:0B>@0

     {

      to_copy=rates_total; // @0AG5B=>5 :>;8G5AB2> 2A5E 10@>2

      limit=rates_total-StartBars; // AB0@B>2K9 =><5@ 4;O @0AG5B0 2A5E 10@>2

     }

   else

     {

      to_copy=rates_total-prev_calculated+1; // @0AG5B=>5 :>;8G5AB2> B>;L:> =>2KE 10@>2

      limit=rates_total-prev_calculated; // AB0@B>2K9 =><5@ 4;O @0AG5B0 =>2KE 10@>2

     }

//---- :>?8@C5< 2=>2L ?>O282H85AO 40==K5 2 <0AA82K Range[] 8 value2[]

   if(CopyBuffer(ATR_Handle,0,0,to_copy,Range)<=0)

      return(0);

   if(CopyBuffer(STO_Handle,0,0,to_copy,value2)<=0)

      return(0);

   if(CopyBuffer(RSI_Handle,0,0,to_copy,RSI)<=0)

      return(0);

   if(CopyBuffer(MACD_Handle,0,0,to_copy,MACD)<=0)

      return(0);

   if(CopyBuffer(MACD_Handle,1,0,to_copy,MACDS)<=0)

      return(0);

//--- @>25@:0 8 @0AGQB :>;8G5AB20 ?@>AG8BK205<KE 10@>2

   first=rates_total-prev_calculated;

   if(first>1)

     {

      first=rates_total-2;

      ArrayInitialize(BuC,EMPTY_VALUE);

      ArrayInitialize(BufferC,EMPTY_VALUE);

      ArrayInitialize(BufferColors,2);

      ArrayInitialize(BufferB1,0);

      ArrayInitialize(BufferB2,0);

      ArrayInitialize(BufferB3,0);

      ArrayInitialize(BufferB4,0);

      ArrayInitialize(BufferB5,0);

      ArrayInitialize(BufferB6,0);

      ArrayInitialize(BufferMA,0);

     }

//--- setting buffer arrays as timeseries

   ArraySetAsSeries(BuC,true);

   ArraySetAsSeries(BufferC,true);

   ArraySetAsSeries(BufferColors,true);

   ArraySetAsSeries(BufferB1,true);

   ArraySetAsSeries(BufferB2,true);

   ArraySetAsSeries(BufferB3,true);

   ArraySetAsSeries(BufferB4,true);

   ArraySetAsSeries(BufferB5,true);

   ArraySetAsSeries(BufferB6,true);

   ArraySetAsSeries(BufferMA,true);

//--- >43>B>2:0 40==KE

   int count=(first>1 ? rates_total : 1);

   int copied=CopyBuffer(MA_Handle,0,0,count,BufferMA);

   if(copied!=count)

      return 0;

//---  0AGQB 8=48:0B>@0

   for(i=first; i>=0 && !IsStopped(); i--)

     {

      if(i==rates_total-2)

         BufferB1[i]=BufferB2[i]=BufferB3[i]=BufferB4[i]=BufferB5[i]=BufferB6[i]=BufferMA[i];

      else

        {

         BufferB1[i]=coeff1*BufferMA[i]+coeff2*BufferB1[i+1];

         BufferB2[i]=coeff1*BufferB1[i]+coeff2*BufferB2[i+1];

         BufferB3[i]=coeff1*BufferB2[i]+coeff2*BufferB3[i+1];

         BufferB4[i]=coeff1*BufferB3[i]+coeff2*BufferB4[i+1];

         BufferB5[i]=coeff1*BufferB4[i]+coeff2*BufferB5[i+1];

         BufferB6[i]=coeff1*BufferB5[i]+coeff2*BufferB6[i+1];

         BufferC[i]=(-0.064)*BufferB6[i]+0.672*BufferB5[i]-2.352*BufferB4[i]+2.744*BufferB3[i];

         BufferColors[i]=(BufferC[i]>BufferC[i+1] ? 0 : BufferC[i]<BufferC[i+1] ? 1 : 2);

         BuC[i]=(-0.064)*BufferB6[i]+0.672*BufferB5[i]-2.352*BufferB4[i]+2.744*BufferB3[i];

        }

     }

//---

   MathSrand(int(TimeLocal()));

//--- indicator buffers

   ArraySetAsSeries(MiddleC,false);

   ArraySetAsSeries(UpperMaBuffer,false);

   ArraySetAsSeries(LowerMaBuffer,false);

   ArraySetAsSeries(MiddleMaBuffer,false);

   ArraySetAsSeries(UpperBuffer,false);

   ArraySetAsSeries(LowerBuffer,false);

   ArraySetAsSeries(MiddleBuffer,false);

   ArraySetAsSeries(HighBuffer,false);

   ArraySetAsSeries(LowBuffer,false);

   ArraySetAsSeries(CloseBuffer,false);

   ArraySetAsSeries(StdDevBuffer,false);

   ArraySetAsSeries(BaseBuffer,false);

//--- rate data

   ArraySetAsSeries(high,false);

   ArraySetAsSeries(low,false);

   ArraySetAsSeries(close,false);

   ArraySetAsSeries(time,false);

//+----------------------------------------------------+

//| Set Median Buffeer                                 |

//+----------------------------------------------------+

   first=InpFastPeriod+InpVolatilityPeriod+InpMaPeriod+InpMaPeriod;

   if(first+1<prev_calculated)

      first=prev_calculated-2;

   else

     {

      for(i=0; i<first; i++)

        {

         MiddleBuffer[i]=close[i];

         HighBuffer[i]=high[i];

         LowBuffer[i]=low[i];

        }

     }

   for(i=first; i<rates_total && !IsStopped(); i++)

     {

      StdDevBuffer[i]=calcStdDev(close,InpFastPeriod,i);

      //---

      double h,l,c,hsum=0.0,lsum=0.0,csum=0.0;

      //---

      for(j=0; j<InpMaPeriod; j++)

        {

         hsum += high[i-j];

         lsum += low[i-j];

         csum += close[i-j];

        }

      //---

      h=hsum/InpMaPeriod;

      l=lsum/InpMaPeriod;

      c=csum/InpMaPeriod;

      //--- Base Volatility

      double sd=0.0;

      for(j=(i-InpVolatilityPeriod+1); j<=i; j++)

         sd+=StdDevBuffer[j];

      //--- Ma Buffer

      double v=sd/InpVolatilityPeriod;

      BaseBuffer[i]=v;

      double base=v*InpScaleFactor;

      //--- Hybrid Mode

      if((h-base)>HighBuffer[i-1])

         HighBuffer[i]=h;

      else

         if(h+base<HighBuffer[i-1])

            HighBuffer[i]=h+base;

         else

            HighBuffer[i]=HighBuffer[i-1];

      //---

      if(l+base<LowBuffer[i-1])

         LowBuffer[i]=l;

      else

         if((l-base)>LowBuffer[i-1])

            LowBuffer[i]=l-base;

         else

            LowBuffer[i]=LowBuffer[i-1];

      //---

      if((c-base/2)>CloseBuffer[i-1])

         CloseBuffer[i]=c-base/2;

      else

         if(c+base/2<CloseBuffer[i-1])

            CloseBuffer[i]=c+base/2;

         else

            CloseBuffer[i]=CloseBuffer[i-1];

      //---

      MiddleBuffer[i]=(HighBuffer[i]+LowBuffer[i]+CloseBuffer[i]*2)/4;

      UpperBuffer[i]=HighBuffer[i] + base/2;

      LowerBuffer[i]=LowBuffer[i]  - base/2;

      //---

      hsum=0.0;

      lsum=0.0;

      csum=0.0;

      //---

      for(j=0; j<InpMaPeriod; j++)

        {

         hsum += UpperBuffer[i-j];

         lsum += LowerBuffer[i-j];

         csum += MiddleBuffer[i-j];

        }

      //---

      UpperMaBuffer[i]=hsum/InpMaPeriod;

      LowerMaBuffer[i]=lsum/InpMaPeriod;

      MiddleMaBuffer[i]=csum/InpMaPeriod;

      MiddleC[i]=csum/InpMaPeriod;

     }

//---- 8=45:A0F8O M;5<5=B>2 2 <0AA820E :0: 2 B09<A5@8OE

   ArraySetAsSeries(BuC,true);

   ArraySetAsSeries(MiddleC,true);

   ArraySetAsSeries(RSI,true);

   ArraySetAsSeries(MACD,true);

   ArraySetAsSeries(MACDS,true);

   ArraySetAsSeries(Range,true);

   ArraySetAsSeries(value2,true);

   ArraySetAsSeries(open,true);

   ArraySetAsSeries(high,true);

   ArraySetAsSeries(low,true);

   ArraySetAsSeries(close,true);

//---- 2>AAB0=02;8205< 7=0G5=8O ?5@5<5==KE

   p=P_;

//---- >A=>2=>9 F8:; @0AG5B0 8=48:0B>@0

   for(i=limit; i>=0; i--)

     {

      //---- 70?><8=05< 7=0G5=8O ?5@5<5==KE ?5@54 ?@>3>=0<8 =0 B5:CI5< 10@5

      if(rates_total!=prev_calculated && i==0)

         P_=p;

      range=Range[i]/d;

      range2=Range[i]*s/4;

      val1 = 0.0;

      val2 = 0.0;

      SellBuffer[i]=0.0;

      BuyBuffer[i]=0.0;

      RsiDn=RSI[i]<=x2;

      RsiUp=RSI[i]>=x1;

      MacdDn=MACD[i]<MACDS[i];

      MacdUp=MACD[i]>MACDS[i];

      ColDn=MiddleC[i]<BuC[i];

      ColUp=MiddleC[i]>BuC[i];

      val3=MathAbs(close[i]-close[i+2]);

      if(ColDn && RsiDn && MacdDn && value2[i] < x2 && val3 > range)

         p = 1;

      if(ColUp && RsiUp && MacdUp && value2[i] > x1 && val3 > range)

         p = 2;

      if(val3<=range)

         continue;

      if(ColDn && RsiDn && MacdDn && value2[i]<x2 && (p==1 || p==0))

        {

         if(OldTrend>0)

            SellBuffer[i]=high[i]+range2;

         if(i!=0)

            OldTrend=-1;

        }

      if(ColUp && RsiUp && MacdUp && value2[i]>x1 && (p==2 || p==0))

        {

         if(OldTrend<0)

            BuyBuffer[i]=low[i]-range2;

         if(i!=0)

            OldTrend=+1;

        }

     }

//--- main loop

//--- we work only at the time of the birth of new bar

   if(PivotsLines)

     {

      double upper_left=0.0,average_left=0.0,lower_left=0.0,Color_left=0.0;

      for(i=rates_total-1; i>=0 && !IsStopped(); i--)

        {

         if(UpperMaBuffer[i]!=0.0 && UpperMaBuffer[i]!=EMPTY_VALUE)

           {

            if(upper_left==0.0)

              {

               upper_left=UpperMaBuffer[i];

              }

           }

         if(MiddleMaBuffer[i]!=0.0 && MiddleMaBuffer[i]!=EMPTY_VALUE)

           {

            if(average_left==0.0)

              {

               average_left=MiddleMaBuffer[i];

              }

           }

         if(LowerMaBuffer[i]!=0.0 && LowerMaBuffer[i]!=EMPTY_VALUE)

           {

            if(lower_left==0.0)

              {

               lower_left=LowerMaBuffer[i];

              }

           }

         if(BufferC[0]!=0.0 && BufferC[0]!=EMPTY_VALUE)

           {

            if(Color_left==0.0)

              {

               Color_left=BufferC[0];

              }

           }

         if(upper_left!=0.0 && average_left!=0.0 && lower_left!=0.0 && Color_left!=0.0)

            break;

        }

      if(upper_left==0.0 || average_left==0.0 || lower_left==0.0 || Color_left==0.0)

         return(rates_total);

      //---

      if(ObjectFind(0,InpUpperHline)<0)

        {

         return(rates_total);

        }

      else

        {

         if(!ObjectMove(0,InpUpperHline,0,0,upper_left))

            return(rates_total);

        }

      if(ObjectFind(0,InpAverageHline)<0)

        {

         return(rates_total);

        }

      else

        {

         if(!ObjectMove(0,InpAverageHline,0,0,average_left))

            return(rates_total);

        }

      if(ObjectFind(0,InpLowerHline)<0)

        {

         return(rates_total);

        }

      else

        {

         if(!ObjectMove(0,InpLowerHline,0,0,lower_left))

            return(rates_total);

        }

      if(ObjectFind(0,InpColorHline)<0)

        {

         return(rates_total);

        }

      else

        {

         if(!ObjectMove(0,InpColorHline,0,0,Color_left))

            return(rates_total);

        }

     }

   if(Redr)

      ChartRedraw();

//----

   return(rates_total);

  }

//+------------------------------------------------------------------+

//|                                                                  |

//+------------------------------------------------------------------+

double calcStdDev(const double  &close[],int span,int i)

  {

   if(i<span-1)

      return 0.0;

//---

   if(i==span-1)

      StdDevCalcBuffer[i]=SimpleMA(i,span,close);

   else

      StdDevCalcBuffer[i]=SmoothedMA(i,span,StdDevCalcBuffer[i-1],close);

//---

   double sum=0.0;

   for(int j=0; j<span; j++)

      sum+=MathPow(close[i-j]-StdDevCalcBuffer[i],2);

   return MathSqrt(sum/span);

  }

//+------------------------------------------------------------------+

//|  !>740=85 3>@87>=B0;L=>3>, F5=>2>3> C@>2=O                       |

//+------------------------------------------------------------------+

bool CreateHline(long ch_id,int sub_window,

                 string name,double price,

                 color clr,ENUM_LINE_STYLE style,

                 int width,bool back,

                 bool selectable,bool selected,

                 bool hidden,long z_order)

  {

   ObjectCreate(ch_id,name,OBJ_HLINE,sub_window,0,price);

   ObjectSetInteger(ch_id,name,OBJPROP_COLOR,clr);

   ObjectSetInteger(ch_id,name,OBJPROP_STYLE,style);

   ObjectSetInteger(ch_id,name,OBJPROP_WIDTH,width);

   ObjectSetInteger(ch_id,name,OBJPROP_BACK,back);

   ObjectSetInteger(ch_id,name,OBJPROP_SELECTABLE,selectable);

   ObjectSetInteger(ch_id,name,OBJPROP_SELECTED,selected);

   ObjectSetInteger(ch_id,name,OBJPROP_HIDDEN,hidden);

   ObjectSetInteger(ch_id,name,OBJPROP_ZORDER,z_order);

   return(true);

  }

//+------------------------------------------------------------------+

Comments

Markdown supported. Formatting help

Markdown Formatting Guide

Element Markdown Syntax
Heading # H1
## H2
### H3
Bold **bold text**
Italic *italicized text*
Link [title](https://www.example.com)
Image ![alt text](image.jpg)
Code `code`
Code Block ```
code block
```
Quote > blockquote
Unordered List - Item 1
- Item 2
Ordered List 1. First item
2. Second item
Horizontal Rule ---