Author: Copyright © 2005, Nick Bilak
0 Views
0 Downloads
0 Favorites
ttm-trend
ÿþ//+------------------------------------------------------------------+ 

//|                                                    ttm-trend.mq5 | 

//|                                     Copyright © 2005, Nick Bilak | 

//|                                              beluck[AT]gmail.com | 

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

#property copyright "Copyright © 2005, Nick Bilak"

#property link "beluck[AT]gmail.com" 

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

//---- :>;8G5AB2> 8=48:0B>@=KE 1CD5@>2 3

#property indicator_buffers 3 

//---- 8A?>;L7>20=> 2A53> >4=> 3@0D8G5A:>5 ?>AB@>5=85

#property indicator_plots   1

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

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

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

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

#property indicator_type1 DRAW_COLOR_HISTOGRAM2

//---- 2 :0G5AB25 F25B>2 G5BK@QEF25B=>9 38AB>3@0<<K 8A?>;L7>20=K

#property indicator_color1 clrDeepPink,clrPurple,clrGray,clrTeal,clrLime

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

#property indicator_style1 STYLE_SOLID

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

#property indicator_width1 2

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

#property indicator_label1 "ttm-trend"

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

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

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

//|  %+  " + "      |

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

input uint CompBars=6;

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

//---- >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 UpIndBuffer[],DnIndBuffer[],ColorIndBuffer[];

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

int min_rates_total;

//---- >1JO2;5=85 3;>10;L=KE ?5@5<5==KE

int Count[];

double haOpen[],haClose[];

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

//|  5@5AG5B ?>78F88 A0<>3> =>2>3> M;5<5=B0 2 <0AA825               |

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

void Recount_ArrayZeroPos(int &CoArr[],// >72@0B ?> AAK;:5 =><5@0 B5:CI53> 7=0G5=8O F5=>2>3> @O40

                          int Size)

  {

//----

   int numb,Max1,Max2;

   static int count=1;



   Max2=Size;

   Max1=Max2-1;



   count--;

   if(count<0) count=Max1;



   for(int iii=0; iii<Max2; iii++)

     {

      numb=iii+count;

      if(numb>Max1) numb-=Max2;

      CoArr[iii]=numb;

     }

//----

  }

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

//| ttm-trend indicator initialization function                      | 

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

int OnInit()

  {

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

   min_rates_total=int(CompBars+1);



//---- @0A?@545;5=85 ?0<OB8 ?>4 <0AA82K ?5@5<5==KE  

   ArrayResize(Count,CompBars);

   ArrayResize(haOpen,CompBars);

   ArrayResize(haClose,CompBars);

//---- >1=C;8< A>45@68<>5 <0AA82>2   

   ArrayInitialize(Count,0);

   ArrayInitialize(haOpen,0.0);

   ArrayInitialize(haClose,0.0);



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

   SetIndexBuffer(0,UpIndBuffer,INDICATOR_DATA);

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

   ArraySetAsSeries(UpIndBuffer,true);



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

   SetIndexBuffer(1,DnIndBuffer,INDICATOR_DATA);

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

   ArraySetAsSeries(DnIndBuffer,true);



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

   SetIndexBuffer(2,ColorIndBuffer,INDICATOR_COLOR_INDEX);

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

   ArraySetAsSeries(ColorIndBuffer,true);



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

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



//--- 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,"ttm-trend");

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

   IndicatorSetInteger(INDICATOR_DIGITS,_Digits);



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

   return(INIT_SUCCEEDED);

  }

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

//| ttm-trend 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=8O ;>:0;L=KE ?5@5<5==KE

   int limit,bar;



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

   ArraySetAsSeries(Open,true);

   ArraySetAsSeries(Low,true);

   ArraySetAsSeries(High,true);

   ArraySetAsSeries(Close,true);



//---- @0AG5B 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-1; // AB0@B>2K9 =><5@ 4;O @0AG5B0 2A5E 10@>2 

      int barc=limit+int(CompBars-1);

      haOpen[Count[0]]=Open[barc];

      haClose[Count[0]]=(Open[barc]+High[barc]+Low[barc]+Close[barc])/4.0;

      Recount_ArrayZeroPos(Count,CompBars);



      for(int index=int(CompBars-1)-1; index>=0 && !IsStopped(); index--)

        {

         int barl=limit+index;

         haOpen[Count[0]]=(haOpen[Count[1]]+haClose[Count[1]])/2.0;

         haClose[Count[0]]=(Open[barl]+High[barl]+Low[barl]+Close[barl])/4.0;

         Recount_ArrayZeroPos(Count,CompBars);

        }

     }

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



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

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

     {

      UpIndBuffer[bar]=High[bar];

      DnIndBuffer[bar]=Low[bar];

     }



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

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

     {

      haOpen[Count[0]]=(haOpen[Count[1]]+haClose[Count[1]])/2.0;

      haClose[Count[0]]=(Open[bar]+High[bar]+Low[bar]+Close[bar])/4.0;

      //----

      int clr=2;

      if(haClose[Count[0]]>haOpen[Count[0]])

        {

         if(Open[bar]<=Close[bar]) clr=4;

         if(Open[bar]>Close[bar]) clr=3;

        }



      if(haClose[Count[0]]<haOpen[Count[0]])

        {

         if(Open[bar]>Close[bar]) clr=0;

         if(Open[bar]<=Close[bar]) clr=1;

        }



      for(int index=1; index<int(CompBars); index++)

        {

         double HH=MathMax(haOpen[Count[index]],haClose[Count[index]]);

         double LL=MathMin(haOpen[Count[index]],haClose[Count[index]]);



         if(haOpen[Count[0]]<=HH && haOpen[Count[0]]>=LL

            && haClose[Count[0]]<=HH && haClose[Count[0]]>=LL)

           {

            clr=int(ColorIndBuffer[bar+index]);

            break;

           }

        }



      ColorIndBuffer[bar]=clr;

      if(bar) Recount_ArrayZeroPos(Count,CompBars);

     }

//----     

//----     

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