Skripte: Monthly Weekly Levels

 

Monthly Weekly Levels:

Das Skript zeigt die monatlichen und wöchentlichen Levels am Chart.

Monthly Weekly Levels

Autor: Taras Slobodyanik

 
Das Skript lässt sich nicht kompilieren. Es sagt - 'iLow' - zweideutiger Aufruf einer überladenen Funktion mit denselben Parametern mn1_w1_levels.mq5 113 19

 

Der neue MT5 unterstützt diese Funktionen standardmäßig, Sie können sie also einfach aus dem Code entfernen.

Neu hochgeladen.

 
Ich danke Ihnen. Es hat geklappt!
 

Hallo

aus irgendeinem Grund wird der Indikator nicht im mt5-Navigator angezeigt, nachdem ich ihn in den Indikatorenordner kopiert habe.

Auch das Kompilieren hilft nicht.

Gibt es eine Lösung?

 
kehrman:

Hallo

aus irgendeinem Grund wird der Indikator nicht im mt5-Navigator angezeigt, nachdem er in den Indikatorenordner kopiert wurde.

Kompilieren hilft auch nicht.

jede Lösung?

Hallo ,


Ich habe dieses Skript modifiziert und getestet. Hat bei mir funktioniert.

Dateien:
 

Habe das Skript heruntergeladen.

Wahrscheinlich hat der Autor den EA-Code nicht neu hochgeladen oder aus einem anderen Grund, aber das Skript vom 27-03-2023 funktioniert nicht.
Nach dem Kompilieren erschien eine Meldung über 14 Fehler.

Ich habe die vorherigen Kommentare gelesen.
Ich habe drei Codeblöcke auskommentiert, zu denen der Autor schrieb, dass sie gelöscht werden können.

Daraufhin erschien beim Kompilieren ein Syntaxfehler (ein zusätzliches Komma in Zeile 220).
Ich habe das Komma entfernt und den Code kompiliert.
Alle Fehler sind verschwunden, und das Skript funktioniert jetzt im Diagramm.

Der korrigierte Code steht unten:

//+------------------------------------------------------------------+
//|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;                    //Anzahl der Tage
extern string   comm0="";                    //- - - -- ---- Wochen ---- -- - - - -
extern color    W1_Color=LimeGreen;          //W1 Farbe der Linien
input  int      W1_Width=3;                  //W1 Zeilenbreite
extern ENUM_LINE_STYLE W1_style=STYLE_SOLID; //W1 Stil der Zeilen 
extern string   comm1="";                    //- - - -- ---- Monate ---- -- - - - -
extern color    MN1_Color=Orange;            //MN1 Farbe der Linien
input  int      MN1_Width=3;                 //MN1 Zeilenbreite
extern ENUM_LINE_STYLE MN1_style=STYLE_SOLID;//MN1 Stil der Zeilen 

enum  choice0 {Trend_Line=0,Horizontal_Line=1};
input choice0 object=Trend_Line;             //Trend oder Horizontale Linie

datetime    ArrDate[1];
double      ArrDouble[1];
MqlDateTime time;
//+------------------------------------------------------------------+
//| Skript-Programmstartfunktion|
//+------------------------------------------------------------------+
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);
  }
//// Erstellen einer Zeile
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 #:

Ich habe das Skript heruntergeladen.

Wahrscheinlich hat der Autor den EA-Code nicht neu hochgeladen oder einen anderen Grund, aber das Skript auf 27-03-2023 funktioniert nicht.
Nach der Kompilierung erschien eine Meldung über 14 Fehler.

Zip-Archiv ist nicht aktualisiert, es enthält die allererste Version.
Alles andere kompiliert ohne Fehler (Vorschau und .mq5-Datei).

 
Taras Slobodyanik #:

Das Zip-Archiv wird nicht aktualisiert, es enthält die allererste Version.
Alles andere kompiliert ohne Fehler (Vorschau und .mq5-Datei).

Ich wusste nicht, dass Updates durch Code Review verfügbar sind.
Daher war ich überrascht, dass ich nach der Kompilierung so viele Fehler sah.
Danke für die Klarstellung.

 
Dieses Skript kann nur ein Teil des Systems sein, 1, die Wenn-Bedingung im Inneren ist immer wahr, es gibt keine andere, 2, die Definition des Arrays wird später nicht reflektiert. Persönlich denke ich, zeichnen Sie einfach eine monatliche Linie, wöchentliche Linie, um was es ist, fühlte sich keine besondere Verwendung, aber das Skript Funktionsaufruf, Schaltjahr Logik ist immer noch wert zu lernen.