//ШШШШШШШШШШШШШШШШШШШШШШШШШШШШШШШШШШШШШШШШШШШШШШШШШШШШШШШШШШШШШШШШШШШШШШШШШШШШШ //| Val_Bands.mq4 | //| Индикатор волантильности длины свечей: | //| - красная гистограмма - длина свечи в пипсах | //| - линии: это средние от длины свечей со стандартным отклонением | //| Настройки - аналогичны каналу Болинджера | //| Использование. Удобен для отслежиания гэпов на рынке. За гэп считется | //| все, что выше желтой линии | //| - выход за верхнюю границу - а) подарок в ТР (если по позиции); | //| б) SL (если против позиции; | //| в) запрет входа в этой точке | //| - выход за нижнюю границу - боковик | //| - пересечение снизу вверх нижней границы - начало тренда. | //ШШШШШШШШШШШШШШШШШШШШШШШШШШШШШШШШШШШШШШШШШШШШШШШШШШШШШШШШШШШШШШШШШШШШШШШШШШШШШ #property copyright "Copyright © 2010, Fomenko" #property link "http://faa1947@mail.ru" // ----------------- Отдельное окно для индикатора ---------------------------- #property indicator_separate_window // ---------------- Кол-во видимых буферов индикатора ------------------------- #property indicator_buffers 4 // ---------------- Установка цвета индикатора -------------------------------- #property indicator_color1 LightSeaGreen #property indicator_color2 Yellow #property indicator_color3 Orchid #property indicator_color4 Red // ---------------- Установка ширины линии ----------------------------------- #property indicator_width1 2 #property indicator_width2 1 #property indicator_width3 1 #property indicator_width4 1 // ---------------- Установка стиля линии ----------------------------------- #property indicator_style1 0 #property indicator_style2 0 #property indicator_style3 0 #property indicator_style4 0 //----------------- Внешние настройки индикатора ==========-------------------- extern int BandsPeriod = 14; // Период расчета extern double BandsDeviations = 1.0; // Величина стандартного отклонения int BandsShift = 0; // Сдвиг относительно графика //----------------- Объявление буферов инидикаторов -------------------------- double MovingBuffer[]; double UpperBuffer[]; double LowerBuffer[]; double Val_BarsBuffer[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { IndicatorDigits(1); //--------- Три видимых буфера -------------------------------------- IndicatorBuffers(4); //---------- Установка параметров рисования ------------------------- SetIndexStyle(0,DRAW_LINE); SetIndexDrawBegin(0,BandsPeriod+BandsShift); SetIndexStyle(1,DRAW_LINE); SetIndexDrawBegin(1,BandsPeriod+BandsShift); SetIndexStyle(2,DRAW_LINE); SetIndexDrawBegin(2,BandsPeriod+BandsShift); SetIndexStyle(3,DRAW_HISTOGRAM); SetIndexDrawBegin(3,BandsPeriod+BandsShift); //---------- Привязываем номер буфера к его имени ------------------- SetIndexBuffer(0,MovingBuffer); SetIndexBuffer(1,UpperBuffer); SetIndexBuffer(2,LowerBuffer); SetIndexBuffer(3,Val_BarsBuffer); // ----------- Устанавливаем первоначальные значения --------------- SetIndexEmptyValue (0, 0.0); SetIndexEmptyValue (1, 0.0); SetIndexEmptyValue (2, 0.0); SetIndexEmptyValue (3, 0.0); //------------------ Метка для линии индикатора --------------------- SetIndexLabel(0,"Mov"); SetIndexLabel(1,"Up"); SetIndexLabel(2,"Down"); return(0); } //+------------------------------------------------------------------+ //| Bollinger Bands | //+------------------------------------------------------------------+ int start() { int i, k; double deviation; double sum, oldval, newres; //---- if(Bars<=BandsPeriod) return(0); //---------------- Вычисляем среднюю -------------------------------- 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+BandsPeriod; for(i=0; iBandsPeriod-1) i=Bars-counted_bars-1; while(i>=0) { sum = 0.0; k = i + BandsPeriod - 1; oldval = MovingBuffer[i]; while(k>=i) { newres=Val_BarsBuffer[k]-oldval; sum+=newres *newres; k--; } deviation = BandsDeviations * MathSqrt(sum / BandsPeriod); UpperBuffer[i] = oldval + deviation; LowerBuffer[i] = oldval - deviation; i--; } //----------------- Индикатор вычислен -------------------------------- return(0); } //+------------------------------------------------------------------+ //| Custom indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { return(0); } //+------------------------------------------------------------------+