Скрипты: Monthly Weekly Levels

 

Monthly Weekly Levels:

Скрипт отображает на графике месячные и недельные уровни.

Monthly Weekly Levels

Автор: Taras Slobodyanik

 
Скрипт не компилируется. Пишет - 'iLow' - ambiguous call to overloaded function with the same parameters mn1_w1_levels.mq5 113 19

 

Новый МТ5 поддерживает эти функции по умолчанию, поэтому можно просто их удалить из кода.

Перезалил.

 
Спасибо. Заработало!
 

Здравствуйте

почему-то после копирования индикатора в папку indicators он не отображается в навигаторе mt5.

Компиляция также не помогает.

Есть решение?

 
kehrman:

Привет

По какой-то причине индикатор не отображается в навигаторе mt5 после копирования его в папку indicators.

Компиляция также не помогает.

Есть решение?

Привет ,


Я модифицировал этот скрипт и протестировал его. Он работает для меня.

Файлы:
 

Скачал скрипт.

Вероятно, автор не перезалил код советника или какая-либо другая причина, но скрипт на 27-03-2023 не рабочий.
После компиляции появилось сообщение о 14-ти ошибках.

Почитал предыдущие комментарии.
Закомментировал три блока кода, о которых писал автор, что их можно удалить.

После чего при компиляции выскакивала синтаксическая ошибка (лишняя запятая в 220й строке).
Удалил запятую и скомпилировал код.
Все ошибку исчезли и скрипт теперь работает на графике.

Исправленный код ниже:

//+------------------------------------------------------------------+
//|                                                MN1_W1_Levels.mq4 |
//|                                                  © Tecciztecatl  |
//+------------------------------------------------------------------+
#property copyright     "© Tecciztecatl 2016"
#property link          "113411@bk.ru"
#property version       "1.00"
#property description   "The script shows the highs and lows of weeks and months."
#property script_show_inputs
#property strict

input  int      days=200;                    //Number of days
extern string   comm0="";                    //-     -   -- ---- Weeks ---- --   -     -
extern color    W1_Color=LimeGreen;          //W1 Color of lines
input  int      W1_Width=3;                  //W1 Line Width
extern ENUM_LINE_STYLE W1_style=STYLE_SOLID; //W1 Style of lines 
extern string   comm1="";                    //-     -   -- ---- Months ---- --   -     -
extern color    MN1_Color=Orange;            //MN1 Color of lines
input  int      MN1_Width=3;                 //MN1 Line Width
extern ENUM_LINE_STYLE MN1_style=STYLE_SOLID;//MN1 Style of lines 

enum  choice0 {Trend_Line=0,Horizontal_Line=1};
input choice0 object=Trend_Line;             //Trend or Horizontal line

datetime    ArrDate[1];
double      ArrDouble[1];
MqlDateTime time;
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   DelObject();

   int weeks=(int)MathCeil(days/7)+1;
   if(weeks>Bars(_Symbol,PERIOD_W1)) weeks=Bars(_Symbol,PERIOD_W1)-1;
   if(weeks<0) {Alert("No historical data!"); return;}
   for(int i=weeks; i>=0; i--)
     {
      datetime w1=iTime(_Symbol,PERIOD_W1,i);
      TimeToStruct(w1,time);
      if(object==Trend_Line)
        {
         SetTrendLine("W1_High_"+(string)i+"_ln",
                      w1+86400,
                      iHigh(_Symbol,PERIOD_W1,i),
                      w1+7*86400,
                      W1_Color,
                      W1_Width,
                      W1_style,
                      0x0007ffff);
         SetTrendLine("W1_Low_"+(string)i+"_ln",
                      w1+86400,
                      iLow(_Symbol,PERIOD_W1,i),
                      w1+7*86400,
                      W1_Color,
                      W1_Width,
                      W1_style,
                      0x0007ffff);
        }
      else
        {
         SetHLine("W1_High_"+(string)i+"_ln",
                  iHigh(_Symbol,PERIOD_W1,i),
                  W1_Color,
                  W1_Width,
                  W1_style);
         SetHLine("W1_Low_"+(string)i+"_ln",
                  iLow(_Symbol,PERIOD_W1,i),
                  W1_Color,
                  W1_Width,
                  W1_style);
        }
     }

   TimeToStruct(TimeCurrent(),time);
   int month=(int)MathCeil((days-time.day)/30)+1;
   if(month>Bars(_Symbol,PERIOD_MN1)) month=Bars(_Symbol,PERIOD_MN1)-1;
   if(month<0) {Alert("No historical data!"); return;}
   for(int i=month; i>=0; i--)
     {

      datetime mn=iTime(_Symbol,PERIOD_MN1,i);
      TimeToStruct(mn,time);

      if(object==Trend_Line)
        {
         SetTrendLine("MN1_High_"+(string)i+"_ln",
                      mn,
                      iHigh(_Symbol,PERIOD_MN1,i),
                      mn+DayMonth(time.mon,mn)*86400,
                      MN1_Color,
                      MN1_Width,
                      MN1_style,
                      0x000fffff);
         SetTrendLine("MN1_Low_"+(string)i+"_ln",
                      mn,
                      iLow(_Symbol,PERIOD_MN1,i),
                      mn+DayMonth(time.mon,mn)*86400,
                      MN1_Color,
                      MN1_Width,
                      MN1_style,
                      0x000fffff);
        }
      else
        {
         SetHLine("MN1_High_"+(string)i+"_ln",
                  iHigh(_Symbol,PERIOD_MN1,i),
                  MN1_Color,
                  MN1_Width,
                  MN1_style);
         SetHLine("MN1_Low_"+(string)i+"_ln",
                  iLow(_Symbol,PERIOD_MN1,i),
                  MN1_Color,
                  MN1_Width,
                  MN1_style);
        }

     }

   ChartRedraw();
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int DayMonth(int mon,datetime ttime)
  {
   int leap_year;
   TimeToStruct(ttime,time);
   switch(mon)
     {
      case  1:
      case  3:
      case  5:
      case  7:
      case  8:
      case 10:
      case 12:
         return(31);
      case  2:
         leap_year=time.year;
         if(time.year%100==0)
            leap_year/=100;
         return((leap_year%4==0)? 29 : 28);
      case  4:
      case  6:
      case  9:
      case 11:
         return(30);
     }
   return(0);
  }
//// Создаём линию
void SetTrendLine(
                  const string         name,
                  datetime             time1,
                  double               price1,
                  datetime             time2,
                  color                cvet,
                  int                  widthL,
                  ENUM_LINE_STYLE      styleL,
                  int                  hide_TF
                  )
  {
   if(ObjectFind(0,name)<0) ObjectCreate(0,name,OBJ_TREND,0,time1,price1,time2,price1);
   ObjectMove(0,name,0,time1,price1);
   ObjectMove(0,name,1,time2,price1);
   ObjectSetInteger(0,name,OBJPROP_COLOR,cvet);
   ObjectSetInteger(0,name,OBJPROP_STYLE,styleL);
   ObjectSetInteger(0,name,OBJPROP_WIDTH,widthL);
   ObjectSetInteger(0,name,OBJPROP_SELECTABLE,false);
   ObjectSetInteger(0,name,OBJPROP_SELECTED,false);
   ObjectSetInteger(0,name,OBJPROP_BACK,false);
   ObjectSetInteger(0,name,OBJPROP_ZORDER,1);
   ObjectSetInteger(0,name,OBJPROP_RAY_RIGHT,false);
   ObjectSetInteger(0,name,OBJPROP_HIDDEN,true);
   ObjectSetInteger(0,name,OBJPROP_TIMEFRAMES,hide_TF);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
/*
datetime iTime(string symbol,ENUM_TIMEFRAMES timeframe,int index)
  {
   if(index<0) index=0;
   if(CopyTime(symbol, timeframe, index, 1, ArrDate)>0) return(ArrDate[0]);
   else return(-1);
  }
  */
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
/*
double iLow(string symbol,ENUM_TIMEFRAMES timeframe,int index)
  {
   if(index < 0) return(-1);
   if(CopyLow(symbol, timeframe, index, 1, ArrDouble)>0) return(ArrDouble[0]);
   else return(-1);
  }
  */
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
/*
double iHigh(string symbol,ENUM_TIMEFRAMES timeframe,int index)
  {
   if(index < 0) return(-1);
   if(CopyHigh(symbol, timeframe, index, 1, ArrDouble)>0) return(ArrDouble[0]);
   else return(-1);
  }
  */
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void SetHLine(
              const string         name,
              double               price1,
              color                cvet,
              int                  widthL,
              ENUM_LINE_STYLE      styleL
              )
  {
   if(ObjectFind(0,name)<0) ObjectCreate(0,name,OBJ_HLINE,0,0,price1);
   ObjectSetDouble(0,name,OBJPROP_PRICE,price1);
   ObjectSetInteger(0,name,OBJPROP_COLOR,cvet);
   ObjectSetInteger(0,name,OBJPROP_STYLE,styleL);
   ObjectSetInteger(0,name,OBJPROP_WIDTH,widthL);
   ObjectSetInteger(0,name,OBJPROP_SELECTABLE,false);
   ObjectSetInteger(0,name,OBJPROP_SELECTED,false);
   ObjectSetInteger(0,name,OBJPROP_BACK,false);
   ObjectSetInteger(0,name,OBJPROP_ZORDER,1);
   ObjectSetInteger(0,name,OBJPROP_RAY_RIGHT,false);
   ObjectSetInteger(0,name,OBJPROP_HIDDEN,true);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void DelObject()
  {
   for(int i=ObjectsTotal(0,0,-1)-1;i>=0;i--)
     {
      string temp=ObjectName(0,i,0,-1);
      if(StringFind(temp,"_ln",0)>=0)
         ObjectDelete(0,temp);
     }
  }
//+------------------------------------------------------------------+
 
Alexandr #:

Скачал скрипт.

Вероятно, автор не перезалил код советника или какая-либо другая причина, но скрипт на 27-03-2023 не рабочий.
После компиляции появилось сообщение о 14-ти ошибках.

Зип-архив не обновляется, в нем самая первая версия.
Все остальное компилируется без ошибок (Просмотр и .mq5-файл)

 
Taras Slobodyanik #:

Зип-архив не обновляется, в нем самая первая версия.
Все остальное компилируется без ошибок (Просмотр и .mq5-файл)

Не знал. что обновления через просмотр кода доступны.
Поэтому был удивлен. что столько ошибок после компиляции.
Спасибо за пояснение.

 
Этот скрипт может быть просто частью системы, 1, условие if внутри всегда истинно, больше ничего нет, 2, определение массива не отражается в дальнейшем. Лично я считаю, что просто нарисовать месячную линию, недельную линию для того, чтобы что это, не чувствовал никакого особого использования, но скрипт функции вызова, високосный год логики все еще стоит изучить.