//+------------------------------------------------------------------+ //| ColorBarRange_HTF.mq5 | //| Copyright © 2017, Nikolay Kositsin | //| Khabarovsk, farria@mail.redcom.ru | //+------------------------------------------------------------------+ #property copyright "Copyright © 2017, Nikolay Kositsin" #property link "farria@mail.redcom.ru" //---- номер версии индикатора #property version "1.60" //---- отрисовка индикатора в основном окне #property indicator_chart_window //---- количество индикаторных буферов #property indicator_buffers 6 //---- использовано всего три графических построения #property indicator_plots 3 //+----------------------------------------------+ //| объявление констант | //+----------------------------------------------+ #define RESET 0 // Константа для возврата терминалу команды на пересчёт индикатора #define INDICATOR_NAME "ColorBarRange_HTF" // Константа для имени индикатора //+----------------------------------------------+ //| Параметры отрисовки индикатора | //+----------------------------------------------+ //---- отрисовка индикатора в виде цветного облака #property indicator_type1 DRAW_FILLING //---- в качестве цвета облака использован #property indicator_color1 clrLavender //---- отображение метки индикатора #property indicator_label1 "ColorBarRange_HTF Cloud" //+----------------------------------------------+ //| Параметры отрисовки индикатора | //+----------------------------------------------+ //---- отрисовка индикатора в виде многоцветной линии #property indicator_type2 DRAW_COLOR_LINE //---- в качестве цветов линии использованы #property indicator_color2 clrMediumSeaGreen,clrDeepPink //---- линия индикатора - непрерывная кривая #property indicator_style2 STYLE_SOLID //---- толщина линии индикатора равна 3 #property indicator_width2 3 //---- отображение метки индикатора #property indicator_label2 "ColorBarRange_HTF Upper" //+----------------------------------------------+ //| Параметры отрисовки индикатора | //+----------------------------------------------+ //---- отрисовка индикатора в виде многоцветной линии #property indicator_type3 DRAW_COLOR_LINE //---- в качестве цветов линии использованы #property indicator_color3 clrMediumSeaGreen,clrDeepPink //---- линия индикатора - непрерывная кривая #property indicator_style3 STYLE_SOLID //---- толщина линии индикатора равна 3 #property indicator_width3 3 //---- отображение метки индикатора #property indicator_label3 "ColorBarRange_HTF Lower" //+-------------------------------------+ //| ВХОДНЫЕ ПАРАМЕТРЫ ИНДИКАТОРА | //+-------------------------------------+ input ENUM_TIMEFRAMES TimeFrame=PERIOD_H12;//Период графика //+-------------------------------------+ //| ВХОДНЫЕ ПАРАМЕТРЫ ИНДИКАТОРА | //+-------------------------------------+ input string SirName="ColorBarRange_HTF"; // Первая часть имени графических объектов input int Shift=0; // сдвиг индикатора по горизонтали в барах input int PriceShift=0; // cдвиг индикатора по вертикали в пунктах input bool ShowPrice=true; // показывать ценовую метку //---- цвета ценовых меток input color Up_Price_color=clrTeal; // цвет верхней ценовой метки input color Dn_Price_color=clrRed; // цвет нижней ценовой метки //+-------------------------------------+ //---- объявление динамических массивов, которые будут в дальнейшем использованы в качестве индикаторных буферов double UpLineBuffer[],ColorUpLineBuffer[]; double DnLineBuffer[],ColorDnLineBuffer[]; double UpBuffer[],DnBuffer[]; double dPriceShift; //---- Объявление стрингов string Symbol_,Word; //---- Объявление стрингов для текстовых меток string Up_Price_name,Dn_Price_name; //---- Объявление целых переменных начала отсчёта данных int min_rates_total; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit() { //---- проверка периодов графиков на корректность if(TimeFramerates_total || prev_calculated<=0)// проверка на первый старт расчёта индикатора { limit=rates_total-min_rates_total-1; // стартовый номер для расчёта всех баров LastCountBar=rates_total; } else limit=int(LastCountBar)+rates_total-prev_calculated; // стартовый номер для расчёта новых баров //---- индексация элементов в массивах как в таймсериях ArraySetAsSeries(time,true); //---- основной цикл расчёта индикатора for(bar=limit; bar>=0 && !IsStopped(); bar--) { //---- копируем вновь появившиеся данные в массив iTime if(CopyTime(Symbol_,TimeFrame,time[bar],1,iTime)<=0) return(RESET); if(time[bar]>=iTime[0] && time[bar+1]UpLineBuffer[bar]) clr=1; else clr=ColorUpLineBuffer[bar+1]; ColorUpLineBuffer[bar]=clr; if(DnLineBuffer[bar+1]DnLineBuffer[bar]) clr=1; else clr=ColorDnLineBuffer[bar+1]; ColorDnLineBuffer[bar]=clr; } else { UpLineBuffer[bar]=UpBuffer[bar]=UpLineBuffer[bar+1]; DnLineBuffer[bar]=DnBuffer[bar]=DnLineBuffer[bar+1]; ColorUpLineBuffer[bar]=ColorUpLineBuffer[bar+1]; ColorDnLineBuffer[bar]=ColorDnLineBuffer[bar+1]; } } //---- отображение ценовой метки if(ShowPrice) { int bar0=0; datetime time0=time[bar0]+1*PeriodSeconds(); SetRightPrice(0,Up_Price_name,0,time0,UpBuffer[bar0],Up_Price_color); SetRightPrice(0,Dn_Price_name,0,time0,DnBuffer[bar0],Dn_Price_color); } //---- ChartRedraw(0); return(rates_total); } //+------------------------------------------------------------------+ //| RightPrice creation | //+------------------------------------------------------------------+ void CreateRightPrice(long chart_id,// chart ID string name, // object name int nwin, // window index datetime time, // price level time double price, // price level color Color // Text color ) //---- { //---- ObjectCreate(chart_id,name,OBJ_ARROW_RIGHT_PRICE,nwin,time,price); ObjectSetInteger(chart_id,name,OBJPROP_COLOR,Color); ObjectSetInteger(chart_id,name,OBJPROP_BACK,true); ObjectSetInteger(chart_id,name,OBJPROP_WIDTH,2); //---- } //+------------------------------------------------------------------+ //| RightPrice reinstallation | //+------------------------------------------------------------------+ void SetRightPrice(long chart_id,// chart ID string name, // object name int nwin, // window index datetime time, // price level time double price, // price level color Color // Text color ) //---- { //---- if(ObjectFind(chart_id,name)==-1) CreateRightPrice(chart_id,name,nwin,time,price,Color); else ObjectMove(chart_id,name,0,time,price); //---- } //+------------------------------------------------------------------+