Code zum Auslesen der Dateien:
void Read(){ for(int j=0;j<5;j++){ for(int i=0;i<8;i++){ string text= "w1["+j+"]["+i+"].csv"; int hh=FileOpen(text,FILE_READ|FILE_ANSI|FILE_CSV,";"); if(hh==INVALID_HANDLE){ Alert("Error opening file"); return; } w1[j][i]=StringToDouble(FileReadString(hh)); FileClose(hh); } } Alert("Gewichte geladen"); }
Das Erzeugen des Filehandles gehört VOR die Schleife!
in der Schleife rufe ich aber unterschiedliche Dateien auf.
string text= "w1["+j+"]["+i+"].csv"; int hh=FileOpen(text,FILE_READ|FILE_ANSI|FILE_CSV,";")
Das würde ja dann nicht funktionieren oder?
sind die Dateien nach dem Neustart noch vorhanden? Was schreibt er für eine Fehlermeldung?
Wo rufst Du diese Dateien auf? braucht er Grunddaten das diese neu gelesen werden?
ja die Dateien sind nach dem Neustart vorhanden. Wenn ich diese CSVs aufmache, dann sehe ich auch die richtigen Werte.
Das interessante ist, dass wenn ich dann den EA Test starte und die Read() Funktion aufrufe alle Dateien plötzlich weg sind.
Man muss gar kein Neustart durchführen. Es reicht einfach den EA Test zu starten zu stoppen und wieder zu starten, dann sind alle Dateien weg.
Nur wenn der EA Test gestartet ist und läuft, dann kann ich die Safe() und Read() Funktionen aufrufen so oft ich will und das funktioniert.
Es wird keine Fehlermeldung ausgegeben. Nach dem Read() Aufruf sind alle Positionen des Arrays =0. Nur so merke ich den Fehler. Gespeichert wird aber 0.5 und wenn ich die CSV-Datei aufrufe dann ist da auch die 0.5.
Read() wird in OnInit aufgrufen und Safe() in OnDeinit().
Ich speichere nur die Zahlen nur ab damit ich den Vorschritt bei einem Neustart nicht verliere.
ob er Grunddaten braucht kann ich leider nicht sagen, da ich nicht ganz verstehe was du damit meinst.
int OnInit() { Read(); return(INIT_SUCCEEDED); } void OnDeinit(const int reason) { Safe(); } void OnTick() { // Print("X1= "+x[0]+" X2= "+x[1]+" X3= "+x[2]+" X4= "+x[3]); //Rechnung(); }
Update:
er Springt bei if(hh==INVALID_HANDLE) rein führt noch "Error opening file" aus und beendet dann.
Warum ist der Handle invalid nach neuestart des EAs ?
void Read(){ for(int j=0;j<5;j++){ for(int i=0;i<8;i++){ string text= "w1["+j+"]["+i+"].csv"; int hh=FileOpen(text,FILE_READ|FILE_ANSI|FILE_CSV,";"); if(hh==INVALID_HANDLE){ Alert("Error opening file"); return; } w1[j][i]=StringToDouble(FileReadString(hh)); FileClose(hh); } } Alert("Gewichte geladen"); }
- www.mql5.com
Wie würde das im Code aussehen?
Ich bekomme es nicht hin mit dem FILE_COMMON.
Die Daten sind aber gespeichert nach dem Testlauf. Erst wenn ich den Testlauf nochmal starte werden diese gelöscht.
Gruß
OK super danke. Funktioniert jetzt.
die Zeile ist beim speichern und beim laden so drin:
int hh=FileOpen(text,FILE_WRITE|FILE_ANSI|FILE_CSV|FILE_COMMON,";");
Dadurch kann ich im Strategietester und auch im normalen Handel die Datei aufrufen. Datei wird im gleichen Ordner gespeichert.
Im Tester kann die Datei auch nach einem Neustart abgerufen werden, ohne gelöscht zu werden.
Vielen Dank!
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Hallo zusammen,
benötige Hilfe:
Wenn ich mit FileWrite() eine Datei erstelle und abspeichere, kann ich diese mit FileReadString() auslesen. Das funktioniert solange der EA läuft einwandfrei.
Mein Problem ist, dass ich die erzeugten Datien nicht aufrufen kann, wenn ich das Programm anhalte und wieder starte.
Es gibt Daten die ich auch nach PC Neustart mitladen möchte. Darum speichere ich diese in einer CSV-Datei.
mein Code zum Speichern: