//+------------------------------------------------------------------+ //| ATR Levels2.mq4 | //| Sergey Iljukhin & TOPpoint| //| sergey@tibet.ru & toppoint@yandex.ru| //+------------------------------------------------------------------+ #property copyright "Sergey Iljukhin" #property link "mailto:sergey@tibet.ru" #property indicator_chart_window #property indicator_buffers 4 #property indicator_color1 LightSkyBlue #property indicator_color2 LightSkyBlue #property indicator_color3 LightSkyBlue #property indicator_color4 LightSkyBlue #define LevelMaxDeep 2000 extern int ATRPeriod = 10; datetime PrevTime; string ShortName="ATR Levels"; double OHLC_D1[][6]; //---- buffers double UpLine1[],UpLine2[],DnLine1[],DnLine2[]; ArraySetAsSeries(UpLine1,true); ArraySetAsSeries(UpLine2,true); ArraySetAsSeries(DnLine1,true); ArraySetAsSeries(DnLine2,true); //+------------------------------------------------------------------+ //| Инициализация массивов | //+------------------------------------------------------------------+ int InitChart() { //---- indicator line SetIndexStyle(0,DRAW_LINE,EMPTY,2); SetIndexStyle(1,DRAW_LINE,2); SetIndexStyle(2,DRAW_LINE,EMPTY,2); SetIndexStyle(3,DRAW_LINE,2); SetIndexBuffer(0,UpLine1); SetIndexBuffer(1,UpLine2); SetIndexBuffer(2,DnLine1); SetIndexBuffer(3,DnLine2); //---- name for DataWindow and indicator subwindow label IndicatorShortName(ShortName+" ("+ATRPeriod+")"); SetIndexLabel(0,"Up Channel 1"); SetIndexLabel(1,"Up Channel 2"); SetIndexLabel(2,"Down Channel 1"); SetIndexLabel(3,"Down Channel 2"); //---- 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; if (PrevTime==Time[0]) return(-1); if(Period() > PERIOD_H4) { Comment("ATR Levels - ошибка: период графика более Н4 !"); return(-1); // then exit } ArrayCopyRates(OHLC_D1, Symbol(), PERIOD_D1); lastday=TimeDay(Time[0]); for (i=0; i