Expert Advisors: Beispiele aus dem Buch „Neuronale Netze für den algorithmischen Handel mit MQL5“ - Seite 2
Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Guten Tag,
ich versuche, das erste Skript aus dem Buch auszuführen, das eine csv-Datei erzeugt.
Sie heißt initial_data.mq5.
Wenn ich das Skript im ersten Schritt ausführe:
If(CopyClose(_Symbol, PERIOD_M5, Start, End, close) <= 0 ||
CopyOpen(_Symbol, PERIOD_M5, Start, End, open) <= 0 ||
CopyHigh(_Symbol, PERIOD_M5, Start, Ende, high) <= 0 ||
CopyLow(_Symbol, PERIOD_M5, Start, Ende, niedrig) <= 0)
zurückgeben;
CopyClose ist immer gleich -1
und das Skript stürzt ab, Wiederholungen helfen nicht und wie ich in den Kommentaren gelesen habe
ist dies eine normale Situation und bedeutet, dass es keine Daten vom Server gibt.
Allerdings verstehe ich nicht ganz, wie der Pfad zu den Datendateien in diesem Skript geschrieben wird.
Es ist in der MQL5-Dokumentation geschrieben:
Zum Beispiel befinden sich die EURUSD-Symboldaten vom MetaQuotes-Demo-Handelsserver im Ordnerterminal_directory\bases\MetaQuotes-Demo\history\EURUSD\.
Und ich habe Dateien mit der Auflösung .hcc und ein Unterverzeichnis \cache mit Dateien wie H4.hc darin
Aber im Skript initial_data.mq5 gibt es nur eine Stelle, an der der Pfad geschrieben wird.
PrintFormat("Korrelationskoeffizienten gespeichert in der Datei %s\\\\Files\\\\%s",
TerminalInfoString(TERMINAL_DATA_PATH), FileName);
I Ausgabe TERMINAL_DATA_PATH
2024.06.16 22:53:39.982 path (EURUSD,M5) dataPath =C:\Benutzer\HPAppData\Roaming\MetaQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075
Was muss ich tun, um den Pfad zu diesen Dateien korrekt anzugeben, oder sollten sie gemäß der MQL5-Logik automatisch aus dem Terminalverzeichnis gehängt werden?
Wie lade ich Daten in eine csv-Datei herunter?
Forum zum Thema Handel, automatische Handelssysteme und Testen von Handelsstrategien
Alle Fragen von Anfängern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes
Aleksey Vyazmikin, 2024.06.18 06:28 Uhr
FileOpenParameter
open_flags
[in] Kombination von Flags, die den Arbeitsmodus mit der Datei festlegen. Die Flags sind wie folgt definiert:
FILE_READ Datei wird zum Lesen geöffnet
FILE_WRITEDatei wird zum Schreiben geöffnet
FILE_BINbinärer Lese-/Schreibmodus (keine Konvertierung von und nach String)
FILE_CSVDatei vom Typ csv (alle geschriebenen Elemente werden in Strings des entsprechenden Typs, Unicode oder Ansi, konvertiert und durch ein Trennzeichen getrennt)
FILE_TXTreine Textdatei (wie csv, aber Trennzeichen wird nicht berücksichtigt)
FILE_ANSIStrings vom Typ ANSI (Einzelbyte-Zeichen)
FILE_UNICODEStrings vom Typ UNICODE (Doppelbyte-Zeichen)
FILE_SHARE_READgemeinsamer Lesezugriff durch mehrere Programme
FILE_SHARE_WRITEgemeinsamer Schreibzugriff durch mehrere Programme
FILE_COMMONSpeicherort der Datei im gemeinsamen Ordner aller Client-Terminals \Terminal\Common\Files.
Hinweis
Aus Sicherheitsgründen ist die Arbeit mit Dateien in der Sprache MQL5 streng kontrolliert. Dateien, die für Dateioperationen mit MQL5-Sprachwerkzeugen verwendet werden, können nicht außerhalb der Datei-"Sandbox" gespeichert werden.
Wenn eine Datei in einer bestimmten Kodierung gelesen werden muss (der Codepage-Parameter mit dem Codepage-Wert ist angegeben), muss das FILE_ANSI-Flag gesetzt werden. Ohne Angabe des Flags FILE_ANSI wird die Textdatei ohne Konvertierung in Unicode gelesen.
Die Datei wird im Ordner des Client-Terminals im Unterordner MQL5\Files geöffnet (oder im Falle von Tests im Verzeichnis MQL5\Files des Testagenten). Wenn unter den Flags FILE_COMMON angegeben ist, wird die Datei im gemeinsamen Ordner aller Client-Terminals \Terminal\Common\Files geöffnet.
Sie können "benannte Kanäle" nach den folgenden Regeln öffnen:
In den obigen Zeilen wird das spezielle Backslash-Zeichen "\" verwendet, so dass beim Schreiben des Namens im MQL5-Programm "\" verdoppelt werden sollte, d. h. das obige Beispiel sollte im Code als "\\\\servername\\pipe\\pipename" geschrieben werden.
Für weitere Details zur Arbeit mit Named Channels lesen Sie bitte den Artikel "Kommunikation mit MetaTrader 5 über Named Channels ohne DLL"
Ehrlich gesagt, habe ich nichts von der Antwort verstanden, als ob ein Roboter schreiben würde. Ich weiß, wohin die zu erstellende Datei geschrieben wird, aber sie wird nicht erstellt.
Ich habe eine spezielle Frage: Wie kann ich Daten aus .hcc- und .hc-Dateien in eine .csv-Datei schreiben?
Ich führe das Skript initial_data.mq5 aus dem Buch als Ergebnis aus:
CopyClose ist immer -1. Wie kann man das beheben?
Ich habe den Verdacht, dass diese Dateien nicht erkannt werden, weil der Pfad zu den Datendateien nicht richtig geschrieben ist.
Wie schreibe ich den Pfad zu den Datendateien richtig?
In meinem Fall befinden sich die Datendateien im Ordner terminal_directory\bases\MetaQuotes-Demo\history\EURUSD\ innerhalb der Sandbox.
Ich kämpfe seit einer Woche mit diesem Problem, habe alles gelesen, aber ich habe keine Lösung gefunden. Bitte helfen Sie mir.
Ehrlich gesagt, habe ich nichts von der Antwort verstanden, als ob ein Roboter schreiben würde. Ich weiß, wo die zu erstellende Datei geschrieben wird, aber sie wird nicht erstellt.
Ich habe eine konkrete Frage: Wie kann ich Daten aus .hcc- und .hc-Dateien in eine .csv-Datei schreiben?
Ich führe das Skript initial_data.mq5 aus dem Buch als Ergebnis aus:
CopyClose ist immer -1. Wie kann man das beheben?
Ich habe den Verdacht, dass es diese Dateien einfach nicht sieht, weil der Pfad zu den Datendateien nicht richtig geschrieben ist.
Wie kann man den Pfad zu den Datendateien richtig angeben?
In meinem Fall befinden sich die Datendateien im Ordner terminal_terminal_directory\bases\MetaQuotes-Demo\history\EURUSD\ innerhalb der Sandbox.
Ich kämpfe seit einer Woche mit diesem Problem, habe alles gelesen, aber ich habe keine Lösung gefunden. Bitte helfen Sie mir.
Alle Daten werden von der Plattform genommen, dem Benutzer ist es egal, woher das Terminal sie bekommt - aus welcher Datei.
Das Skript arbeitet mit den Daten, die im Diagramm angezeigt werden.
Prüfen Sie, ob es im Chart Daten gibt, für die Sie Kurse abfragen.
Alle Daten werden der Plattform entnommen, dem Benutzer ist es egal, woher das Terminal sie bezieht - aus welcher Datei.
Das Skript arbeitet mit den Daten, die im Diagramm angezeigt werden.
Prüfen Sie, ob es Daten auf dem Diagramm gibt, für die Sie Kurse abfragen.
Bitte erklären Sie, was das bedeutet.
Im Skript gibt es einen Bereich
input datetime Start = D'2015.01.01.01 00:00:00'; // Beginn des Zeitraums
input datetime End = D'2020.12.31 23:59:00'; // Ende des Zeitraums
auf M5
Soll ich den EURUSD-Chart auf M5 nehmen, bis 2015.01.01 blättern und dann das Skript darauf ausführen?
Oder kann ich das Skript auf MN laufen lassen? Und bei neuen Ticks geht es wieder an den Anfang?Können Sie bitte erklären, was das bedeutet?
In dem Skript gibt es einen Bereich
input datetime Start = D'2015.01.01.01 00:00:00'; // Beginn des Zeitraums
input datetime End = D'2020.12.31 23:59:00'; // Ende des Zeitraums
auf M5
Muss ich den EURUSD-Chart auf M5 nehmen, bis 2015.01.01 blättern und dann das Skript darauf ausführen?
Oder kann ich das Skript auf MN laufen lassen? Und bei neuen Ticks springt es wieder an den Anfang?Lesen Sie die Hilfe auf dem Terminal. Und hier ist noch etwas.
Sie werden feststellen, dass es eine Einstellung für die Tiefe der Historie über die maximale Anzahl der Balken im Fenster gibt. Sie müssen das Terminal neu laden, damit die Änderungen wirksam werden.
Es ist also notwendig, die maximale Tiefe der Historie für alle TFs auf einmal um den kleinsten TF einzustellen, der für die Arbeit erforderlich ist.
Es ist klar, dass 100 Balken für Tage und 100 Balken für Minuten die gleiche Tiefe in Balken, aber nicht in Daten ergeben.
Wenn Sie den gewünschten Wert oder "Unbegrenzt" einstellen und das Terminal neu laden, können Sie das Skript für den monatlichen TF ausführen, wenn die Historie für den gewünschten Zeitraum verfügbar ist.
Lesen Sie die Terminal-Hilfe. Und hier ist noch eine.
Sie werden erfahren, dass es eine Einstellung der Verlaufstiefe durch die maximale Anzahl von Balken im Fenster gibt. Damit die Änderungen wirksam werden, müssen Sie das Terminal neu laden.
So ist es notwendig, die maximale Tiefe der Geschichte für alle TFs auf einmal durch die kleinste TF, die für die Arbeit erforderlich ist, zu setzen.
Es ist klar, dass 100 Balken für Tage und 100 Balken für Minuten die gleiche Tiefe in Balken, aber nicht in Daten ergeben.
Wenn Sie den gewünschten Wert oder "Unbegrenzt" einstellen und das Terminal neu laden, können Sie das Skript für den monatlichen TF ausführen, wenn die Historie für den gewünschten Zeitraum verfügbar ist.
Ich danke Ihnen! Es hat geklappt.
Bitte sehr.
Vielen Dank , Dmitry , für all deine Bemühungen um dieses Buch. Es ist wirklich nützlich.
In neuronbase.mqh implementieren Sie die ElasticNet Regularization-Methode wie folgt ohne Erklärung in Ihrem Buch.
m_cWeights.m_mMatrix -= m_cWeights.m_mMatrix * Lambda[1] + Lambda[0]
Aber das ist etwas anderes als die Grundformel (+) oder der Keras-Quellcode (+) zum Beispiel.
Bitte erläutern Sie Ihre Implementierungsmethode. Warum Sie nur Lambdas anstelle der vollständigen Formel verwenden und warum Sie Gewichte mit einem von ihnen multiplizieren und mit einem anderen summieren.