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
Hier ist der Code zum Lesen aus einer Datei:
WarumFileReadString() ?
Sie könnenFileReadArray() verwenden, dann brauchen Sie keine Schleife zu machen.
WarumFileReadString() ?
Wäre es nicht besser,FileReadArray() zu verwenden, dann braucht man keine Schleife zu machen.
Rosh:
Aktienwerte in eine Datei schreiben. Bilden Sie dann einen Indikator mit diesen Werten. Die Datendatei muss jedoch manuell verschoben werden. Die Dateien werden beim Testen in den Ordner Agent_name/MQL5/Files geschrieben.
Erst jetzt ist mir klar geworden, wie kompliziert alles ist.
Aber manuell ist eindeutig nicht die Lösung für dieses Problem, da es sich um Hunderte von Tests handelt.
Und es scheint so: Am Anfang sind die Daten vorhanden, aber - oh Wunder! - das Programm ist so konzipiert, dass es keine Möglichkeit gibt, sie irgendwie und irgendwo zu speichern, bis sie extrahiert und programmatisch verwendet werden!
Ich bin kein professioneller Programmierer, aber diese Situation ist schwer zu begreifen.
Riesige Dokumentation..., riesige Möglichkeiten, alles und jedes zu bauen..., Speicherverwaltung, OOP, und hier, in grundlegend einfach und kritisch notwendig (was ich hoffentlich schon erklärt habe) - ein Deadlock.
...und doch... Frage!
Gibt es keine Möglichkeit, im Testmodus in einige erzwungenermaßen annotierte Programm-Arrays zu schreiben, die anschließend zur Erstellung eines Indikators verwendet werden könnten?
Einschließlich der Möglichkeit, über eine globale Variable einen Zeiger auf ein solches Array zu übergeben?
Und was ist das Problem der Speicherung und des Transfers von Daten zwischen der Testphase und dem Zeitpunkt der Hauptarbeit, nicht in Bezug auf die aktuelle Umsetzung, aber im Prinzip?
Renat erwähnte Hunderte von Megabytes an Daten, aber erstens, warum sollten wir immer Daten nachladen, wenn wir eine solche Möglichkeit nur auf ausdrücklichen Wunsch des Programmierers vorsehen können, und zweitens ist die Datenmenge im Hinblick auf die vorliegende Aufgabe viel kleiner und beläuft sich auf einige Tausend Ziffern.
Ich erkläre noch einmal, dass die Möglichkeit der manuellen Übertragung von Dateien bei Mehrfachtests (und der Markt erfordert aufgrund seiner Komplexität Mehrfachtests) aus der Sicht des Benutzers absolut unbequem und wenig erfolgversprechend ist, während ich bereit bin, mit jedem zu argumentieren, dass die Dynamik der Kontoindikatoren in ihrer direkten Korrelation mit der Preisdynamik in der Testhistorie eine der wichtigsten überhaupt ist.
Was ist die Frage der Ausweitung der Sichtbarkeit in der Hauptbetriebsart des Öffnens von Dateien im Lesemodus auf den Ordner der Prüferdateien? Was wäre auch nur eine hypothetische Bedrohung in diesem Fall?
Und was ist das Problem, dass man die Speicherung der erforderlichen Daten zwischen Haupt- und Testmodus im RAM nicht erzwingen kann?
Verwenden Sie dll zum Schreiben und Lesen von Dateien aus beliebigen Ordnern auf der Festplatte. Verschieben Sie einfach die Funktionen zum Schreiben und Lesen von Dateien in die DLL und das war's.
...und doch... Frage!
Gibt es keine Möglichkeit, im Testmodus in einige erzwungenermaßen enge Programmfelder zu schreiben, die anschließend zum Aufbau eines Indikators verwendet werden könnten?
Versuchen Sie, beim Öffnen der Datei das Flag FILE_COMMON zu setzen - https://www.mql5.com/ru/docs/constants/io_constants/fileflags
Kennung
Wert
Beschreibung
FILE_COMMON
4096
Speicherort einer Datei im gemeinsamen Ordner aller Client-Terminals. Dieses Flag wird beim Öffnen von Dateien (FileOpen()), beim Kopieren von Dateien (FileCopy(), FileMove()) und beim Überprüfen der Existenz von Dateien (FileIsExist()) verwendet
Versuchen Sie, beim Öffnen einer Datei das Flag FILE_COMMON anzugeben - https://www.mql5.com/ru/docs/constants/io_constants/fileflags
Führen Sie dieses Skript aus und sehen Sie, wo es schreibt
joo, Rash, ich danke Ihnen!
Die Option des gemeinsamen Ordners scheint mehr... integriert.
Das Einzige, was überrascht, ist, dass bei der Ausführung dieses Codes eine Meldung über das erfolglose Schreiben im Indikator angezeigt wird, obwohl das Schreiben selbst noch erfolgt. Plus - immer noch eine offene Frage, wie und wann genau es besser ist, die Daten zu schreiben (separat für jeden Tick, aber es ist ressourcenintensiv, oder ganz am Ende - das ganze Array, aber mit Array schreiben etwas ist noch nicht ganz klar, und außerdem ist es schwer zu verstehen, wie OnCalculated wird in diesem Fall für seine Extraktion arbeiten - in der zweiten, es stellt sich heraus, die Passage bereits nach dem Testen?)
Und noch eine Frage, die zwar nicht ganz zum Thema gehört, aber die bereits gestern angesprochen wurde.
Eingefügt in OnTick und in OnCalculated:
aber nach Abschluss des Tests ist der Rückgabewert trotz des Vorhandenseins von Objekten, die sich auf Öffnungs- und Schließpositionen beziehen (Pfeile und Linien - sichtbar in Terminal: Charts>Objects>Objects List), aus irgendeinem Grund 0.Es ist besser, so selten wie möglich in die Datei zu schreiben, daher ist es besser, dies als Integer-Array zu tun. Die Werte sollten nicht öfter als einmal pro Minute gemessen werden, da es sonst zu Problemen bei der Darstellung auf dem Diagramm kommt (außerdem ist es unverhältnismäßig ressourcenintensiv). Das heißt, am Ende des Laufs. Aber es ist auch möglich:
Der Algorithmus sieht folgendermaßen aus:
1) Führen Sie den Experten im Prüfgerät aus.
2) Der Wert des Interesses wurde gemessen.
3) Aufzeichnung des Wertes in der Datei.
4) Schreibe true in eine separate Datei, was bedeutet, dass wir einen neuen Wert aufgezeichnet haben.
5) Starten Sie eine Endlosschleife, die Exit-Bedingung ist false in der Flag-Datei.
6) In einem separaten Diagramm liest das Skript die Datei mit dem Flag, wenn es einen neuen Wert gibt, zeichnet es ein Risiko in das Diagramm und schreibt false in die Datei.
So sieht der visuelle Testmodus des Testers in etwa aus.
Warten Sie ein wenig, der Wettbewerb ist bald vorbei, vielleicht werden dann elegantere und schönere Lösungen präsentiert.
joo, Rash, ich danke Ihnen!
Die Option des gemeinsamen Ordners scheint mehr... integriert.
Das einzig Überraschende ist, dass bei der Ausführung dieses Codes innerhalb des Indikators eine Meldung über einen fehlgeschlagenen Schreibvorgang angezeigt wird, obwohl der Schreibvorgang selbst durchgeführt wird.
Ich bekomme nichts von dieser Ausgabe. Probieren Sie es aus:
Ich verstehe das alles nicht. Sie sollten es versuchen:
Rosch
Ich kann nicht verstehen, woran das liegt, aber im Gegensatz zu meinen Indikatoren erhalte ich eine Meldung, wenn ich sie mit Ihrem Indikator starte:Jetzt habe ich einen ähnlichen einfachen Expert Advisor auf der Grundlage Ihres Codes erstellt, der alle Equity-Werte in eine Datei schreiben sollte (ich habe nur die Ausgabe aller Werte geändert, einschließlich der geschriebenen Null-Bytes, die Variablen global gemacht und das Öffnen und Schreiben der Datei in OnInit und OnTick aufgeteilt), aber obwohl kein Fehler geschrieben wird und die Datei erstellt wird, sind die Datensätze und die Datei leer.