Navigation:Home > Content >

autodayfibs.mq5

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        

Recommend