i-SpectrAnalysis_ADX

Author: Copyright © 2006, klot
Indicators Used
Movement directional index
0 Views
0 Downloads
0 Favorites
i-SpectrAnalysis_ADX
ÿþ//+------------------------------------------------------------------+ 

//|                                         i-SpectrAnalysis_ADX.mq5 | 

//|                                           Copyright © 2006, klot | 

//|                                                     klot@mail.ru | 

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

#property copyright "Copyright © 2006, klot" 

#property link      "klot@mail.ru" 

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

#property version   "1.00" 

//---- >B@8A>2:0 8=48:0B>@0 2 >B45;L=>< >:=5

#property indicator_separate_window

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

#property indicator_buffers 5

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

#property indicator_plots   3

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

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

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

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

#property indicator_type1   DRAW_FILLING

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

#property indicator_color1  clrAqua,clrDeepPink

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

#property indicator_label1  "i-SpectrAnalysis_Di"

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

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

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

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

#property indicator_type2   DRAW_LINE

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

#property indicator_color2  clrGray

//---- ;8=8O 8=48:0B>@0 2 - =5?@5@K2=0O :@820O

#property indicator_style2  STYLE_SOLID

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

#property indicator_width2  1

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

#property indicator_label2  "i-SpectrAnalysis_ADX Line"

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

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

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

//---- >B@8A>2:0 8=48:0B>@0 3 2 2845 7=0G:0

#property indicator_type3   DRAW_COLOR_ARROW

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

#property indicator_color3  clrGray,clrBlue,clrMagenta,clrRed

//---- ;8=8O 8=48:0B>@0 3 - =5?@5@K2=0O :@820O

#property indicator_style3  STYLE_SOLID

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

#property indicator_width3  3

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

#property indicator_label3  "i-SpectrAnalysis_ADX"

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

//| 0@0<5B@K >B>1@065=8O 3>@87>=B0;L=KE C@>2=59 | 

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

#property indicator_level1 70.0 

#property indicator_level2 50.0 

#property indicator_level3 30.0 

#property indicator_levelcolor clrGray 

#property indicator_levelstyle STYLE_DASHDOTDOT

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

//|  >1JO2;5=85 ?5@5G8A;5=89                     |

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

enum ENUM_WIDTH //"8? :>=AB0=BK

  {

   w_1=0,  //1

   w_2,    //2

   w_3,    //3

   w_4,    //4

   w_5     //5

  };

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

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

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

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

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

//| ?8A0=85 181;8>B5:8 dt_FFT.mqh               | 

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

#include <dt_FFT.mqh> 

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

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

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

input uint ADXPeriod=14;                          // averaging period 

input uint N = 7;                                 // number Length 

input uint SS = 20;                               // smoothing factor 

input int Shift=0;                                // The shift indicator in the horizontal bars

input uint ExtraHighLevel=60;                     // C@>25=L <0:A8<0;L=>3> B@5=40

input uint HighLevel=40;                          // C@>25=L A8;L=>3> B@5=40

input uint LowLevel=20;                           // C@>25=L A;01>3> B@5=40

input ENUM_LINE_STYLE LevelStyle=STYLE_DASHDOTDOT;// AB8;L ;8=89 C@>2=59

input color LevelColor=clrBlue;                   // F25B C@>2=59

input ENUM_WIDTH LevelWidth=w_1;                  // B>;I8=0 C@>2=59

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

//---- >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 DiPlusBuffer[];

double DiMinusBuffer[];

double ADXBuffer[];

double ADXLineBuffer[];

double ColorADXBuffer[];

//--- 

int M,tnn1,ss;

//--- 

double aa[];

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

int min_rates_total;

//--- >1JO2;5=85 F5;>G8A;5==KE ?5@5<5==KE 4;O E5=4;>2 8=48:0B>@>2 

int Ind_Handle;

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

//| i-SpectrAnalysis_ADX indicator initialization function           | 

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

int OnInit()

  {

//--- 8=8F80;870F8O ?5@5<5==KE =0G0;0 >BAG5B0 40==KE 

   tnn1=int(MathPow(2,N));

   M=ArrayResize(aa,tnn1+1);

   ArraySetAsSeries(aa,true);

   ss=int(MathMin(SS,M));

   min_rates_total=int(M);

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

   Ind_Handle=iADX(Symbol(),PERIOD_CURRENT,ADXPeriod);

   if(Ind_Handle==INVALID_HANDLE)

     {

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

      return(INIT_FAILED);

     }

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

   SetIndexBuffer(0,DiPlusBuffer,INDICATOR_DATA);

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

   SetIndexBuffer(1,DiMinusBuffer,INDICATOR_DATA);

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

   SetIndexBuffer(2,ADXLineBuffer,INDICATOR_DATA);

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

   SetIndexBuffer(3,ADXBuffer,INDICATOR_DATA);

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

   SetIndexBuffer(4,ColorADXBuffer,INDICATOR_COLOR_INDEX);



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

   PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,min_rates_total);

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

   PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,EMPTY_VALUE);

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

   PlotIndexSetInteger(0,PLOT_SHIFT,Shift);



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

   PlotIndexSetInteger(1,PLOT_DRAW_BEGIN,min_rates_total);

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

   PlotIndexSetDouble(1,PLOT_EMPTY_VALUE,EMPTY_VALUE);

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

   PlotIndexSetInteger(1,PLOT_SHIFT,Shift);



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

   PlotIndexSetInteger(2,PLOT_DRAW_BEGIN,min_rates_total);

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

   PlotIndexSetDouble(2,PLOT_EMPTY_VALUE,EMPTY_VALUE);

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

   PlotIndexSetInteger(2,PLOT_SHIFT,Shift);

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

   ArraySetAsSeries(DiPlusBuffer,true);

   ArraySetAsSeries(DiMinusBuffer,true);

   ArraySetAsSeries(ADXLineBuffer,true);

   ArraySetAsSeries(ADXBuffer,true);

   ArraySetAsSeries(ColorADXBuffer,true);

//--- A>740=85 8<5=8 4;O >B>1@065=8O 2 >B45;L=>< ?>4>:=5 8 2> 2A?;K20NI59 ?>4A:07:5 

   IndicatorSetString(INDICATOR_SHORTNAME,"i-SpectrAnalysis_ADX");

//--- >?@545;5=85 B>G=>AB8 >B>1@065=8O 7=0G5=89 8=48:0B>@0 

   IndicatorSetInteger(INDICATOR_DIGITS,0);

//---- ?0@0<5B@K >B@8A>2:8 C@>2=59 8=48:0B>@0

   IndicatorSetInteger(INDICATOR_LEVELS,3);

   IndicatorSetDouble(INDICATOR_LEVELVALUE,0,ExtraHighLevel);

   IndicatorSetDouble(INDICATOR_LEVELVALUE,1,HighLevel);

   IndicatorSetDouble(INDICATOR_LEVELVALUE,2,LowLevel);

   IndicatorSetInteger(INDICATOR_LEVELCOLOR,0,LevelColor);

   IndicatorSetInteger(INDICATOR_LEVELSTYLE,0,LevelStyle);

   IndicatorSetInteger(INDICATOR_LEVELWIDTH,0,LevelWidth);

   IndicatorSetInteger(INDICATOR_LEVELCOLOR,1,LevelColor);

   IndicatorSetInteger(INDICATOR_LEVELSTYLE,1,LevelStyle);

   IndicatorSetInteger(INDICATOR_LEVELWIDTH,1,LevelWidth);

   IndicatorSetInteger(INDICATOR_LEVELCOLOR,2,LevelColor);

   IndicatorSetInteger(INDICATOR_LEVELSTYLE,2,LevelStyle);

   IndicatorSetInteger(INDICATOR_LEVELWIDTH,2,LevelWidth);

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

   return(INIT_SUCCEEDED);

  }

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

//| i-SpectrAnalysis_ADX iteration function                          | 

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

int OnCalculate(const int rates_total,    // :>;8G5AB2> 8AB>@88 2 10@0E =0 B5:CI5< B8:5 

                const int prev_calculated,// :>;8G5AB2> 8AB>@88 2 10@0E =0 ?@54K4CI5< B8:5 

                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(rates_total<min_rates_total || BarsCalculated(Ind_Handle)<rates_total) return(RESET);

   int end=M-1;

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

   int drawbegin=rates_total-end;

   PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,drawbegin);

   PlotIndexSetInteger(1,PLOT_DRAW_BEGIN,drawbegin);

   PlotIndexSetInteger(2,PLOT_DRAW_BEGIN,drawbegin);



//--- 5;05< @0AGQB ADX

   if(CopyBuffer(Ind_Handle,0,0,M,aa)<=0) return(RESET);  

   fastcosinetransform(aa,tnn1,false);

   for(int kkk=0; kkk<=end && !IsStopped(); kkk++) if(kkk>=ss) aa[kkk]=0.0;

   fastcosinetransform(aa,tnn1,true);

   for(int rrr=0; rrr<=end && !IsStopped(); rrr++) ADXLineBuffer[rrr]=ADXBuffer[rrr]=aa[rrr];

//---   



//--- 5;05< @0AGQB DX+

   if(CopyBuffer(Ind_Handle,1,0,M,aa)<=0) return(RESET);

   fastcosinetransform(aa,tnn1,false);

   for(int kkk=0; kkk<=end && !IsStopped(); kkk++) if(kkk>=ss) aa[kkk]=0.0;

   fastcosinetransform(aa,tnn1,true);

   for(int rrr=0; rrr<=end && !IsStopped(); rrr++) DiPlusBuffer[rrr]=aa[rrr];

   

//--- 5;05< @0AGQB DX-

   if(CopyBuffer(Ind_Handle,2,0,M,aa)<=0) return(RESET);

   fastcosinetransform(aa,tnn1,false);

   for(int kkk=0; kkk<=end && !IsStopped(); kkk++) if(kkk>=ss) aa[kkk]=0.0;

   fastcosinetransform(aa,tnn1,true);

   for(int rrr=0; rrr<=end && !IsStopped(); rrr++) DiMinusBuffer[rrr]=aa[rrr];

     

//---- A=>2=>9 F8:; @0A:@0A:8 A83=0;L=>9 ;8=88

   for(int rrr=0; rrr<=end && !IsStopped(); rrr++)

     {

      int clr=1;

      if(ADXBuffer[rrr]>ExtraHighLevel) clr=3;

      else if(ADXBuffer[rrr]>HighLevel) clr=2;

      else if(ADXBuffer[rrr]<LowLevel)  clr=0;

      ColorADXBuffer[rrr]=clr;

     }

//---   





  

   return(rates_total);

  }

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

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 ---