//+------------------------------------------------------------------+ //| DJ_Lines.mq4 | //| Copyright © 2005, MetaQuotes Software Corp. | //| http://www.metaquotes.net | //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ //| HiLoClose.mq4 | //+------------------------------------------------------------------+ /* Name := HiLoClose Author := hawt Link := hawt77@bigmir.net */ #property indicator_chart_window #property indicator_buffers 7 #property indicator_color1 White #property indicator_color2 Red #property indicator_color3 Red #property indicator_color4 Yellow #property indicator_color5 Yellow #property indicator_color6 LimeGreen #property indicator_color7 LimeGreen //---- input parameters5 extern int show_comment=1; // рисовать ли комментарий (0 - нет, 1 - да) extern int how_long=1000; // сколько баров обрабатывать (-1 - все) //---- indicator buffers double E2[]; double ff[]; double E4[]; double E5[]; double E6[]; double E7[]; double E8[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { SetIndexBuffer(0, E2); SetIndexBuffer(1, ff); SetIndexBuffer(2, E4); SetIndexBuffer(3, E5); SetIndexBuffer(4, E6); SetIndexBuffer(5, E7); SetIndexBuffer(6, E8); SetIndexStyle(0, DRAW_LINE,1,2); SetIndexStyle(1, DRAW_LINE); SetIndexStyle(2, DRAW_LINE); SetIndexStyle(3, DRAW_LINE); SetIndexStyle(4, DRAW_LINE); SetIndexStyle(5, DRAW_LINE); SetIndexStyle(6, DRAW_LINE); return(0); } //+------------------------------------------------------------------+ //| Custom indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { Comment(""); return(0); } int start() { int cnt=0; // счетчик баров int begin_bar=0; // бар, с которого начинает работу индикатор int prev_day, cur_day; // идентификаторы текущего и предыдущего дня double day_high=0; // дневной high double day_low=0; // дневной low double yesterday_high=0; // наибольшая цена предыдущего дня double yesterday_low=0; // наименьшая цена предыдущего дня double yesterday_close=0; // цена закрытия предыдущего дня double P, S, R, P1, P2, P3, C1, C2, C3; // правильные таймфремы для нашего индикатора - все, что меньше D1 if (Period() >= PERIOD_D1) { Comment("WARNING: Invalid timeframe! Valid value < D1."); return(0); } // решаем с какого бара мы начнем считать наш индикатор if (how_long == -1) { begin_bar = Bars; } else { begin_bar = how_long; } // обходим бары слева направо (0-й бар тоже используем, т.к. из него мы берём только high и low) for (cnt = begin_bar; cnt >= 0; cnt--) { cur_day = TimeDay(Time[cnt]); if (prev_day != cur_day) { yesterday_close = Close[cnt+1]; yesterday_high = day_high; yesterday_low = day_low; P = (yesterday_high + yesterday_low + yesterday_close) / 3; R = yesterday_high; S = yesterday_low; P1 = 2 * P - S; C1 = 2 * P - R; P2 = P + (P1 - C1); C2 = P - (P1 - C1); P3 = R + (2 * (P - S)); C3 = S - (2 * (R - P)); // т.к. начался новый день, то инициируем макс. и мин. текущего (уже) дня day_high = High[cnt]; day_low = Low[cnt]; // запомним данный день, как текущий prev_day = cur_day; } // продолжаем накапливать данные day_high = MathMax(day_high, High[cnt]); day_low = MathMin(day_low, Low[cnt]); // рисуем pivot-линию по значению, вычисленному по параметрам вчерашнего дня E2[cnt] = P; ff[cnt] = P1; E4[cnt] = C1; E5[cnt] = P2; E6[cnt] = C2; E7[cnt] = P3; E8[cnt] = C3; // рисуем линии сопротивления и поддержки уровня 1,2 или 3 } if (show_comment == 1) { P = (yesterday_high + yesterday_low + yesterday_close) / 3; R = yesterday_high; S = yesterday_low; P1 = 2 * P - S; C1 = 2 * P - R; P2 = P + (P1 - C1); C2 = P - (P1 - C1); P3 = R + (2 * (P - S)); C3 = S - (2 * (R - P)); Comment("Current H=", R, ", L=", S, ", HLС/3=", P, " C2=", C2, ", H-L=", (R-S)/Point ); } return(0); } //+-----------------------------------------------------------------