//+------------------------------------------------------------------+ //| BollingerBands_Box.mq5 | //| Copyright © 2018, Nikolay Kositsin | //| Khabarovsk, farria@mail.redcom.ru | //+------------------------------------------------------------------+ //---- авторство индикатора #property copyright "Copyright © 2018, Nikolay Kositsin" //---- ссылка на сайт автора #property link "farria@mail.redcom.ru" //---- номер версии индикатора #property version "1.00" //---- отрисовка индикатора в главном окне #property indicator_chart_window //---- для расчёта и отрисовки индикатора не использовано ни одного буфера #property indicator_buffers 0 //---- использовано ноль графических построений #property indicator_plots 0 //+----------------------------------------------+ //| объявление констант | //+----------------------------------------------+ #define RESET 0 // Константа для возврата терминалу команды на пересчет индикатора //+----------------------------------------------+ //| Входные параметры индикатора | //+----------------------------------------------+ input string SirName="BollingerBands_Box"; //Имя объекта input ENUM_TIMEFRAMES Timeframe=PERIOD_D1; //Таймфрейм индикатора для расчета индикатора input uint NumberofBar=1; //Номер бара для расчета индикатора input uint BBPeriod=20; //Период для расчета средней линии input double StdDeviation=2.0001; //Кол-во отклонений input ENUM_APPLIED_PRICE applied_price=PRICE_CLOSE;//Тип цены input int Shift=0; //Сдвиг индикатора по горизонтали в барах input bool ShowPrice=true; //показывать ценовые метки input color Upper_color=clrLimeGreen; //Цвет верхней ценовой метки input color Middle_color=clrSlateGray; //Цвет средней ценовой метки input color Lower_color=clrRed; //Цвет нижней ценовой метки input uint BarsTotal=30; //количество баров прямоугольников input uint RightTail=5; //выступ прямоугольников за нулевой бар вправо в барах текущего графика input color Color_Res=C'157,255,255'; //Цвет верхней коробки input color Color_Sup=C'255,176,255'; //Цвет нижней коробки //+----------------------------------------------+ //--- объявление целочисленных переменных для хендлов индикаторов int Ind_Handle; string UpBoxName,DnBoxName; string upper_name,middle_name,lower_name; uint SecondRightTail,SecondLeftTail; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- получение хендла индикатора BollingerBands Ind_Handle=iBands(Symbol(),Timeframe,BBPeriod,0,StdDeviation,applied_price); if(Ind_Handle==INVALID_HANDLE) { Print(" Не удалось получить хендл индикатора BollingerBands"); return(INIT_FAILED); } //---- SecondRightTail=RightTail*PeriodSeconds(PERIOD_CURRENT); //---- Инициализация стрингов upper_name=SirName+" upper text lable"; middle_name=SirName+" middle text lable"; lower_name=SirName+" lower text lable"; UpBoxName=SirName+"_Up"; DnBoxName=SirName+"_Dn"; //---- определение точности отображения значений индикатора IndicatorSetInteger(INDICATOR_DIGITS,_Digits); //---- создание меток для отображения в DataWindow и имени для отображения в отдельном подокне и во всплывающей подсказке IndicatorSetString(INDICATOR_SHORTNAME,"BollingerBands_Box"); //---- завершение инициализации return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Custom indicator deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //---- ObjectsDeleteAll(0,SirName,0,-1); //---- ChartRedraw(0); } //+------------------------------------------------------------------+ //| Custom indicator 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(BarsCalculated(Ind_Handle)