JSatlCandle_Chl

Author: Copyright © 2018, Nikolay Kositsin
0 Views
0 Downloads
0 Favorites
JSatlCandle_Chl
ÿþ//+------------------------------------------------------------------+

//|                                              JSatlCandle_Chl.mq5 |

//|                               Copyright © 2018, Nikolay Kositsin | 

//|                              Khabarovsk,   farria@mail.redcom.ru | 

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

#property copyright "Copyright © 2018, Nikolay Kositsin"

#property link "farria@mail.redcom.ru"

#property description "=48:0B>@ JSatl 2 A25G=>< 2845"

//---- =><5@ 25@A88 8=48:0B>@0

#property version   "1.00"

//---- >B@8A>2:0 8=48:0B>@0 2 3;02=>< >:=5

#property indicator_chart_window

//---- 4;O @0AG5B0 8 >B@8A>2:8 8=48:0B>@0 8A?>;L7>20=> 452OBL 1CD5@>2

#property indicator_buffers 9

//---- 8A?>;L7>20=> 2A53> B@8 3@0D8G5A:8E ?>AB@>5=8O

#property indicator_plots   3

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

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

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

//--- >B@8A>2:0 8=48:0B>@0 2 2845 F25B=>3> >1;0:0

#property indicator_type1   DRAW_FILLING

//--- 2 :0G5AB25 F25B>2 8=48:0B>@0 8A?>;L7>20=K

#property indicator_color1  C'223,255,232'

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

#property indicator_label1  "Upper Signal Cloud"

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

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

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

//--- >B@8A>2:0 8=48:0B>@0 2 2845 F25B=>3> >1;0:0

#property indicator_type2   DRAW_FILLING

//--- 2 :0G5AB25 F25B>2 8=48:0B>@0 8A?>;L7>20=K

#property indicator_color2  C'255,242,255'

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

#property indicator_label2  "Lower Signal Cloud"

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

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

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

//---- 2 :0G5AB25 8=48:0B>@0 8A?>;L7>20=K F25B=K5 A25G8

#property indicator_type3   DRAW_COLOR_CANDLES

#property indicator_color3   C'255,208,121',clrGray,C'106,255,255'

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

#property indicator_label3  "JSatlCandle Open;JSatlCandle High;JSatlCandle Low;JSatlCandle Close"

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

//|  >1JO2;5=85 :>=AB0=B                         |

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

#define RESET  0 // >=AB0=B0 4;O 2>72@0B0 B5@<8=0;C :><0=4K =0 ?5@5AGQB 8=48:0B>@0

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

//|  ?8A0=85 :;0AA0 CXMA                        |

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

#include <SmoothAlgorithms.mqh> 

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

//---- >1JO2;5=85 ?5@5<5==KE :;0AA0 CXMA 87 D09;0 SmoothAlgorithms.mqh

CXMA XMAo,XMAh,XMAl,XMAc;

CStdDeviation STDh,STDl;

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

//|  %+  " + "                 |

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

input uint JLength=5;                                  // 3;C18=0 JMA A3;06820=8O                   

input int JPhase=100;                                  // ?0@0<5B@ JMA A3;06820=8O,

//---- 87<5=ONI89AO 2 ?@545;0E -100 ... +100,

//---- 2;8O5B =0 :0G5AB2> ?5@5E>4=>3> ?@>F5AA0;

input uint Gap=10;                                     // @07<5@ =5CG8BK205<>3> 3M?0 2 ?C=:B0E

input uint BBLength=20;                                // ?5@8>4 >;;8=465@0                                                   

input double BandsDeviation=3.0;                       // 45280F8O

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

//---- >1JO2;5=85 48=0<8G5A:8E <0AA82>2, :>B>@K5 1C4CB 2 40;L=59H5< 8A?>;L7>20=K 2 :0G5AB25 8=48:0B>@=KE 1CD5@>2

double UpUpBuffer[],UpDnBuffer[],DnUpBuffer[],DnDnBuffer[];

double ExtOpenBuffer[];

double ExtHighBuffer[];

double ExtLowBuffer[];

double ExtCloseBuffer[];

double ExtColorBuffer[];

//---- 1JO2;5=85 F5;KE ?5@5<5==KE =0G0;0 >BAGQB0 40==KE

int min_rates_total,min_rates_1,SATLSize;

//+X----------------------------------------------X+ 

//| =8F80;870F8O :>MDD8F85=B>2 F8D@>2>3> D8;LB@0  |

//+X----------------------------------------------X+ 

double dSATLTable[]=

  {

   -0.00514293,-0.00398417,-0.00262594,-0.00107121,+0.00066887,+0.00258172,+0.00465269,

   +0.00686394,+0.00919334,+0.01161720,+0.01411056,+0.01664635,+0.01919533,+0.02172747,

   +0.02421320,+0.02662203,+0.02892446,+0.03109071,+0.03309496,+0.03490921,+0.03651145,

   +0.03788045,+0.03899804,+0.03984915,+0.04042329,+0.04071263,+0.04071263,+0.04042329,

   +0.03984915,+0.03899804,+0.03788045,+0.03651145,+0.03490921,+0.03309496,+0.03109071,

   +0.02892446,+0.02662203,+0.02421320,+0.02172747,+0.01919533,+0.01664635,+0.01411056,

   +0.01161720,+0.00919334,+0.00686394,+0.00465269,+0.00258172,+0.00066887,-0.00107121,

   -0.00262594,-0.00398417,-0.00514293,-0.00609634,-0.00684602,-0.00739452,-0.00774847,

   -0.00791630,-0.00790940,-0.00774085,-0.00742482,-0.00697718,-0.00641613,-0.00576108,

   -0.00502957,-0.00423873,-0.00340812,-0.00255923,-0.00170217,-0.00085902,-0.00004113,

   +0.00073700,+0.00146422,+0.00213007,+0.00272649,+0.00324752,+0.00368922,+0.00405000,

   +0.00433024,+0.00453068,+0.00465046,+0.00469058,+0.00466041,+0.00457855,+0.00442491,

   +0.00423019,+0.00399201,+0.00372169,+0.00342736,+0.00311822,+0.00280309,+0.00249088,

   +0.00219089,+0.00191283,+0.00166683,+0.00146419,+0.00131867,+0.00124645,+0.00126836,

   -0.00401854

  };

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

//| Custom indicator initialization function                         |

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

int OnInit()

  {

//---- 8=8F80;870F8O ?5@5<5==KE 

   SATLSize=ArraySize(dSATLTable);

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

   min_rates_1=SATLSize+30;

   min_rates_total=min_rates_1+int(BBLength);

//--- 8=8F80;870F8O 8=48:0B>@=KE 1CD5@>2  

   IndInit(0,UpUpBuffer,INDICATOR_DATA);

   IndInit(1,UpDnBuffer,INDICATOR_DATA);

//--- 8=8F80;870F8O 8=48:0B>@>2

   PlotInit(0,NULL,min_rates_total,0);

//--- 8=8F80;870F8O 8=48:0B>@=KE 1CD5@>2  

   IndInit(2,DnUpBuffer,INDICATOR_DATA);

   IndInit(3,DnDnBuffer,INDICATOR_DATA);

//--- 8=8F80;870F8O 8=48:0B>@>2

   PlotInit(1,NULL,min_rates_total,0);

//---- ?@52@0I5=85 48=0<8G5A:8E <0AA82>2 2 8=48:0B>@=K5 1CD5@K

   SetIndexBuffer(4,ExtOpenBuffer,INDICATOR_DATA);

   SetIndexBuffer(5,ExtHighBuffer,INDICATOR_DATA);

   SetIndexBuffer(6,ExtLowBuffer,INDICATOR_DATA);

   SetIndexBuffer(7,ExtCloseBuffer,INDICATOR_DATA);

//---- ?@52@0I5=85 48=0<8G5A:>3> <0AA820 2 F25B>2>9, 8=45:A=K9 1CD5@   

   SetIndexBuffer(8,ExtColorBuffer,INDICATOR_COLOR_INDEX);

//--- 8=8F80;870F8O 8=48:0B>@>2

   PlotInit(2,NULL,min_rates_1,0);

//---- #AB0=>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 <5B:0 4;O AC1J>:>= 

   string short_name="JSatlCandle_Chl";

   IndicatorSetString(INDICATOR_SHORTNAME,short_name);

//--- 7025@H5=85 8=8F80;870F88

   return(INIT_SUCCEEDED);

  }

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

//| =8F80;870F8O 8=48:0B>@=>3> 1CD5@0                               |

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

void IndInit(int Number,double &Buffer[],ENUM_INDEXBUFFER_TYPE Type)

  {

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

   SetIndexBuffer(Number,Buffer,Type);

//---

  }

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

//| =8F80;870F8O 8=48:0B>@0                                         |

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

void PlotInit(int Number,double Empty_Value,int Draw_Begin,int nShift)

  {

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

   PlotIndexSetInteger(Number,PLOT_DRAW_BEGIN,Draw_Begin);

//--- CAB0=>2:0 7=0G5=89 8=48:0B>@0, :>B>@K5 =5 1C4CB 2848<K =0 3@0D8:5

   PlotIndexSetDouble(Number,PLOT_EMPTY_VALUE,Empty_Value);

//--- >ACI5AB2;5=85 A42830 8=48:0B>@0 ?> 3>@87>=B0;8 =0 Shift

   PlotIndexSetInteger(Number,PLOT_SHIFT,nShift);

//---

  }

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

//| 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 @0AGQB0

   if(rates_total<min_rates_total) return(RESET);

//---- >1JO2;5=85 ?5@5<5==KE A ?;020NI59 B>G:>9  

   double O,H,L,C,SATLO,SATLH,SATLL,SATLC,stdev;

//---- >1JO2;5=85 F5;KE ?5@5<5==KE 8 ?>;CG5=85 C65 ?>AG8B0==KE 10@>2

   int first;



//---- @0AG5B AB0@B>2>3> =><5@0 first 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

     {

      first=SATLSize-1;                                  // AB0@B>2K9 =><5@ 4;O @0AG5B0 2A5E 10@>2

      ExtCloseBuffer[first-1]=close[first-1];

     }

   else first=prev_calculated-1;                         // AB0@B>2K9 =><5@ 4;O @0AG5B0 =>2KE 10@>2



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

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

     {

      //---- AG8B05< A25G8

      SATLO=0.0;

      for(int index=0; index<SATLSize; index++) SATLO+=dSATLTable[index]*open[bar-index];

      O=XMAo.XMASeries(SATLSize-1,prev_calculated,rates_total,5,JPhase,JLength,SATLO,bar,false);

      SATLH=0.0;

      for(int index=0; index<SATLSize; index++) SATLH+=dSATLTable[index]*high[bar-index];

      H=XMAh.XMASeries(SATLSize-1,prev_calculated,rates_total,5,JPhase,JLength,SATLH,bar,false);

      SATLL=0.0;

      for(int index=0; index<SATLSize; index++) SATLL+=dSATLTable[index]*low[bar-index];

      L=XMAl.XMASeries(SATLSize-1,prev_calculated,rates_total,5,JPhase,JLength,SATLL,bar,false);

      SATLC=0.0;

      for(int index=0; index<SATLSize; index++) SATLC+=dSATLTable[index]*close[bar-index];

      C=XMAc.XMASeries(SATLSize-1,prev_calculated,rates_total,5,JPhase,JLength,SATLC,bar,false);

      //---- 8A?@02;O5< 7=0G5=8O ?>;CG5==KE A25G5:

      double Max=MathMax(O,C);

      Max=MathMax(Max,L);

      Max=MathMax(Max,H);

      double Min=MathMin(O,C);

      Min=MathMin(Min,L);

      Min=MathMin(Min,H);

      ExtOpenBuffer[bar]=O;

      ExtHighBuffer[bar]=Max;

      ExtLowBuffer[bar]=Min;

      ExtCloseBuffer[bar]=C;

      //---- C40;O5< =5ACI5AB2CNI85 35?K

      if(MathAbs(open[bar]-close[bar])<=Gap) ExtOpenBuffer[bar]=ExtCloseBuffer[bar-1];

      //---- :@0A8< A25G8

      if(ExtOpenBuffer[bar]<ExtCloseBuffer[bar]) ExtColorBuffer[bar]=2.0;

      else if(ExtOpenBuffer[bar]>ExtCloseBuffer[bar]) ExtColorBuffer[bar]=0.0;

      else ExtColorBuffer[bar]=1.0;

      //----           

      stdev=STDh.StdDevSeries(min_rates_1,prev_calculated,rates_total,BBLength,BandsDeviation,SATLH,ExtHighBuffer[bar],bar,false);

      UpUpBuffer[bar]=ExtHighBuffer[bar]+stdev;

      UpDnBuffer[bar]=ExtHighBuffer[bar];

      DnUpBuffer[bar]=ExtLowBuffer[bar];

      stdev=STDl.StdDevSeries(min_rates_1,prev_calculated,rates_total,BBLength,BandsDeviation,SATLL,ExtLowBuffer[bar],bar,false);

      DnDnBuffer[bar]=ExtLowBuffer[bar]-stdev;

     }

//----     

   return(rates_total);

  }

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

Comments