Time: 2010-09-23 | Download file:autodayfibs.mq5
//+------------------------------------------------------------------+ //| AutoDayFibs.mq5 | //| Copyright © 2005-2008, Jason Robinson (jnrtrading) | //| http://www.spreadtrade2win.com | //+------------------------------------------------------------------+ //---- авторство индикатора #property copyright "Copyright © 2005-2008, Jason Robinson (jnrtrading)" //---- ссылка на сайт автора #property link "http://www.spreadtrade2win.com" //---- номер версии индикатора #property version "1.00" //---- отрисовка индикатора в главном окне #property indicator_chart_window //---- для расчёта и отрисовки индикатора не использовано буферов #property indicator_buffers 0 //---- использовано ноль графических построений #property indicator_plots 0 //+----------------------------------------------+ //| объявление перечислений | //+----------------------------------------------+ enum Hour //Тип константы { H00=0, //00 H01, //01 H02, //02 H03, //03 H04, //04 H05, //05 H06, //06 H07, //07 H08, //08 H09, //09 H10, //10 H11, //11 H12, //12 H13, //13 H14, //14 H15, //15 H16, //16 H17, //17 H18, //18 H19, //19 H20, //20 H21, //21 H22, //22 H23, //23 }; //+-----------------------------------+ //| объявление перечисления | //+-----------------------------------+ enum Number { Number_0, Number_1, Number_2, Number_3 }; //+-----------------------------------+ //| объявление перечисления | //+-----------------------------------+ 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_ //Штрих-пунктирная линия с двойными точками }; //+----------------------------------------------+ //| Входные параметры индикатора | //+----------------------------------------------+ input bool AutomaticallyAdjustToToday = true; //подстройка под текущие цены input Hour TimeToAdjust=H00; //час переключения Фиб input uint iDaysBackForHigh=0; //количество дней возврата назад для получения хая input uint iDaysBackForLow=0; //количество дней возврата назад для получения лоу input uint TextSize=10; //размер текста //---- input color Color_fib000 = clrBlueViolet; //цвет уровня fib000 input STYLE Style_fib000 = SOLID_; //стиль линии уровня fib000 input Width Width_fib000 = Width_2; //толщина линии уровня fib000 //---- input color Color_fib236 = clrBlueViolet; //цвет уровня fib236 input STYLE Style_fib236 = SOLID_; //стиль линии уровня fib236 input Width Width_fib236 = Width_2; //толщина линии уровня fib236 //---- input color Color_fib382 = clrBlueViolet; //цвет уровня fib382 input STYLE Style_fib382 = SOLID_; //стиль линии уровня fib382 input Width Width_fib382 = Width_2; //толщина линии уровня fib382 //---- input color Color_fib500 = clrBlueViolet; //цвет уровня fib500 input STYLE Style_fib500 = SOLID_; //стиль линии уровня fib500 input Width Width_fib500 = Width_2; //толщина линии уровня fib500 //---- input color Color_fib618 = clrBlueViolet; //цвет уровня fib618 input STYLE Style_fib618 = SOLID_; //стиль линии уровня fib618 input Width Width_fib618 = Width_2; //толщина линии уровня fib618 //---- input color Color_fib764 = clrBlueViolet; //цвет уровня fib764 input STYLE Style_fib764 = SOLID_; //стиль линии уровня fib764 input Width Width_fib764 = Width_2; //толщина линии уровня fib764 //---- input color Color_fib1000 = clrBlueViolet; //цвет уровня fib1000 input STYLE Style_fib1000 = SOLID_; //стиль линии уровня fib1000 input Width Width_fib1000 = Width_2; //толщина линии уровня fib1000 //---- input color Color_fib1618 = clrBlueViolet; //цвет уровня fib1618 input STYLE Style_fib1618 = SOLID_; //стиль линии уровня fib1618 input Width Width_fib1618 = Width_2; //толщина линии уровня fib1618 //---- input color Color_fib2618 = clrBlueViolet; //цвет уровня fib2618 input STYLE Style_fib2618 = SOLID_; //стиль линии уровня fib2618 input Width Width_fib2618 = Width_1; //толщина линии уровня fib2618 //---- input color Color_fib4236 = clrBlueViolet; //цвет уровня fib4236 input STYLE Style_fib4236 = SOLID_; //стиль линии уровня fib4236 input Width Width_fib4236 = Width_2; //толщина линии уровня fib4236 //+----------------------------------------------+ double fib000, fib236, fib382, fib500, fib618, fib764, fib1000, fib1618, fib2618, fib4236, range, prevRange; bool objectsExist,highFirst; //---- Объявление целых переменных начала отсчёта данных int min_rates_total,DaysBackForHigh,DaysBackForLow; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ void OnInit() { //---- Инициализация переменных начала отсчёта данных DaysBackForHigh=int(iDaysBackForHigh); DaysBackForLow=int(iDaysBackForLow); min_rates_total=int((1+MathMax(DaysBackForHigh,DaysBackForLow))*PeriodSeconds(PERIOD_D1)/PeriodSeconds(PERIOD_CURRENT)); prevRange=0; objectsExist=true; //---- определение точности отображения значений индикатора IndicatorSetInteger(INDICATOR_DIGITS,_Digits); //---- создание меток для отображения в DataWindow и имени для отображения в отдельном подокне и во всплывающей подсказке IndicatorSetString(INDICATOR_SHORTNAME,"AutoDayFibs"); //---- } //+------------------------------------------------------------------+ //| Custom indicator deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //---- ObjectDelete(0,"fib000"); ObjectDelete(0,"fib000_label"); ObjectDelete(0,"fib236"); ObjectDelete(0,"fib236_label"); ObjectDelete(0,"fib382"); ObjectDelete(0,"fib382_label"); ObjectDelete(0,"fib500"); ObjectDelete(0,"fib500_label"); ObjectDelete(0,"fib618"); ObjectDelete(0,"fib618_label"); ObjectDelete(0,"fib764"); ObjectDelete(0,"fib764_label"); ObjectDelete(0,"fib1000"); ObjectDelete(0,"fib1000_label"); ObjectDelete(0,"fib1618"); ObjectDelete(0,"fib1618_label"); ObjectDelete(0,"fib2618"); ObjectDelete(0,"fib2618_label"); ObjectDelete(0,"fib4236"); ObjectDelete(0,"fib4236_label"); //---- } //+------------------------------------------------------------------+ //| 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(_Period>=PERIOD_D1 || rates_total=0 && tm.hour =DaysBackForLow && tm.hour<=H23) { DaysBackForHigh=H00; DaysBackForLow =H00; } } double iLow[1],iHigh[1]; if(CopyLow(NULL,PERIOD_D1,DaysBackForLow,1,iLow)<1)return(0); if(CopyHigh(NULL,PERIOD_D1,DaysBackForHigh,1,iHigh)<1)return(0); range=iHigh[0]-iLow[0]; for(int iii=0; iii