//+------------------------------------------------------------------+ //| TrendlessOS Histogram.mq4 | //| Copyright © 2010, LenIFCHIK | //|Осциллятор Бестрендовости написан в соответствии с описанием, | //|приведённым в книге Джо ДиНаполи "Торговля с применением уровней | //|ДиНаполи" | //|Индикатор отображается в виде гистограммы, столбики которой | //|изменяют цвет, когда значение индикатора больше или равно уровню | //|перекупленности и меньше или равно уровню перепроданности. | //+------------------------------------------------------------------+ #property copyright "Copyright © 2010, LenIFCHIK" #property indicator_separate_window //в отдельном окне #property indicator_buffers 5 //число буферов индикатора //---- входные параметры extern int SMAPeriod=7; //период простой скользящей средней в формуле осциллятора extern double OBLevel=0.0047; //граница уровня перекупленности extern double OSLevel=-0.00473; //граница уровня перепроданности extern string Note_for_Display_mode="1 - line, 2 - colored histogram"; extern int Display_mode=2; //переключение режима отображения (одноцветная линия/многоцветная гистограмма) //---- присоение цвета #property indicator_color1 Navy //цвет линии индикатора #property indicator_color2 DimGray //цвет графика индикатора (-60;60) #property indicator_color3 Lime //цвет графика индикатора (-80;-60]||[60;80) #property indicator_color4 Blue //цвет графика индикатора (-100;-80]||[80;100) #property indicator_color5 Red //цвет графика индикатора (--;-100]||[100;++) //---- буферы индикатора double TrendlessOSBuffer[]; //буфер расчёта индикатора double ExtBuffer1[]; //буфер графика индикатора (-60;60) double ExtBuffer2[]; //буфер графика индикатора (-80;-60]||[60;80) double ExtBuffer3[]; //буфер графика индикатора (-100;-80]||[80;100) double ExtBuffer4[]; //буфер графика индикатора (--;-100]||[100;++) //+------------------------------------------------------------------+ //| Инициализация. Функция init | //+------------------------------------------------------------------+ int init() { string short_name; double EightyOBlvl=0.8*OBLevel; //методика расчёта 80% перекупленности double EightyOSlvl=0.8*OSLevel; //методика расчёта 80% перепроданности double SixtyOBlvl=0.6*OBLevel; //методика расчёта 60% перекупленности double SixtyOSlvl=0.6*OSLevel; //методика расчёта 60% перепроданности //---- стиль отрисовки switch(Display_mode) //переключение между режимами линии и гистограммы { case 1 : //ОДНОЦВЕТНАЯ ЛИНИЯ SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,1); //стиль линии индикатора (в режиме многоцветной гистограммы не отображается) SetIndexStyle(1,DRAW_NONE); //буфер графика индикатора (-60;60) SetIndexStyle(2,DRAW_NONE); //буфер графика индикатора (-80;-60]||[60;80) SetIndexStyle(3,DRAW_NONE); //буфер графика индикатора (-100;-80]||[80;100) SetIndexStyle(4,DRAW_NONE); //буфер графика индикатора (--;-100]||[100;++) break; case 2 : //МНОГОЦВЕТНАЯ ГИСТОГРАММА SetIndexStyle(0,DRAW_NONE); //стиль линии индикатора (в режиме многоцветной гистограммы не отображается) SetIndexStyle(1,DRAW_HISTOGRAM,STYLE_SOLID,1); //буфер графика индикатора (-60;60) SetIndexStyle(2,DRAW_HISTOGRAM,STYLE_SOLID,2); //буфер графика индикатора (-80;-60]||[60;80) SetIndexStyle(3,DRAW_HISTOGRAM,STYLE_SOLID,2); //буфер графика индикатора (-100;-80]||[80;100) SetIndexStyle(4,DRAW_HISTOGRAM,STYLE_SOLID,2); //буфер графика индикатора (--;-100]||[100;++) break; default : Display_mode=2; //по умолчанию - многоцветная гистограмма } //---- установка бара, с которого начинается отрисовка индикатора SetIndexDrawBegin(0,SMAPeriod); SetIndexDrawBegin(1,SMAPeriod); SetIndexDrawBegin(2,SMAPeriod); SetIndexDrawBegin(3,SMAPeriod); SetIndexDrawBegin(4,SMAPeriod); //---- разметка буферов SetIndexBuffer(0,TrendlessOSBuffer); //буфер графика индикатора SetIndexBuffer(1,ExtBuffer1); //буфер графика индикатора (-60;60) SetIndexBuffer(2,ExtBuffer2); //буфер графика индикатора (-80;-60]||[60;80) SetIndexBuffer(3,ExtBuffer3); //буфер графика индикатора (-100;-80]||[80;100) SetIndexBuffer(4,ExtBuffer4); //буфер графика индикатора (--;-100]||[100;++) //---- название окна данных и окна индикатора short_name="TrendlessOS Histogramm("+SMAPeriod+")"; //в названии отображается только период SMA IndicatorShortName(short_name); SetIndexLabel(0,short_name); //---- определение уровней SetLevelValue(1,OBLevel); //уровень 100% перекупленности SetLevelValue(2,OSLevel); //уровень 100% перепроданности SetLevelValue(3,EightyOBlvl); //уровень 80% перекупленности SetLevelValue(4,EightyOSlvl); //уровень 80% перепроданности SetLevelValue(5,SixtyOBlvl); //уровень 60% перекупленности SetLevelValue(6,SixtyOSlvl); //уровень 60% перепроданности //---- стиль уровней SetLevelStyle(STYLE_DOT,1,Silver); //стиль отображения уровней //---- конец инициализации return(0); } //+------------------------------------------------------------------+ //| TrendlessOS Histogram | //+------------------------------------------------------------------+ int start() { int limit; int counted_bars=IndicatorCounted(); double current; //---- пересчёт последнего бара if(counted_bars>0) counted_bars--; limit=Bars-counted_bars; //---- расчёт индикатора for(int i=0; i=0; i--) { current=TrendlessOSBuffer[i]; if(current>0.6*OSLevel && current<0.6*OBLevel) //если значние индикатора находится в диапазоне (-60%;60%) { ExtBuffer1[i]=current; //то отображается гистограмма ExtBuffer1[] ExtBuffer2[i]=0.0; ExtBuffer3[i]=0.0; ExtBuffer4[i]=0.0; } else //если значение индикатора не входит в диапазон (-60%;60%), то проверяется следующее условие { if((current>0.8*OSLevel && current<=0.6*OSLevel) || (current>=0.6*OBLevel && current<0.8*OBLevel)) //если значение индикатора в диапазоне (-80%;-60%] или [60%;80%) { ExtBuffer1[i]=0.0; ExtBuffer2[i]=current; //то отображается гистограмма ExtBuffer2[] ExtBuffer3[i]=0.0; ExtBuffer4[i]=0.0; } else //если значение индикатора не входит и в диапазон (-80%;-60%]||[60%;80%), то проверяется следующее условие { if((current>OSLevel && current<=0.8*OSLevel) || (current>=0.8*OBLevel && current=OBLevel) //если значение индикатора входит в диапазон (--;-100%]||[100%;++) { ExtBuffer1[i]=0.0; ExtBuffer2[i]=0.0; ExtBuffer3[i]=0.0; ExtBuffer4[i]=current; //то отображается ExtBuffer4[] } } } } } //---- конец return(0); } //+------------------------------------------------------------------+