AutoTrendChannel

Author: Copyright � 2006, MetaQuotes Software Corp.
AutoTrendChannel
0 Views
0 Downloads
0 Favorites
AutoTrendChannel
//+------------------------------------------------------------------+
//|                                             AutoTrendChannel.mq4 |
//|                      Copyright © 2006, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2006, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"


/*********************************************************************
* Author: Muhammad Hamizi Jaminan (hymns)
* Original Author: ANG3110@latchess.com
*
* Date: December 14, 2006
* Custom Indicator: AutoTrendChannel.mq4
* Version: 1.0.1
* Description: Trend Detector
*
* Change Logs
* Version 1.0.1
* - Rewriting Code. Multi Color. 
*   Other function will add next release :)
*
* Version ang_AutoCh_HL-v1
* - Release by ANG3110@latchess.com
**********************************************************************/

#property indicator_chart_window

extern int Hours = 24;
extern color col_bull = Blue;
extern color col_mid = SkyBlue;
extern color col_bear = Red;

//------------------
double lr,lr0,lrp;
double sx,sy,sxy,sx2,aa,bb;
int p,fs;
int f,f0,f1;
double dh,dl,dh_1,dl_1,dh_2,dl_2;
int ai_1,ai_2,bi_1,bi_2; 
double hai,lai,dhi,dli,dhm,dlm,ha0,hap,la0,lap;
double price_p1,price_p0,price_p2,price_01,price_00,price_02;
int p1,p0,p2,fp;

string sName = "AutoTrendChannel";

//*****************************************
int init() {
   p = Hours*60/Period();
   if (fs==0) {
       fs = 1;
   }
   return(0);
}

//*******************************
int deinit() {
   ObjectDelete("1"+sName);
   ObjectDelete("0"+sName);
   ObjectDelete("2"+sName); 
}

//*******************************
int start() {
   int i,n;
   //------------------------------------------------------------------------------
   if (f==1) { 
      p1=iBarShift(Symbol(),Period(),ObjectGet("1"+sName,OBJPROP_TIME1));
      p0=iBarShift(Symbol(),Period(),ObjectGet("0"+sName,OBJPROP_TIME1));
      p2=iBarShift(Symbol(),Period(),ObjectGet("2"+sName,OBJPROP_TIME1));
      if (fp==0 && p!=p1) {p=p1; fp=1;}
      if (fp==0 && p!=p0) {p=p0; fp=1;}
      if (fp==0 && p!=p2) {p=p2; fp=1;}
   }

   //====================================================
   sx=0; sy=0; sxy=0; sx2=0; 
   for (n=0; n<=p; n++) {
      sx+=n; sy+=Close[n]; 
      sxy+=n*Close[n]; 
      sx2+=MathPow(n,2);
   }
   aa=(sx*sy-(p+1)*sxy)/(MathPow(sx,2)-(p+1)*sx2); 
   bb=(sy-aa*sx)/(p+1);

   //----------------------------------------------------
   for (i=0; i<=p; i++) {
      lr=bb+aa*i;
      dh=High[i]-lr; 
      dl=Low[i]-lr;
      //----------------------------------------------------
      if (i<p/2) {
         if (i==0) {
            dh_1=0.0; 
            dl_1=0.0; 
            ai_1=i; 
            bi_1=i;
         } 
         if (dh>=dh_1) {
            dh_1=dh; 
            ai_1=i;
         }
         if (dl<=dl_1) {
            dl_1=dl; 
            bi_1=i;
         }
      }  
      //----------------------------------------------------
      if (i>=p/2) {
         if (i==p/2) {
            dh_2=0.0; 
            dl_2=0.0; 
            ai_2=i; 
            bi_2=i;
         } 
         if (dh>=dh_2) {
            dh_2=dh; 
            ai_2=i;
         }
         if (dl<=dl_2) {
            dl_2=dl; 
            bi_2=i;
         }
      }
   } 
   //-------------------------------------
   lr0=bb; 
   lrp=bb+aa*(i+p);
   //===================================================
   if (MathAbs(ai_1-ai_2)>MathAbs(bi_1-bi_2)) f=1;
   if (MathAbs(ai_1-ai_2)<MathAbs(bi_1-bi_2)) f=2;
   if (MathAbs(ai_1-ai_2)==MathAbs(bi_1-bi_2)) {
      if (MathAbs(dh_1-dh_2)<MathAbs(dl_1-dl_2)) f=1; 
      if (MathAbs(dh_1-dh_2)>=MathAbs(dl_1-dl_2)) f=2;
   } 
   //=================================================
   if (f==1) {
      for (n=0; n<=20; n++) { 
         f1=0;
         for (i=0; i<=p; i++) {
            hai=High[ai_1]*(i-ai_2)/(ai_1-ai_2)+High[ai_2]*(i-ai_1)/(ai_2-ai_1);  
            if (i==0 || i==p/2) dhm=0.0; 
            if (High[i]-hai>dhm && i<p/2) {
               ai_1=i; 
               f1=1;
            }
            if (High[i]-hai>dhm && i>=p/2) {
               ai_2=i; 
               f1=1;
            } 
         }
         if (f==0) break;
      } 
      //----------------------------
      for (i=0; i<=p; i++) {
         hai=High[ai_1]*(i-ai_2)/(ai_1-ai_2)+High[ai_2]*(i-ai_1)/(ai_2-ai_1);  
         dli=Low[i]-hai; 
         if (i==0) dlm=0.0; 
         if (dli<dlm) dlm=dli;
      }   
      ha0=High[ai_1]*(0-ai_2)/(ai_1-ai_2)+High[ai_2]*(0-ai_1)/(ai_2-ai_1); 
      hap=High[ai_1]*(p-ai_2)/(ai_1-ai_2)+High[ai_2]*(p-ai_1)/(ai_2-ai_1);
      //----------------------------
      price_p1=hap;
      price_p0=hap+dlm/2;
      price_p2=hap+dlm;
      price_01=ha0;
      price_00=ha0+dlm/2;
      price_02=ha0+dlm;
   }
   //=================================================
   if (f==2) {
      for (n=0; n<=20; n++) { 
         f1=0;
         for (i=0; i<=p; i++) {
            lai=Low[bi_1]*(i-bi_2)/(bi_1-bi_2)+Low[bi_2]*(i-bi_1)/(bi_2-bi_1); 
            if (i==0 || i==p/2) dlm=0.0; 
            if (Low[i]-lai<dlm && i<p/2) {
               bi_1=i; 
               f1=1;
            }
            if (Low[i]-lai<dlm && i>=p/2) {
               bi_2=i; 
               f1=1;
            }
         } 
         if (f==0) break;
      }
      //----------------------------
      for (i=0; i<=p; i++) {
         lai=Low[bi_1]*(i-bi_2)/(bi_1-bi_2)+Low[bi_2]*(i-bi_1)/(bi_2-bi_1); 
         dhi=High[i]-lai;
         if (i==0) dhm=0.0; 
         if (dhi>dhm) dhm=dhi;
      }   
      la0=Low[bi_1]*(0-bi_2)/(bi_1-bi_2)+Low[bi_2]*(0-bi_1)/(bi_2-bi_1); 
      lap=Low[bi_1]*(p-bi_2)/(bi_1-bi_2)+Low[bi_2]*(p-bi_1)/(bi_2-bi_1);
      //----------------------------------------------------------------
      price_p1=lap;
      price_p0=lap+dhm/2;
      price_p2=lap+dhm;
      price_01=la0;
      price_00=la0+dhm/2;
      price_02=la0+dhm;
   }
   //===================================================================================
   ObjectCreate("1"+sName,2, 0,Time[p],price_p1,Time[0],price_01);
   ObjectCreate("0"+sName,2, 0,Time[p],price_p0,Time[0],price_00);
   ObjectCreate("2"+sName,2, 0,Time[p],price_p2,Time[0],price_02);
   //-----------------------------------------------------------------
   ObjectSet("1"+sName,OBJPROP_COLOR,col_bear);
   ObjectSet("0"+sName,OBJPROP_COLOR,col_mid);
   ObjectSet("0"+sName,OBJPROP_STYLE,STYLE_DOT);
   ObjectSet("2"+sName,OBJPROP_COLOR,col_bull);
   //---------------------------------------------
   ObjectSet("1"+sName,OBJPROP_TIME1,Time[p]);
   ObjectSet("1"+sName,OBJPROP_PRICE1,price_p1);
   ObjectSet("1"+sName,OBJPROP_TIME2,Time[0]);
   ObjectSet("1"+sName,OBJPROP_PRICE2,price_01);
   ObjectSet("0"+sName,OBJPROP_TIME1,Time[p]);
   ObjectSet("0"+sName,OBJPROP_PRICE1,price_p0);
   ObjectSet("0"+sName,OBJPROP_TIME2,Time[0]);
   ObjectSet("0"+sName,OBJPROP_PRICE2,price_00);
   ObjectSet("2"+sName,OBJPROP_TIME1,Time[p]);
   ObjectSet("2"+sName,OBJPROP_PRICE1,price_p2);
   ObjectSet("2"+sName,OBJPROP_TIME2,Time[0]);
   ObjectSet("2"+sName,OBJPROP_PRICE2,price_02);
   //==================================================================
   f=1; 
   p1=p; 
   p0=p; 
   p2=p; 
   fp=0; 
   //*************************************************************************************
   ObjectsRedraw();
   return(0);
}
//=====================================================================================

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