//+------------------------------------------------------------------+ //| TrendlessAG.mq4 | //| Copyright © 2012, Barmaley | //|Осциллятор Бестрендовости написан в соответствии с описанием, | //|приведённым в книге Джо ДиНаполи "Торговля с применением уровней | //|ДиНаполи" | //+------------------------------------------------------------------+ #property copyright "Copyright © 2012, Barmaley" #property indicator_separate_window //в отдельном окне #property indicator_buffers 1 //число буферов индикатора //---- входные параметры extern int SMAPeriod=7; //период простой скользящей средней в формуле осциллятора extern int PointsCount=600; //количество точек для расчета индикатора. Форекс-клуб рекомендует месяц для часовок. Ну где-то так и возьмем. extern int In100=90; // Сколько % точек индикатора должны входить в интервал +-100% //---- присоение цвета #property indicator_color1 Yellow //цвет линии индикатора //---- буферы индикатора double Buf[]; //буфер расчёта индикатора double BufX[]; // Вспомогательный массив //+------------------------------------------------------------------+ //| Инициализация. Функция init | //+------------------------------------------------------------------+ int init() { //---- установка бара, с которого начинается отрисовка индикатора SetIndexDrawBegin(0,PointsCount); IndicatorDigits(1); //---- разметка буферов SetIndexBuffer(0,Buf); //буфер графика индикатора //---- название окна данных и окна индикатора string short_name="TrendlessAG ("+SMAPeriod+")"; //в названии отображается только период SMA IndicatorShortName(short_name); SetIndexLabel(0,short_name); //---- Установка уровней SetLevelValue(1,100.0); //уровень 100% перекупленности SetLevelValue(2,80.0); //уровень 80% перекупленности SetLevelValue(3,60.0); //уровень 60% перекупленности SetLevelValue(4,0.0); //уровень 0 SetLevelValue(5,-60.0); //уровень 60% перепроданности SetLevelValue(6,-80.0); //уровень 80% перепроданности SetLevelValue(7,-100.0); //уровень 100% перепроданности //---- стиль уровней SetLevelStyle(STYLE_DOT,1,Silver); //стиль отображения уровней //---- конец инициализации return(0); } //+------------------------------------------------------------------+ //| TrendlessAG | //+------------------------------------------------------------------+ int start() { // int limit=PointsCount; // А зачем больше то считать? int counted_bars=IndicatorCounted(); if(counted_bars<0) return(-1); if(counted_bars>0) counted_bars--; int limit=Bars-counted_bars; if(counted_bars==0) limit-=1+In100/100; ArrayResize(BufX,ArraySize(Buf)); if(limit