//+------------------------------------------------------------------+ //| !RES-SUP.mq4 | //| TOPpoint| //| toppoint@yandex.ru| //+------------------------------------------------------------------+ #property copyright "TOPpoint" #property link "mailto:TOPpoint@yandex.ru" //---- #property indicator_chart_window #property indicator_buffers 4 #property indicator_color1 Red // Цвет линий графика #property indicator_color2 Red #property indicator_color3 Red #property indicator_color4 Red //---- #define LevelMaxDeep 2000 //----- Глубина просмотра уровней // Индикатор рассчитывает приоритетные уровни поддержки/сопротивления // по значениям дневного ATR //extern int ATRPeriod = 10; // Период графика //extern int Aprox=1; // 0-подальше; 1 - поближе datetime PrevTime; // Lock для предупреждения повторной отрисовки string ShortName="RES-SUP"; // Короткое название индикатора в окне double OHLC_D1[][6]; // Массив куда копируются дневные свечки //---- buffers double Sup0[],Sup1[],Res0[],Res1[]; //+------------------------------------------------------------------+ //| Инициализация массивов | //+------------------------------------------------------------------+ int InitChart() { //---- indicator line SetIndexStyle(0,DRAW_LINE,STYLE_DOT); SetIndexStyle(1,DRAW_LINE,STYLE_DOT); SetIndexStyle(2,DRAW_LINE,STYLE_DOT); SetIndexStyle(3,DRAW_LINE,STYLE_DOT); SetIndexBuffer(0,Sup0); SetIndexBuffer(1,Sup1); SetIndexBuffer(2,Res0); SetIndexBuffer(3,Res1); //---- name for DataWindow and indicator subwindow label // IndicatorShortName(ShortName+" ("+ATRPeriod+")"); IndicatorShortName(ShortName); SetIndexLabel(0,"Поддержка0"); SetIndexLabel(1,"Поддержка1"); SetIndexLabel(2,"Сопротивление0"); SetIndexLabel(3,"Сопротивление1"); //---- SetIndexEmptyValue(0,0); SetIndexEmptyValue(1,0); SetIndexEmptyValue(2,0); SetIndexEmptyValue(3,0); //---- return(0); } //+------------------------------------------------------------------+ //| Функция инициализации - удаляем предыдущие линии | //+------------------------------------------------------------------+ int init() { InitChart(); return(0); } //+------------------------------------------------------------------+ //| Функция деинициализации - удаляем предыдущие линии | //+------------------------------------------------------------------+ int deinit() { InitChart(); return(0); } //+------------------------------------------------------------------+ //| Основая функция расчета уровней | //+------------------------------------------------------------------+ int start() { int counted_bars=IndicatorCounted(); int lastday=0, i, j, daybar=0, chartbar=0; double LowYesterday, HighYesterday, LowToday, HighToday, fullatr1, fullatr2,fullatr4,fullatr5,fullatr3,L2,H2,L3,H3,L4,H4,L5,H5; double LowY,HighY,Avr,AvrY,UpLine1,UpLine2,DnLine1,DnLine2; //if (counted_bars<1) return(0); // Если время бара не изменилось, выходим if (PrevTime==Time[0]) return(-1); if(Period() > PERIOD_H4) { Comment("ATR Levels - ошибка: период графика более Н4 !"); return(-1); // then exit } // 0 - time, 1 - open, 2 - low, 3 - high, 4 - close, 5 - volume. ArrayCopyRates(OHLC_D1, Symbol(), PERIOD_D1); lastday=TimeDay(Time[0]); for(i=0; i