Scripts: Monthly Weekly Levels

 

Monthly Weekly Levels:

The script displays the monthly and weekly levels on the chart.

Monthly Weekly Levels

Author: Taras Slobodyanik

 
The script does not compile. It says - 'iLow' - ambiguous call to overloaded function with the same parameters mn1_w1_levels.mq5 113 19

 

The new MT5 supports these features by default, so you can just remove them from the code.

Reuploaded.

 
Thank you. It worked!
 

Hi

for some reason the indicator won't show up in the mt5 navigator after copying it into the indicators folder.

compiling also doesn't help.

any solution?

 
kehrman:

Hi

for some reason the indicator won't show up in the mt5 navigator after copying it into the indicators folder.

compiling also doesn't help.

any solution?

Hi ,


I have modified this script and tested it. Worked for me.

Files:
 

Downloaded the script.

Probably the author did not reupload the EA code or some other reason, but the script on 27-03-2023 does not work.
After compilation, a message about 14 errors appeared.

I read the previous comments.
I commented out three code blocks, about which the author wrote that they could be deleted.

After that, a syntax error appeared during compilation (an extra comma in line 220).
I removed the comma and compiled the code.
All the errors disappeared and the script now works on the chart.

The corrected code is below:

//+------------------------------------------------------------------+
//|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 programme 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);
  }
//// Creating a line
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 #:

Downloaded the script.

Probably the author did not reupload the EA code or some other reason, but the script on 27-03-2023 does not work.
After compilation, a message about 14 errors appeared.

Zip archive is not updated, it contains the very first version.
Everything else compiles without errors (Preview and .mq5 file).

 
Taras Slobodyanik #:

Zip archive is not updated, it contains the very first version.
Everything else compiles without errors (Preview and .mq5 file).

I didn't know that updates are available through code review.
So I was surprised to see so many errors after compilation.
Thanks for the clarification.

 
This script may just be a part of the system, 1, the if condition inside is always true, there is no else, 2, the definition of the array is not reflected later. Personally, I think, simply draw a monthly line, weekly line in order to what is it, did not feel any special use, but the script function call, leap year logic is still worth learning.