Fehler, Irrtümer, Fragen - Seite 2458

 

Beim Wechsel von MQL4 zu MQL5 bin ich auf eine Panne gestoßen:

Code:

ResetLastError();

int ObjTotal = ObjectsTotal(0);

int Error = GetLastError();

zurück:

ObjTotal = 0.

Fehler = 4022

Was ist dieser Fehler und warum wird er nicht in der Dokumentation erwähnt?

Ich habe verschiedene Varianten ausprobiert: ObjectsTotal(0, -1, -1), ObjectsTotal(ChartID(), 0, OBJ_TREND), usw.

Das Ergebnis ist das gleiche.

Wie kann das funktionieren?

Terminal: MetaTrader 5, Version 5.00 build 2025.
 
Игорь Евдокимов:

Hinweis: Wenn Sie eine Frage stellen wollen, geben Sie den VOLLEN Code ein, nicht nur einen Teil davon.

Was nützt das: Jeder kann Ihren Code übernehmen und ihn selbst ausführen. Und fast niemand schaut sich klobigen Code an - klobiger Code ist respektlos.

Beispiel für Ihren Code:

//+------------------------------------------------------------------+
//|                                                            1.mq5 |
//|                              Copyright © 2019, Vladimir Karputov |
//|                                           http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2019, Vladimir Karputov"
#property link      "http://wmua.ru/slesar/"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   ResetLastError();
   int ObjTotal=ObjectsTotal(0);
   int Error=GetLastError();
   Print("ObjectsTotal: ",ObjTotal,", GetLastError: ",Error);
//---
  }
//+------------------------------------------------------------------+

Führen Sie es in einem Diagramm aus, das keine grafischen Objekte enthält. Ergebnis:

2019.05.10 13:26:59.169 1 (EURUSD,H1)   ObjectsTotal: 0, GetLastError: 0

Das heißt, es liegt kein Fehler vor.


Verwendung des Terminals:

2019.05.10 13:25:35.665 MetaTrader 5 x64 build 2025 started (MetaQuotes Software Corp.)
2019.05.10 13:25:35.668 Windows 10 (build 17763) x64, IE 11, UAC, Intel Core i3-3120 M  @ 2.50 GHz, Memory: 3712 / 8077 Mb, Disk: 77 / 415 Gb, GMT+2
2019.05.10 13:25:35.668 C:\Users\barab\AppData\Roaming\MetaQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075
Dateien:
1.mq5  2 kb
 
Vladimir Karputov:

Ein Ratschlag: Wenn Sie etwas fragen wollen, geben Sie den VOLLEN Code ein, nicht nur einen Teil.

Danke für den Rat, das werde ich tun.

Die Frage bleibt jedoch offen.

Zur Verdeutlichung: Wenn das Codestück aus dem vorherigen Beitrag in der OnDeinit()-Funktion des Indikators enthalten ist, sieht das Ergebnis so aus:

2019.05.10 14:08:20.105 PtS (EURUSD,H1) ObjectsTotal: 0, GetLastError: 4022

Wenn Sie den gleichen Code ausführen, nachdem Sie den Indikator aus dem Diagramm entfernt haben, wie das Skript (1.mq5 aus dem vorherigen Beitrag), erhalten wir

2019.05.10 14:08:33.609 1 (EURUSD,H1) ObjectsTotal: 8575, GetLastError: 0

Bitte helfen Sie mir, den Grund zu verstehen.

Meine Herren Entwickler! Worin besteht dieser Fehler, der nicht in der Dokumentation enthalten ist?

 
Vladislav Andruschenko :

Fehler im Strategietester während der Optimierung.

"Aufgabe vom Prüfer abgelehnt "

Zum Beispiel, wenn Ihre Kontowährung EUR ist,

  • EURJPY Kein Problem
  • Fehler bei GBPJPY


Wenn Ihre Kontowährung USD ist

  • USDCAD kein Problem
  • USDJPY Kein Problem
  • Fehler bei EURAUD


erscheint, wenn andere Währungspaare im Code verwendet werden.

In meinem Beispiel wird die Berechnung des dynamischen Loses verwendet



d.h. wenn der EA den Preis einer anderen Währung anfordert.

@Vladislav Andruschenko

Hallo, haben Sie eine Antwort oder eine Lösung für dieses Problem erhalten?

 
Vladimir Pastushak:

Wenn der Zeitplan/Zeitraum geändert wird, erhält PBB den Wert 10, unabhängig davon, welchen Wert Sie im Eingabefeld angegeben haben.

Im Moment der Neuinitialisierung ist es so, als wäre es der erste Lauf.

Es gibt zwei Möglichkeiten, Ihr Problem zu lösen

1 - Speichern des PBB-Wertes in globalen Variablen und Abrufen des Zeitraums von dort.

2 - Wenn OnChartEvent auslöst, reinitialisieren Sie den MA-Indikator und erhalten ein neues Handle...

Alle Optionen wurden geprüft. Das funktioniert nicht.

Fehler in MQL5.

Es werden keine neuen Werte initialisiert. Nur bei Parametereingabe int PBB_=. Keine anderen Optionen. Das ist ganz und gar nicht gut.

 
Uladzimir Izerski:

Ich habe alle Optionen geprüft. Funktioniert nicht.

Fehler im MQL5-Programm.

Neue Werte werden nicht initialisiert. Nur bei Eingabe des Parameters int PBB_=. Keine anderen Optionen. Das ist ganz und gar nicht gut.

In MQL ist alles in Ordnung, Sie verstehen nur nicht, was Sie in Ihrem Code tun und wie alles funktioniert...

Noch einmal: Wenn SieChartSetSymbolPeriod(0,_Symbol,_Period) aufrufen;

Sie setzen alles auf die Standardeinstellungen zurück...

Alternativ dazu können Sie mit inite einen Wert aus Ihrem Textfeld abfragen.

Wenn Sie den Indikator zum ersten Mal starten, wird alles erstellt, und wenn Sie die Daten im Feld ändern, wird ein neuer Aufruf gestartet und der Wert aus Ihrem Textfeld gesetzt...

 
Vladimir Pastushak:

In MQL ist alles in Ordnung, Sie verstehen nur nicht, was Sie im Code tun und wie alles funktioniert...

Noch einmal: Wenn SieChartSetSymbolPeriod(0,_Symbol,_Period) aufrufen;

Sie setzen alles auf die Standardeinstellungen zurück...

Alternativ dazu können Sie mit inite einen Wert aus Ihrem Textfeld abfragen.

Nach der Logik, dem ersten Start des Indikators, wird alles erstellt, aber wenn Sie Daten im Feld ändern, gibt es einen neuen Aufruf in der Einheit und Werteinstellung aus Ihrem Textfeld...

Ich habe es mit dem Textfeld und über GlobalVariable versucht, aber ich habe noch nie etwas ausprobiert. Es ist so leise wie in einem Panzer.

In einer anderen Variante funktioniertOnCalculate ohne Probleme.

 
Uladzimir Izerski:

Ich habe es sowohl über ein Textfeld als auch über GlobalVariable und alles andere versucht. Es ist so leise wie ein Panzer.

Die andere Version von OnCalculate funktioniert ohne Probleme.

Das bedeutet, dass Sie etwas falsch machen

 
Wenn ich auf mein Konto zugreife, öffnet sich ein Fenster und sagt, dass ich die unvorbereiteten "Zeilen" nicht lesen soll, obwohl es heißt, dass die Autorisierung die Verbindung zum Konto erlaubt... Was soll ich tun?
 
Vladimir Pastushak:

Dann machen Sie etwas falsch.

Sie haben den Code bereits veröffentlicht.

Wenn ich ungeschickt bin, muss jemand ein Profi sein. Ich sehe es noch nicht.

Ich akzeptiere Ihre Bemühungen, eine Antwort zu finden. Das ist noch nicht alles. Das heißt, auf der Ebene der Entwickler.