//+------------------------------------------------------------------+ //| ang_AutoCh_HL-v1.mq4 | //| umbenannt in Autotrendlinien.mq4 | //| Copyright © 2006, ANG3110@latchess.com | //+------------------------------------------------------------------+ #property copyright "ANG3110@latchess.com" //---------------------------------- #property indicator_chart_window //---------------------------------- extern int Hours = 10; extern color col = Blue; //------------------ double lr, lr0, lrp; double sx, sy, sxy, sx2, aa, bb; int p, sName, 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; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { p = Hours*60 / Period(); if(fs == 0) { sName = CurTime(); fs = 1; } return(0); } //+------------------------------------------------------------------+ //| Custom indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { ObjectDelete("1" + sName); ObjectDelete("0" + sName); ObjectDelete("2" + sName); } //+------------------------------------------------------------------+ //| Custom indicator start function | //+------------------------------------------------------------------+ 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); ObjectSet("0" + sName, OBJPROP_COLOR, col); ObjectSet("0" + sName, OBJPROP_STYLE, STYLE_DOT); ObjectSet("2" + sName, OBJPROP_COLOR, col); 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; return(0); } //+------------------------------------------------------------------+