//+------------------------------------------------------------------+ //| St_LRegr.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 //---- в качестве цвета линии индикатора использован красный цвет #property indicator_color1 clrRed //---- линия индикатора - сплошная линия #property indicator_style1 STYLE_SOLID //---- толщина линии индикатора равна 1 #property indicator_width1 1 //---- отображение лэйбы индикатора #property indicator_label1 "St_LRegression chanell" //+--------------------------------------------+ //| Параметры отрисовки индикатора уровней | //+--------------------------------------------+ //---- отрисовка уровней канала в виде линий #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 Purple #property indicator_color3 Red #property indicator_color4 Blue #property indicator_color5 Blue #property indicator_color6 Red #property indicator_color7 Purple //---- уровни канала - штрихпунктирные кривые #property indicator_style2 STYLE_DASHDOTDOT #property indicator_style3 STYLE_DASHDOTDOT #property indicator_style4 STYLE_DASHDOTDOT #property indicator_style5 STYLE_DASHDOTDOT #property indicator_style6 STYLE_DASHDOTDOT #property indicator_style7 STYLE_DASHDOTDOT //---- толщина уровней канала равна 1 #property indicator_width2 1 #property indicator_width3 1 #property indicator_width4 1 #property indicator_width5 1 #property indicator_width6 1 #property indicator_width7 1 //---- отображение меток уровней канала #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 StdDev=1.0; // девиация input int Shift=0; // сдвиг индикатора по горизонтали в барах input int PriceShift=0; // cдвиг индикатора по вертикали в пунктах //+-----------------------------------+ //---- объявление динамического массива, который будет в // дальнейшем использован в качестве индикаторного буфера double LineBuffer[]; //---- объявление динамических массивов, которые будут в // дальнейшем использованы в качестве индикаторных буферов уровней Боллинджера double ExtLineBuffer1[],ExtLineBuffer2[],ExtLineBuffer3[]; double ExtLineBuffer4[],ExtLineBuffer5[],ExtLineBuffer6[]; //---- Объявление переменных пропорции уровней Боллинджера double quotient2,quotient3; //---- Объявление переменной значения вертикального сдвига мувинга double dPriceShift; //---- Объявление целых переменных начала отсчёта данных int min_rates_total,N; //+------------------------------------------------------------------+ //| St_LRegr 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,"St_LRegression chanell(",N,", ",DoubleToString(StdDev,2),", ",Shift,", ",PriceShift,")"); //--- создание имени для отображения в отдельном подокне и во всплывающей подсказке IndicatorSetString(INDICATOR_SHORTNAME,shortname); //--- определение точности отображения значений индикатора IndicatorSetInteger(INDICATOR_DIGITS,_Digits+1); //---- завершение инициализации } //+------------------------------------------------------------------+ //| St_LRegr 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