Author: Copyright © 2009, KurlFX
Indicators Used
Movement directional indexIndicator of the average true range
0 Views
0 Downloads
0 Favorites
TASSKlT
ÿþ//+------------------------------------------------------------------+

//|                                                      TASSKlT.mq5 |

//|                                         Copyright © 2009, KurlFX |

//|                                                                  |

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

#property description "@>AB>9 287C0;870B>@ B@5=40"

//--- 02B>@AB2> 8=48:0B>@0

#property copyright "Copyright © 2009, KurlFX"

//--- AAK;:0 =0 A09B 02B>@0

#property link      ""

//--- =><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=> H5ABL 1CD5@>2

#property indicator_buffers 6

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

#property indicator_plots   4

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

//|  0@0<5B@K >B@8A>2:8 38AB>3@0<<K             |

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

//--- >B@8A>2:0 8=48:0B>@0 1 2 2845 38AB>3@0<<K

#property indicator_type1   DRAW_COLOR_HISTOGRAM2

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

#property indicator_color1  clrMagenta,clrLimeGreen

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

#property indicator_width1  4

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

#property indicator_label1  "TASSKlT Dn"



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

//|  0@0<5B@K >B@8A>2:8 <54256L53> 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 <54256L59 ;8=88 8=48:0B>@0 8A?>;L7>20= @>7>2K9 F25B

#property indicator_color2  clrMagenta

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

#property indicator_width2  4

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

#property indicator_label2  "TASSKlT Sell"

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

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

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

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

#property indicator_type3   DRAW_ARROW

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

#property indicator_color3  clrLime

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

#property indicator_width3  4

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

#property indicator_label3 "TASSKlT Buy"

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

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

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

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

#property indicator_type4 DRAW_LINE

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

#property indicator_color4 clrDarkOrange

//---- ;8=8O 8=48:0B>@0 - A?;>H=0O

#property indicator_style4  STYLE_SOLID

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

#property indicator_width4  2

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

#property indicator_label4  "TASSKlT End"

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

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

#define Alvl   35.0

#define Alvl2  30.0

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

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

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

input int ADXperiod1 = 10;

input int ADXperiod2 = 14;

input int ADXperiod3 = 20;

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

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

double To[];

double Tc[];

double ColorT[];

double Up[];

double Dn[];

double Ex[];

//---

int MxP,MnP,MdP;

int ADX1_Handle,ADX2_Handle,ADX3_Handle,ATR_Handle,min_rates_total;

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

//| Custom indicator initialization function                         |

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

int OnInit()

  {

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

   MxP=MathMax(MathMax(ADXperiod1,ADXperiod2),ADXperiod3);

   MnP=MathMin(MathMin(ADXperiod1,ADXperiod2),ADXperiod3);

   if(MxP==ADXperiod1) MdP=MathMax(ADXperiod2,ADXperiod3);

   else if(MxP==ADXperiod2) MdP=MathMax(ADXperiod1,ADXperiod3);

   else MdP=MathMax(ADXperiod2,ADXperiod1);

   int ATR_Period=15;

   min_rates_total=int(MathMax(MxP,ATR_Period))+2;

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

   ADX1_Handle=iADX(NULL,0,MnP);

   if(ADX1_Handle==INVALID_HANDLE)

     {

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

      return(INIT_FAILED);

     }

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

   ADX2_Handle=iADX(NULL,0,MdP);

   if(ADX2_Handle==INVALID_HANDLE)

     {

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

      return(INIT_FAILED);

     }

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

   ADX3_Handle=iADX(NULL,0,MxP);

   if(ADX3_Handle==INVALID_HANDLE)

     {

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

      return(INIT_FAILED);

     }

//--- ?>;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");

      return(INIT_FAILED);

     }

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

   SetIndexBuffer(0,To,INDICATOR_DATA);

//--- >ACI5AB2;5=85 A42830 =0G0;0 >BAG5B0 >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);

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

   ArraySetAsSeries(To,true);



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

   SetIndexBuffer(1,Tc,INDICATOR_DATA);

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

   ArraySetAsSeries(Tc,true);

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

   SetIndexBuffer(2,ColorT,INDICATOR_COLOR_INDEX);

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

   ArraySetAsSeries(ColorT,true);



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

   SetIndexBuffer(3,Dn,INDICATOR_DATA);

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

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

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

   PlotIndexSetInteger(1,PLOT_ARROW,226);

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

   ArraySetAsSeries(Dn,true);



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

   SetIndexBuffer(4,Up,INDICATOR_DATA);

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

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

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

   PlotIndexSetInteger(2,PLOT_ARROW,225);

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

   ArraySetAsSeries(Up,true);



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

   SetIndexBuffer(5,Ex,INDICATOR_DATA);

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

   PlotIndexSetInteger(3,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(3,PLOT_EMPTY_VALUE,EMPTY_VALUE);

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

   ArraySetAsSeries(Ex,true);



//--- #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 ?>4>:>= 

   string short_name="TASSKlT";

   IndicatorSetString(INDICATOR_SHORTNAME,short_name);

//---   

   return(INIT_SUCCEEDED);

  }

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

//| 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(ADX1_Handle)<rates_total

      || BarsCalculated(ADX2_Handle)<rates_total

      || BarsCalculated(ADX3_Handle)<rates_total

      || rates_total<min_rates_total)

      return(RESET);



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

   int to_copy,limit,bar;

   double ADX1[],PADX1[],MADX1[],ADX2[],ADX3[],ATR[];



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

     {

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

     }

   else

     {

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

     }

   to_copy=limit+1;

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

   if(CopyBuffer(ATR_Handle,0,0,to_copy,ATR)<=0) return(RESET);

   to_copy++;

   if(CopyBuffer(ADX1_Handle,MAIN_LINE,0,to_copy,ADX1)<=0) return(RESET);

   if(CopyBuffer(ADX2_Handle,MAIN_LINE,0,to_copy,ADX2)<=0) return(RESET);

   if(CopyBuffer(ADX3_Handle,MAIN_LINE,0,to_copy,ADX3)<=0) return(RESET);

   if(CopyBuffer(ADX1_Handle,PLUSDI_LINE,0,to_copy,PADX1)<=0) return(RESET);

   if(CopyBuffer(ADX1_Handle,MINUSDI_LINE,0,to_copy,MADX1)<=0) return(RESET);



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

   ArraySetAsSeries(ADX1,true);

   ArraySetAsSeries(PADX1,true);

   ArraySetAsSeries(MADX1,true);

   ArraySetAsSeries(ADX2,true);

   ArraySetAsSeries(ADX3,true);

   ArraySetAsSeries(ATR,true);

   ArraySetAsSeries(open,true);

   ArraySetAsSeries(high,true);

   ArraySetAsSeries(low,true);

   ArraySetAsSeries(close,true);



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

   for(bar=limit; bar>=0 && !IsStopped(); bar--)

     {

      bool f1=false,f2=false,f3=false;

      To[bar]=EMPTY_VALUE;

      Tc[bar]=EMPTY_VALUE;

      Up[bar]=EMPTY_VALUE;

      Dn[bar]=EMPTY_VALUE;

      Ex[bar]=EMPTY_VALUE;

      if(ADX1[bar+1]<ADX1[bar])f1=true;

      if(ADX2[bar+1]<ADX2[bar])f2=true;

      if(ADX3[bar+1]<ADX3[bar])f3=true;

      if(f1 && f2 && f3 && ADX1[bar]>Alvl && ADX2[bar]>Alvl2)

        {

         double di=PADX1[bar]-MADX1[bar];

         double hi=MathMax(open[bar],close[bar]);

         double lo=MathMin(open[bar],close[bar]);

         double op=open[bar];

         if(di>0)

           {

            To[bar]=lo;

            Tc[bar]=hi;

            ColorT[bar]=1;

            if(To[bar+1]==EMPTY_VALUE) Up[bar]=low[bar]-ATR[bar]*3/8;

           }

         else

           {

            To[bar]=hi;

            Tc[bar]=lo;

            ColorT[bar]=0;

            if(To[bar+1]==EMPTY_VALUE) Dn[bar]=high[bar]+ATR[bar]*3/8;

           }

        }

      else

        {

         if(To[bar+1]!=EMPTY_VALUE)Ex[bar]=close[bar+1];

         else Ex[bar]=Ex[bar+1];

        }

     }

//---     

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