//+------------------------------------------------------------------+
//| AutoTrendChannel.mq4 |
//| Copyright © 2006, MetaQuotes Software Corp. |
//|
http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2006, MetaQuotes Software Corp."
#property link "http://www.metaquotes.net"
#property link "http://www.ultimaforex.com"
/*********************************************************************
* Author: Muhammad Hamizi Jaminan (hymns)
* Original Author:
[email protected]
*
* 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
[email protected]
* distributed for free by
http://www.ultimaforex.com
**********************************************************************/
#property indicator_chart_window
extern int Hours = 240;
extern color col_bull = DodgerBlue;
extern color col_mid = Black;
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("sellstop2");
ObjectDelete("0"+sName);
ObjectDelete("buystop2");
}
//*******************************
int start() {
int i,n;
//------------------------------------------------------------------------------
if (f==1) {
p1=iBarShift(Symbol(),Period(),ObjectGet("sellstop2",OBJPROP_TIME1));
p0=iBarShift(Symbol(),Period(),ObjectGet("0"+sName,OBJPROP_TIME1));
p2=iBarShift(Symbol(),Period(),ObjectGet("buystop2",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
-lr;
dl=Low-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-hai>dhm && i<p/2) {
ai_1=i;
f1=1;
}
if (High-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-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-lai<dlm && i<p/2) {
bi_1=i;
f1=1;
}
if (Low-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-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("sellstop2",2, 0,Time[p],price_p1,Time[0],price_01);
ObjectCreate("0"+sName,2, 0,Time[p],price_p0,Time[0],price_00);
ObjectCreate("buystop2",2, 0,Time[p],price_p2,Time[0],price_02);
//-----------------------------------------------------------------
ObjectSet("sellstop2",OBJPROP_COLOR,col_bear);
ObjectSet("0"+sName,OBJPROP_COLOR,col_mid);
ObjectSet("0"+sName,OBJPROP_STYLE,STYLE_DOT);
ObjectSet("buystop2",OBJPROP_COLOR,col_bull);
//---------------------------------------------
ObjectSet("sellstop2",OBJPROP_TIME1,Time[p]);
ObjectSet("sellstop2",OBJPROP_PRICE1,price_p1);
ObjectSet("sellstop2",OBJPROP_TIME2,Time[0]);
ObjectSet("sellstop2",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("buystop2",OBJPROP_TIME1,Time[p]);
ObjectSet("buystop2",OBJPROP_PRICE1,price_p2);
ObjectSet("buystop2",OBJPROP_TIME2,Time[0]);
ObjectSet("buystop2",OBJPROP_PRICE2,price_02);
//==================================================================
f=1;
p1=p;
p0=p;
p2=p;
fp=0;
//*************************************************************************************
ObjectsRedraw();
return(0);
}
//=====================================================================================
MINTA BANTUAN ,,,, DI ATAS ADALAH DARI INDI AutoTrendChannel.mq4 YANG DIUBAH PADA NAME LINE BUYSTOP DAN SELLSTOP.
SAYA GUNA INDI TERESEBUT DENGAN EA TRENDLINE
MASAALAHNYA, KEKADANG BUY STOP DAN SELLSTOP TERBALIK.~X(