|
Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4. |
|
Themen-Optionen | Thema durchsuchen | Ansicht |
|
|||
Array vs FileWrite/Read
Hi,
die Verwaltung von Daten über ein Array ist in MQL4 ja echt eine Mamutaufgabe und bläst unwarscheinlich den Quelltext mit verschachtelten For-Schleifen auf. Daher nun meine Frage: Da ich den EA ohnehin ausfallsicher machen muss, werde ich das Array am Ende eines Durchlaufs in eine Datei ablegen. Was wäre bei einer EventTimer(1) Funktion performanter/sinnvoller?
Szenario: Der EA überwacht den gesamten Markt und prüft auf offene Positionen. Symbole, die offene Positionen haben, werden in einem Array gespeichert. Er vergleicht nun einmal pro sekunde den Markt mit dem Array. Findet er ein Symbol mit offenen Orders, das noch nicht im Array ist, fügt er es hinzu. Das klappt soweit ohne Probleme. Auch das "Löschen", weil ich das Array vorher immer auf Größe Null setzte. Die Krux beginnt, weil pro gefundenem Symbol ein Statuswert gespeichert werden muss, der unabhängig von der Öffnung im Markt ist. Das Löschen dieses Symbols aus dem Array hängt nun von diesem Statuswert ab. Also kann ich das Array nicht jedes mal vorher auf Null bringen, sondern muss alles kompliziert mit verschachtelten For-Schleifen prüfen, neue temporäre Arrays erzeugen, die zu löschende Werte enthalten, usw. Am Ende entsteht ein imenser Spagetti-Code, nur um ein paar ArrayElemente aus einem Array zu löschen. Und nicht mal der klappt von der Logik her, denn wenn ich da ein Element lösche, stimmt der Index für alle nachfolgenen Werte nicht mehr: Code:
int durchläufe = ArrayRange(Symbole[], 0); //Nimm jedes Elemtent aus Symbole[] for(int i, i < durchläufe; i++) { //Wenn zu löschendes Element gefunden: if(das hier löschen == true) { LöschtElementAusArray(Symbole[], i); //löscht aus Symbole[] den Index i } } Jedes aktive Symbol bekommt genau eine Datei: EURUSD_12345.txt mit genau zwei Zeilen: 1."EURUSD" 2. Wichtiger Statuswert Jetzt kann ich pro Sekunde den Ordner auslesen und prüfen:
Die FileWrite/Delete würde er nur auslösen, wenn sich etwas ändert. FileRead für alle Dateien würde 1x pro Sekunden kommen. Sorry für die Textwand, aber ich bin mir ziemlich sicher, das auch viele andere vor dem Array Problem stehen und hier gegebenfall fündig werden. Ich bedanke mich schon einmal vorab und wünsche einen guten Tag |
|
|||
Hi, ich habe mir vor Jahren aus einem amerikanischen Board ein Dashboard runtergeladen (hieß Dashboard? Ultimate?) oder so ähnlich.
Mittlerweile laufen darin im Sekundentakt ca 50 verschiedene Durchläufe über die bei mir meistens 28 Währungspaare-Arrays. Das macht überhaupt kein Problem für die Performance von MT4. Wenn es Arrays geben sollte, deren Inhalt du z.B. nach einem Crash nicht wieder herstellen kannst, dann würde ich dir empfehlen, diese alle 15-60 Minuten oder so ähnlich in eine Datei zu sichern. Grüße |
|
|||
Ja, denn die zu überwachenden Trades werden per Hand eingestellt und wieder geschlossen, der EA überwacht und analysiert.
|
|
|||
Zitat:
Grüße |
Lesezeichen |
|
|