Fragen von Anfängern MQL5 MT5 MetaTrader 5 - Seite 503

 
Vladimir Fionov:
Für Währungspaare, wenn Sie ein Limit setzen, alles funktioniert, aber für Zeitrahmen nicht funktioniert, auch wenn Sie es auf h1 Indikator nicht funktioniert

https://docs.mql4.com/ru/chart_operations/periodwindow

https://docs.mql4.com/ru/constants/chartconstants/enum_timeframes

RückgabewertZeitraum des aktuellen Diagramms (in Minuten).

if(Period() != 60)  return(-1); // для H1

Probieren Sie es aus, vielleicht klappt es ja.

if(Period() != PERIOD_H1)  return(-1);

Oder entfernen Sie Anführungszeichen.

Period - Документация на MQL4
  • docs.mql4.com
Period - Документация на MQL4
 
Vladimir Zubov:

https://docs.mql4.com/ru/chart_operations/periodwindow

https://docs.mql4.com/ru/constants/chartconstants/enum_timeframes

RückgabewertZeitraum des aktuellen Diagramms (in Minuten).

Probieren Sie es aus und sehen Sie, ob es funktioniert.

Vielen Dank, es hat funktioniert!!!
 
Eine weitere Frage, beim Hinzufügen eines #property strict am Anfang der Indikator gibt einen Fehler Array außerhalb des Bereichs in 'Indikator-Name' (100,41), wie man damit umgehen

 
Vladimir Fionov:
Eine weitere Frage, beim Hinzufügen am Anfang, wenn #property strengen Indikator gibt Fehler Array außerhalb des Bereichs in 'Indikator-Name' (100,41), wie man damit umgehen

Sie müssen das Array außerhalb des Bereichs reparieren. Lokalisierung des Problems in Ihrem Code: Zeile 100, Zeichen an Position 42.
 
Vladimir Fionov:

Was ist daran falsch?

  1. Korrektes Einfügen des Codes im Forum
  2. Sie sollten den Fehler beheben, dass die Grenzen des Arrays"ema[]" überschritten werden. Wahrscheinlich berechnen Sie die Variable"Grenze" falsch.
 
Karputov Vladimir:
  1. Code korrekt in das Forum einfügen
  2. Sie sollten den Fehler beheben, dass die Grenzen des Arrays"ema[]" überschritten werden. Wahrscheinlich berechnen Sie die Variable"Grenze" falsch.
Sorry, ich wusste nicht, über die Code-Einfügung, aber über den Code selbst, warum passiert das, wenn Sie #property strict einfügen und alles funktioniert ohne sie
 
Vladimir Fionov:
Es tut mir leid, ich wusste nicht, über die Code-Einfügung, aber wie für den Code selbst, warum passiert es, wenn Sie #property strict einfügen und alles funktioniert ohne sie?

Haben Sie die Hilfe in MetaEditor gesehen?

Die Arbeit mit Funktionen, der Geltungsbereich von Variablen und das Freigeben von Speicher in lokalen Arrays hat sich ebenfalls geändert. Da sich die Änderungen als ziemlich bedeutend herausstellten, wurde beschlossen, eine neue Eigenschaft #property strict einzuführen, um die Kompatibilität mit dem alten Ansatz zum Schreiben von MQL4-Programmen zu maximieren. Beim Erstellen eines neuen MQL4-Programms mit dem MQL4-Assistenten wird diese Eigenschaft immer zur Vorlage hinzugefügt.

Und so weiter:

Tabelle der Unterschiede zwischen den Compilern:

Alter MQL4-Compiler

Neuer MQL4-Compiler

Neuer MQL4-Compiler mit #property strict

Die Einstiegspunkte init(), start(), deinit() können beliebige Parameter und einen beliebigen Rückgabetyp haben

init(), start(), deinit(), links für Kompatibilität,

und die neuenOnInit(),OnStart(),OnCalculate(),OnTick(),OnTimer(),OnChartEvent(),OnTester(),OnDeinit() müssen genau ihren Signaturen entsprechen

Gleiche

Das Ergebnis der Funktion init() wird vom ausführenden Teilsystem in keiner Weise ausgewertet

Das Rückgabeergebnis der init()- und OnInit()-Funktionen wird vom ausführenden Subsystem in keiner Weise ausgewertet

Wenn OnInit() einen Wert ungleich Null zurückgibt, bleibt der Experte oder Indikator stehen und das Programm wird entladen.

Variablennamen können fast beliebig sein (außer reservierten Wörtern), einschließlich Sonderzeichen und Punkt.

Variablennamen dürfen keine Sonderzeichen und Punkte enthalten.

Die Listeder reservierten Wörter wurde erweitert, so dass gängige Wörter wie short, long, const usw. nicht genannt werden können.

Gleiche

Der Geltungsbereich einer Variablen reicht von der Deklaration (auch in einem verschachtelten Block) bis zum Ende der Funktion.

Gleiche

Sichtbarkeitsbereich einer Variablen - von der Deklaration bis zum Ende des Blocks, in dem die Variable deklariert ist.

Implizite Initialisierung aller Variablen (sowohl global als auch lokal) mit Nullen.

Das gleiche

Nur Initialisierung von globalen Variablen. Von den lokalen Variablen werden nur Strings implizit initialisiert

Lokale Arrays werden beim Verlassen der Funktion nicht freigegeben

Lokale Arrays werden beim Verlassen der Funktion freigegeben

Lokale Arrays werden beim Beenden freigegeben {}

DerFehler"Array out of range" führt nicht zu einem kritischen Fehler*.

Dasselbe. Außer bei Arrays von Strukturen und Klassen, für die dieser Fehler kritisch ist

"Array out of range" ist ein kritischer Fehler und führt zum Abbruch des Programms

Keine Strukturen und Klassen

Es gibtStrukturen und Klassen. Es erscheinen zusätzliche Datentypen.

Gleiche

Zeichenketten - Einzelbyte.

datetime - 32-Bit-Ganzzahl

Vordefinierte Variable Volume hat den Typ double

Zeichenketten - Unicode.

datetime - 64-Bit-Ganzzahl

Volume ist eine vordefinierte Variable vom Typ long.

Gleiche

ArrayCopyRates() erzeugt virtuelles Kopieren in Array double[][6]

ArrayCopyRates() erzeugt ein virtuelles Kopieren in das Array MqlRates[]. Aus Kompatibilitätsgründen bleibt das Kopieren in das Array double[][6] bestehen, aber dieses Kopieren ist nicht virtuell, sondern real.

Auch.

Funktionen dürfen keine Werte zurückgeben, auch wenn sie einen Typ haben. Zu diesem Zweck fügt der Compiler automatisch return(0) am Ende der Funktion ein.

Dasselbe.

Funktionen beliebigen Typs müssen immer einen Wert zurückgeben

Anzahl der gleichzeitig geöffneten Dateien - 32

Anzahl der gleichzeitig geöffneten Dateien - 64

Gleiche

Dateien werden immer im gemeinsamen Modus geöffnet **

Der Freigabemodus muss explizit mit FILE_SHARE_READ und/oder FILE_SHARE_WRITE deklariert werden

Gleiche

Die Skripte im Eingabefenster zeigen die Namen derexternen Variablen

Die Namen derexternen undEingabevariablen werden im Eingabeparameterfenster für die Skripte im Modus show_inputs angezeigt.

Bei Skripten im show_inputs-Modus werden String-Kommentare im Eingabefenster anstelle vonexternen undEingabevariablennamen angezeigt

* Sie sollten besonders auf den Fehler "Array out of range" achten - viele alte benutzerdefinierte Indikatoren erzeugen diesen Fehler im neuen Compiler im Strict-Modus, wenn sie auf einem Chart laufen. Es ist wünschenswert, die Ursache zu finden und sie zu beseitigen.

** Im neuen MQL4 und MQL5 sind die Flags FILE_SHARE_READ und FILE_SHARE_WRITE für den File-Sharing-Modus verantwortlich, im alten MQL4 gab es sie nicht.

Препроцессор - Документация на MQL4
  • docs.mql4.com
Препроцессор - Документация на MQL4
 
Vladimir Fionov:
Sag mir, was los ist?
  int idx;
  int counted = IndicatorCounted();
  if (counted < 0) return (-1);
  if (counted > 0) counted--;
  int limit = Bars - counted;
  if(counted == 0) limit-=1;
Versuchen Sie, eine Zeile wie diese hinzuzufügen.
 
Vladimir Fionov:

Tut mir leid, wenn ich Sie störe, aber jetzt kommt dieser Fehler

39. Platz.

Gleicher Fehler, Array außerhalb des Bereichs?
 
Vladimir Zubov:
Gleicher Fehler, Array außerhalb des Bereichs?
YES
Grund der Beschwerde: