//+--------------------------------------------------------------------------------+ //| ang_Amp_ZZ | //| StreamAmpZZ.mq4 | //| Copyright © 2005, ANG3110 | //| ANG3110@latchess.com | //| маленькая доработка Titan | //+--------------------------------------------------------------------------------+ #property copyright "Copyright © 2005, ANG3110" #property link "ANG3110@latchess.com" #property indicator_chart_window #property indicator_buffers 7 #property indicator_color1 CornflowerBlue #property indicator_color2 Orange #property indicator_color3 Orange #property indicator_color4 SteelBlue #property indicator_color5 SteelBlue #property indicator_color6 MediumSeaGreen #property indicator_color7 Red //---- input parameters extern double Depth = 12.5; extern int Smooth = 6; extern int сntBars = 600; //---- Вкл/выкл extern bool Sound = false; //---- buffers double zz[], ha[], la[], hs[], ls[], hx[], lx[]; double tmp_ha[], tmp_la[]; //---- parameters double hi, li, hm, lm; int f = 0, f1, f0, ai, bi, aibar, bibar; int wait = 0; //шоб не трезвонила на текущей свече //+--------------------------------------------------------------------------------+ //| Custom indicator initialization function | //+--------------------------------------------------------------------------------+ int init() { Depth *= Point; //---- Устанавливаем новый размер массивов ArrayResize(tmp_ha, сntBars); ArrayResize(tmp_la, сntBars); //---- Установка формата точности для визуализации индикатора IndicatorDigits(4); //---- 7 additional buffers are used for counting. IndicatorBuffers(7); //---- indicator buffers SetIndexBuffer(0, zz); SetIndexBuffer(1, ha); SetIndexBuffer(2, la); SetIndexBuffer(3, hs); SetIndexBuffer(4, ls); SetIndexBuffer(5, hx); SetIndexBuffer(6, lx); //---- indicator lines SetIndexStyle(0, DRAW_LINE, STYLE_SOLID, 2); SetIndexStyle(1, DRAW_LINE); SetIndexStyle(2, DRAW_LINE); SetIndexStyle(3, DRAW_LINE, STYLE_DOT); SetIndexStyle(4, DRAW_LINE, STYLE_DOT); SetIndexStyle(5, DRAW_ARROW, 0, 2); SetIndexStyle(6, DRAW_ARROW, 0, 2); //---- SetIndexEmptyValue(5, EMPTY_VALUE); SetIndexEmptyValue(6, EMPTY_VALUE); //---- SetIndexArrow(5, 251); SetIndexArrow(6, 251); // Wingdings symbols: // ------------------ // 4 - черточка // 119 - ромбик // 158 - точка // 159 - жирная точка // 167 - квадратик // 169 - звезда триугольная // 170 - плюс // 251 - крестик //---- name for DataWindow and indicator subwindow label IndicatorShortName("StreamAmpZZ"); SetIndexLabel(0, "ZZ"); SetIndexLabel(1, "HA"); SetIndexLabel(2, "LA"); SetIndexLabel(3, "ZZHA"); SetIndexLabel(4, "ZZLA"); SetIndexLabel(5, "Upper"); SetIndexLabel(6, "Lower"); //---- int draw = Bars - сntBars; SetIndexDrawBegin(0, draw); SetIndexDrawBegin(1, draw + Smooth); SetIndexDrawBegin(2, draw + Smooth); SetIndexDrawBegin(3, draw); SetIndexDrawBegin(4, draw); SetIndexDrawBegin(5, draw); SetIndexDrawBegin(6, draw); //---- return(0); } //+--------------------------------------------------------------------------------+ //| StreamAmpZZ | //+--------------------------------------------------------------------------------+ int start() { double cum, sum; int bars = Bars - IndicatorCounted(), i, j; if (bars > 1) bars = сntBars; //перерисовка по всем сntBars при каждом новом баре for(i=bars-1; i>=0; i--) { if (i >= сntBars) {hi = High[i]; li = Low[i];} if (Low [i] > hi) {hi = Low [i]; if (hi >= li+Depth) li = hi - Depth;} if (High[i] < li) {li = High[i]; if (li <= hi-Depth) hi = li + Depth;} //---- if (High[i] > hi && Low[i] < li) if (High[i]-hi > li-Low[i]) f1 = 1; else f1 = 2; else f1 = 0; //---- if (f == 0) { if (High[i] > hi) {hm = High[i]; ai = i; f = 1;} if (Low [i] < li) {lm = Low [i]; bi = i; f = 2;} } //---- if (f1 != 2) { if (f == 2 && High[i] > hi) { hm = High[i]; f = 1; f0 = 0; if (ai != bi) for (j=ai; j>=bi; j--) zz[j] = High[ai]*(j - bi)/(ai - bi) + Low[bi]*(j - ai)/(bi - ai); ai = i; } if (f == 1 && High[i] > hm) {hm = High[i]; ai = i; f0 = 0;} } //---- if (f1 != 1) { if (f == 1 && Low[i] < li) { lm = Low[i]; f = 2; f0 = 0; if (ai != bi) for (j=bi; j>=ai; j--) zz[j] = High[ai]*(j - bi)/(ai - bi) + Low[bi]*(j - ai)/(bi - ai); bi = i; } if (f == 2 && Low[i] < lm) {lm = Low[i]; bi = i; f0 = 0;} } //---- if (f0 == 0 && i == 0) {aibar = Bars - ai; bibar = Bars - bi; f0 = 1;} if (f0 == 1) {ai = Bars - aibar; bi = Bars - bibar;} //---- if (i == 0) { if (ai > bi) for (j=ai; j>=bi; j--) zz[j] = High[ai]*(j - bi)/(ai - bi) + Low[bi]*(j - ai)/(bi - ai); if (ai < bi) for (j=bi; j>=ai; j--) zz[j] = High[ai]*(j - bi)/(ai - bi) + Low[bi]*(j - ai)/(bi - ai); //---- if (f == 1 && ai != 0) for (j=ai; j>=0; j--) zz[j] = Close[0]*(j - ai)/(0 - ai) + High[ai]*(j - 0)/(ai - 0); if (f == 2 && bi != 0) for (j=bi; j>=0; j--) zz[j] = Close[0]*(j - bi)/(0 - bi) + Low [bi]*(j - 0)/(bi - 0); if (bi == 0 && ai != 0) for (j=ai; j>=0; j--) zz[j] = Low [0]*(j - ai)/(0 - ai) + High[ai]*(j - 0)/(ai - 0); if (ai == 0 && bi != 0) for (j=bi; j>=0; j--) zz[j] = High [0]*(j - bi)/(0 - bi) + Low [bi]*(j - 0)/(bi - 0); } //---- tmp_ha[i] = hi; tmp_la[i] = li; //Сглаживание (замедление) if (i <= сntBars-Smooth && Smooth > 1) { for (j=i, cum = 0, sum = 0; j=0; i--) { hs[i] = (zz[i] + ha[i])/2; ls[i] = (zz[i] + la[i])/2; } //---- Экстремумы if (bars >= Bars) bars = сntBars - 1; for(i=bars; i>0; i--) { hx[i] = EMPTY_VALUE; lx[i] = EMPTY_VALUE; if (zz[i-1] < zz[i] && zz[i] > zz[i+1]) {hx[i] = zz[i]; if (wait != Time[0] && i == 1 && Sound) {PlaySound("alert.wav"); wait = Time[0];}} if (zz[i-1] > zz[i] && zz[i] < zz[i+1]) {lx[i] = zz[i]; if (wait != Time[0] && i == 1 && Sound) {PlaySound("alert2.wav"); wait = Time[0];}} } //---- return(0); } //+--------------------------------------------------------------------------------+ //| End | //+--------------------------------------------------------------------------------+