JFatlCandle_Chl

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

//|                                              JFatlCandle_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>@ JFatl 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,138,255',clrGray,C'117,186,255';

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

#property indicator_label3  "JFatlCandle Open;JFatlCandle High;JFatlCandle Low;JFatlCandle 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=10;                                // ?5@8>4 >;;8=465@0                                                   

input double BandsDeviation=1.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,FATLSize;

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

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

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

double dFATLTable[]=

  {

   +0.4360409450, +0.3658689069, +0.2460452079, +0.1104506886,

   -0.0054034585, -0.0760367731, -0.0933058722, -0.0670110374,

   -0.0190795053, +0.0259609206, +0.0502044896, +0.0477818607,

   +0.0249252327, -0.0047706151, -0.0272432537, -0.0338917071,

   -0.0244141482, -0.0055774838, +0.0128149838, +0.0226522218,

   +0.0208778257, +0.0100299086, -0.0036771622, -0.0136744850,

   -0.0160483392, -0.0108597376, -0.0016060704, +0.0069480557,

   +0.0110573605, +0.0095711419, +0.0040444064, -0.0023824623,

   -0.0067093714, -0.0072003400, -0.0047717710, +0.0005541115,

   +0.0007860160, +0.0130129076, +0.0040364019

  };

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

//| Custom indicator initialization function                         |

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

int OnInit()

  {

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

   min_rates_1=39+30;

   min_rates_total=min_rates_1+int(BBLength);

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

   FATLSize=ArraySize(dFATLTable);

//--- 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="JFatlCandle_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,FATLO,FATLH,FATLL,FATLC,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=FATLSize-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

      FATLO=0.0;

      for(int index=0; index<FATLSize; index++) FATLO+=dFATLTable[index]*open[bar-index];

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

      FATLH=0.0;

      for(int index=0; index<FATLSize; index++) FATLH+=dFATLTable[index]*high[bar-index];

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

      FATLL=0.0;

      for(int index=0; index<FATLSize; index++) FATLL+=dFATLTable[index]*low[bar-index];

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

      FATLC=0.0;

      for(int index=0; index<FATLSize; index++) FATLC+=dFATLTable[index]*close[bar-index];

      C=XMAc.XMASeries(FATLSize-1,prev_calculated,rates_total,5,JPhase,JLength,FATLC,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,FATLH,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,FATLL,ExtLowBuffer[bar],bar,false);

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

     }

//----     

   return(rates_total);

  }

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

Comments