//+------------------------------------------------------------------+ //| DonchianChannelsCloud_Digit_Grid.mq5 | //| Copyright © 2005, Luis Guilherme Damiani | //| http://www.damianifx.com.br | //+------------------------------------------------------------------+ #property copyright "Copyright © 2005, Luis Guilherme Damiani" #property link "http://www.damianifx.com.br" //---- номер версии индикатора #property version "1.00" //---- отрисовка индикатора в главном окне #property indicator_chart_window //--- для расчета и отрисовки индикатора использовано семь буферов #property indicator_buffers 7 //--- использовано пять графических построений #property indicator_plots 5 //+----------------------------------------------+ //| Параметры отрисовки облака | //+----------------------------------------------+ //---- отрисовка индикатора в виде цветного облака #property indicator_type1 DRAW_FILLING //---- в качестве цвета облака использован LightSkyBlue #property indicator_color1 clrLightSkyBlue //---- отображение метки индикатора #property indicator_label1 "Upper Cloud" //+----------------------------------------------+ //| Параметры отрисовки верхней границы | //+----------------------------------------------+ //---- отрисовка индикатора 2 в виде линии #property indicator_type2 DRAW_LINE //---- в качестве цвета бычей линии индикатора использован DodgerBlue #property indicator_color2 clrDodgerBlue //---- линия индикатора 2 - непрерывная кривая #property indicator_style2 STYLE_SOLID //---- толщина линии индикатора 2 равна 2 #property indicator_width2 2 //---- отображение бычей метки индикатора #property indicator_label2 "Upper Donchian" //+----------------------------------------------+ //| Параметры отрисовки средней линии | //+----------------------------------------------+ //---- отрисовка индикатора 3 в виде линии #property indicator_type3 DRAW_LINE //---- в качестве цвета медвежьей линии индикатора использован DarkViolet #property indicator_color3 clrDarkViolet //---- линия индикатора 3 - непрерывная кривая #property indicator_style3 STYLE_SOLID //---- толщина линии индикатора 3 равна 2 #property indicator_width3 2 //---- отображение медвежьей метки индикатора #property indicator_label3 "Middle Donchian" //+----------------------------------------------+ //| Параметры отрисовки нижней границы | //+----------------------------------------------+ //---- отрисовка индикатора 4 в виде линии #property indicator_type4 DRAW_LINE //---- в качестве цвета медвежьей линии индикатора использован Magenta #property indicator_color4 clrMagenta //---- линия индикатора 4 - непрерывная кривая #property indicator_style4 STYLE_SOLID //---- толщина линии индикатора 4 равна 2 #property indicator_width4 2 //---- отображение медвежьей метки индикатора #property indicator_label4 "Lower Donchian" //+----------------------------------------------+ //| Параметры отрисовки облака | //+----------------------------------------------+ //---- отрисовка индикатора в виде цветного облака #property indicator_type5 DRAW_FILLING //---- в качестве цвета облака использован Violet #property indicator_color5 clrViolet //---- отображение метки индикатора #property indicator_label5 "Lower Cloud" //+----------------------------------------------+ //| объявление перечисления | //+----------------------------------------------+ enum WIDTH { Width_1=1, //1 Width_2, //2 Width_3, //3 Width_4, //4 Width_5 //5 }; //+----------------------------------------------+ //| объявление перечисления | //+----------------------------------------------+ enum STYLE { SOLID_,//Сплошная линия DASH_,//Штриховая линия DOT_,//Пунктирная линия DASHDOT_,//Штрих-пунктирная линия DASHDOTDOT_ //Штрих-пунктирная линия с двойными точками }; //+----------------------------------------------+ //| объявление перечисления | //+----------------------------------------------+ enum Applied_Extrem //Тип экстремумов { HIGH_LOW, HIGH_LOW_OPEN, HIGH_LOW_CLOSE, OPEN_HIGH_LOW, CLOSE_HIGH_LOW }; //+----------------------------------------------+ //| ВХОДНЫЕ ПАРАМЕТРЫ ИНДИКАТОРА | //+----------------------------------------------+ input string SirName="DonchianChannelsCloud_Digit_Grid"; //Первая часть имени графических объектов input int DonchianPeriod=20; //Период усреднения input Applied_Extrem Extremes=HIGH_LOW; //Тип экстремумов input int Margins=-2; input int Shift = 0; // сдвиг индикатора по горизонтали в барах input uint Digit=2; //количество разрядов округления input bool RoundPrice=true; //округлять цены input bool ShowPrice=true; //показывать ценовые метки //---- цвета ценовых меток input color Middle_color=clrDarkViolet; input color Upper_color=clrBlue; input color Lower_color=clrMagenta; //---- Параметры ценовой сетки input uint Total=200; //количество блоков сетки сверху или снизу от цены //---- input color Color_A = clrSlateBlue; //цвет уровня 1 input STYLE Style_A = DASHDOTDOT_; //стиль линии уровня 1 input WIDTH Width_A = Width_1; //толщина линии уровня 1 //---- input color Color_B = clrDarkOrange; //цвет уровня 2 input STYLE Style_B = DASH_; //стиль линии уровня 2 input WIDTH Width_B = Width_1; //толщина линии уровня 2 //---- input color Color_C = clrMagenta; //цвет уровня 3 input STYLE Style_C = SOLID_; //стиль линии уровня 3 input WIDTH Width_C = Width_1; //толщина линии уровня 3 //---- input color Color_D = clrRed; //цвет уровня 4 input STYLE Style_D = SOLID_; //стиль линии уровня 4 input WIDTH Width_D = Width_1; //толщина линии уровня 4 //---- input color Color_E = clrLime; //цвет уровня 5 input STYLE Style_E = SOLID_; //стиль линии уровня 5 input WIDTH Width_E = Width_1; //толщина линии уровня 5 //---- input uint Fontsizex= 2; //размер ценовых меток input bool ShowLineInfo = true; //отображение значения уровня на ценовом графике //+----------------------------------------------+ //---- объявление динамических массивов, которые будут в дальнейшем использованы в качестве индикаторных буферов double ExtUp1Buffer[]; double ExtUp2Buffer[]; double ExtABuffer[]; double ExtBBuffer[]; double ExtCBuffer[]; double ExtDn1Buffer[]; double ExtDn2Buffer[]; //---- Объявление целых переменных начала отсчёта данных int min_rates_total; //---- Объявление стрингов для текстовых меток string upper_name,middle_name,lower_name; //---- Объявление переменных ценовой сетки color clr; STYLE Style; WIDTH Width; bool ShowPriceLable; int middle,sizex,Normalize,Count; string ObjectNames[]; double PointPow10,PointPow100,PointPow1000,PointPow10000,PointPow100000,PriceGrid[],Price[]; //+------------------------------------------------------------------+ //| searching index of the highest bar | //+------------------------------------------------------------------+ int iHighest( const double &array[],// массив для поиска индекса максимального элемента int count,// число элементов массива (в направлении от текущего бара в сторону убывания индекса), // среди которых должен быть произведен поиск. int startPos //индекс (смещение относительно текущего бара) начального бара, // с которого начинается поиск наибольшего значения ) { //----+ int index=startPos; //---- проверка стартового индекса на корректность if(startPos<0) { Print("Неверное значение в функции iHighest, startPos = ",startPos); return(0); } //---- проверка значения startPos на корректность if(startPos-count<0) count=startPos; double max=array[startPos]; //---- поиск индекса for(int i=startPos; i>startPos-count; i--) { if(array[i]>max) { index=i; max=array[i]; } } //----+ возврат индекса наибольшего бара return(index); } //+------------------------------------------------------------------+ //| searching index of the lowest bar | //+------------------------------------------------------------------+ int iLowest( const double &array[],// массив для поиска индекса минимального элемента int count,// число элементов массива (в направлении от текущего бара в сторону убывания индекса), // среди которых должен быть произведен поиск. int startPos //индекс (смещение относительно текущего бара) начального бара, // с которого начинается поиск наименьшего значения ) { //----+ int index=startPos; //---- проверка стартового индекса на корректность if(startPos<0) { Print("Неверное значение в функции iLowest, startPos = ",startPos); return(0); } //---- проверка значения startPos на корректность if(startPos-count<0) count=startPos; double min=array[startPos]; //---- поиск индекса for(int i=startPos; i>startPos-count; i--) { if(array[i]=0; Count--) PriceGrid[Count]=-NormalizeDouble(PointPow10*(middle-Count),Normalize); //---- превращение динамического массива в индикаторный буфер SetIndexBuffer(0,ExtUp1Buffer,INDICATOR_DATA); SetIndexBuffer(1,ExtUp2Buffer,INDICATOR_DATA); //---- осуществление сдвига начала отсчёта отрисовки индикатора PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,min_rates_total); //---- установка значений индикатора, которые не будут видимы на графике PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,EMPTY_VALUE); //---- осуществление сдвига индикатора по горизонтали PlotIndexSetInteger(0,PLOT_SHIFT,Shift); //---- превращение динамического массива в индикаторный буфер SetIndexBuffer(2,ExtABuffer,INDICATOR_DATA); //---- осуществление сдвига начала отсчёта отрисовки индикатора PlotIndexSetInteger(1,PLOT_DRAW_BEGIN,min_rates_total); //---- установка значений индикатора, которые не будут видимы на графике PlotIndexSetDouble(1,PLOT_EMPTY_VALUE,EMPTY_VALUE); //---- осуществление сдвига индикатора по горизонтали PlotIndexSetInteger(1,PLOT_SHIFT,Shift); //---- превращение динамического массива в индикаторный буфер SetIndexBuffer(3,ExtBBuffer,INDICATOR_DATA); //---- осуществление сдвига начала отсчёта отрисовки индикатора PlotIndexSetInteger(2,PLOT_DRAW_BEGIN,min_rates_total); //---- установка значений индикатора, которые не будут видимы на графике PlotIndexSetDouble(2,PLOT_EMPTY_VALUE,EMPTY_VALUE); //---- осуществление сдвига индикатора по горизонтали PlotIndexSetInteger(2,PLOT_SHIFT,Shift); //---- превращение динамического массива в индикаторный буфер SetIndexBuffer(4,ExtCBuffer,INDICATOR_DATA); //---- осуществление сдвига начала отсчёта отрисовки индикатора PlotIndexSetInteger(3,PLOT_DRAW_BEGIN,min_rates_total); //---- установка значений индикатора, которые не будут видимы на графике PlotIndexSetDouble(3,PLOT_EMPTY_VALUE,EMPTY_VALUE); //---- осуществление сдвига индикатора по горизонтали PlotIndexSetInteger(3,PLOT_SHIFT,Shift); //---- превращение динамического массива в индикаторный буфер SetIndexBuffer(5,ExtDn1Buffer,INDICATOR_DATA); SetIndexBuffer(6,ExtDn2Buffer,INDICATOR_DATA); //---- осуществление сдвига начала отсчёта отрисовки индикатора PlotIndexSetInteger(4,PLOT_DRAW_BEGIN,min_rates_total); //---- установка значений индикатора, которые не будут видимы на графике PlotIndexSetDouble(4,PLOT_EMPTY_VALUE,EMPTY_VALUE); //---- осуществление сдвига индикатора по горизонтали PlotIndexSetInteger(4,PLOT_SHIFT,Shift); //---- инициализации переменной для короткого имени индикатора string shortname; StringConcatenate(shortname,"DonchianChannelsCloud_Digit_Grid( DonchianPeriod = ",DonchianPeriod,")"); //--- создание имени для отображения в отдельном подокне и во всплывающей подсказке IndicatorSetString(INDICATOR_SHORTNAME,shortname); //--- определение точности отображения значений индикатора IndicatorSetInteger(INDICATOR_DIGITS,_Digits+1); //---- завершение инициализации } //+------------------------------------------------------------------+ //| Custom indicator deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //---- ObjectDelete(0,upper_name); ObjectDelete(0,middle_name); ObjectDelete(0,lower_name); for(Count=0; Count