//+------------------------------------------------------------------+ //| Standard_Deviation_Channels_x3.mq5 | //| Copyright © 2009, Stajer59 | //| http://www.stajer59.ucoz.ru | //+------------------------------------------------------------------+ #property copyright "Copyright © 2009, Stajer59" #property link "http://www.stajer59.ucoz.ru" #property description "Индикатор трёх каналов стандартной девиации" //---- номер версии индикатора #property version "1.00" //---- отрисовка индикатора в главном окне #property indicator_chart_window //---- количество индикаторных буферов #property indicator_buffers 7 //---- использовано всего семь графических построений #property indicator_plots 7 //+--------------------------------------------+ //| Параметры отрисовки индикатора | //+--------------------------------------------+ //---- отрисовка индикатора в виде линии #property indicator_type1 DRAW_LINE //---- в качестве цвета линии индикатора использован DarkViolet цвет #property indicator_color1 clrDarkViolet //---- линия индикатора - сплошная линия #property indicator_style1 STYLE_SOLID //---- толщина линии индикатора равна 2 #property indicator_width1 2 //---- отображение метки индикатора #property indicator_label1 "Standard_Deviation_Channels Middle Line" //+--------------------------------------------+ //| Параметры отрисовки индикатора уровней | //+--------------------------------------------+ //---- отрисовка уровней канала в виде линий #property indicator_type2 DRAW_LINE #property indicator_type3 DRAW_LINE #property indicator_type4 DRAW_LINE #property indicator_type5 DRAW_LINE #property indicator_type6 DRAW_LINE #property indicator_type7 DRAW_LINE //---- выбор цветов уровней канала #property indicator_color2 clrMediumSpringGreen #property indicator_color3 clrMediumSeaGreen #property indicator_color4 clrTeal #property indicator_color5 clrMediumVioletRed #property indicator_color6 clrRed #property indicator_color7 clrGold //---- уровни канала - штрихпунктирные кривые #property indicator_style2 STYLE_SOLID #property indicator_style3 STYLE_SOLID #property indicator_style4 STYLE_SOLID #property indicator_style5 STYLE_SOLID #property indicator_style6 STYLE_SOLID #property indicator_style7 STYLE_SOLID //---- толщина уровней канала равна 3 #property indicator_width2 3 #property indicator_width3 3 #property indicator_width4 3 #property indicator_width5 3 #property indicator_width6 3 #property indicator_width7 3 //---- отображение меток уровней канала #property indicator_label2 "+3Sigma" #property indicator_label3 "+2Sigma" #property indicator_label4 "+1Sigma" #property indicator_label5 "-1Sigma" #property indicator_label6 "-2Sigma" #property indicator_label7 "-3Sigma" //+--------------------------------------------+ //| ВХОДНЫЕ ПАРАМЕТРЫ ИНДИКАТОРА | //+--------------------------------------------+ input uint N_=240; // количество свечей для анализа input double StdDev1=1.0; // девиация первого канала input double StdDev2=1.5; // девиация второго канала input double StdDev3=2.0; // девиация третьего канала input int Shift=0; // сдвиг индикатора по горизонтали в барах input int PriceShift=0; // cдвиг индикатора по вертикали в пунктах //+--------------------------------------------+ //---- объявление динамического массива, который будет в дальнейшем использован в качестве индикаторного буфера double LineBuffer[]; //---- объявление динамических массивов, которые будут в дальнейшем использованы в качестве индикаторных буферов уровней double ExtLineBuffer1[],ExtLineBuffer2[],ExtLineBuffer3[]; double ExtLineBuffer4[],ExtLineBuffer5[],ExtLineBuffer6[]; //---- Объявление переменной значения вертикального сдвига мувинга double dPriceShift; //---- Объявление целых переменных начала отсчёта данных int min_rates_total,N; //+------------------------------------------------------------------+ //| Standard_Deviation_Channels_x3 indicator initialization function | //+------------------------------------------------------------------+ void OnInit() { //---- Инициализация переменных начала отсчёта данных N=int(N_); min_rates_total=N; //---- Инициализация сдвига по вертикали dPriceShift=_Point*PriceShift; //---- превращение динамического массива в индикаторный буфер SetIndexBuffer(0,LineBuffer,INDICATOR_DATA); //---- осуществление сдвига индикатора 1 по горизонтали PlotIndexSetInteger(0,PLOT_SHIFT,Shift); //---- осуществление сдвига начала отсчёта отрисовки индикатора PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,min_rates_total); //---- установка значений индикатора, которые не будут видимы на графике PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0); //---- индексация элементов в буфере как в таймсерии ArraySetAsSeries(LineBuffer,true); //---- превращение динамических массивов в индикаторные буферы SetIndexBuffer(1,ExtLineBuffer1,INDICATOR_DATA); SetIndexBuffer(2,ExtLineBuffer2,INDICATOR_DATA); SetIndexBuffer(3,ExtLineBuffer3,INDICATOR_DATA); SetIndexBuffer(4,ExtLineBuffer4,INDICATOR_DATA); SetIndexBuffer(5,ExtLineBuffer5,INDICATOR_DATA); SetIndexBuffer(6,ExtLineBuffer6,INDICATOR_DATA); //---- установка позиции, с которой начинается отрисовка уровней Боллинджера PlotIndexSetInteger(1,PLOT_DRAW_BEGIN,min_rates_total); PlotIndexSetInteger(2,PLOT_DRAW_BEGIN,min_rates_total); PlotIndexSetInteger(3,PLOT_DRAW_BEGIN,min_rates_total); PlotIndexSetInteger(4,PLOT_DRAW_BEGIN,min_rates_total); PlotIndexSetInteger(5,PLOT_DRAW_BEGIN,min_rates_total); PlotIndexSetInteger(6,PLOT_DRAW_BEGIN,min_rates_total); //---- запрет на отрисовку индикатором пустых значений PlotIndexSetDouble(1,PLOT_EMPTY_VALUE,EMPTY_VALUE); PlotIndexSetDouble(2,PLOT_EMPTY_VALUE,EMPTY_VALUE); PlotIndexSetDouble(3,PLOT_EMPTY_VALUE,EMPTY_VALUE); PlotIndexSetDouble(4,PLOT_EMPTY_VALUE,EMPTY_VALUE); PlotIndexSetDouble(5,PLOT_EMPTY_VALUE,EMPTY_VALUE); PlotIndexSetDouble(6,PLOT_EMPTY_VALUE,EMPTY_VALUE); //---- индексация элементов в буфере как в таймсерии ArraySetAsSeries(ExtLineBuffer1,true); ArraySetAsSeries(ExtLineBuffer2,true); ArraySetAsSeries(ExtLineBuffer3,true); ArraySetAsSeries(ExtLineBuffer4,true); ArraySetAsSeries(ExtLineBuffer5,true); ArraySetAsSeries(ExtLineBuffer6,true); //---- инициализации переменной для короткого имени индикатора string shortname; StringConcatenate(shortname,"Standard_Deviation_Channels_x3(",N,", ", DoubleToString(StdDev1,2),", ",DoubleToString(StdDev2,2),", ",DoubleToString(StdDev3,2),", ",Shift,", ",PriceShift,")"); //--- создание имени для отображения в отдельном подокне и во всплывающей подсказке IndicatorSetString(INDICATOR_SHORTNAME,shortname); //--- определение точности отображения значений индикатора IndicatorSetInteger(INDICATOR_DIGITS,_Digits+1); //---- завершение инициализации } //+------------------------------------------------------------------+ //| Standard_Deviation_Channels_x3 iteration function | //+------------------------------------------------------------------+ int OnCalculate( const int rates_total, // количество истории в барах на текущем тике const int prev_calculated,// количество истории в барах на предыдущем тике const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tick_volume[], const long &volume[], const int &spread[] ) { //---- проверка количества баров на достаточность для расчёта if(rates_total