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:
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 |
Ist es denn nötig die offenen Trades jede Sekunde abzufragen? Wann ein Trade geöffnet wird, hängt ja von deinem System ab. Schließt du einen Trade per OrderClose, ist das ja auch eine Entscheidung, welche du im Code verankert hast. Wird ein Trade über SL oder TP geschlossen, kannst du dieses über die OnTradeTransaction() Funktion abfragen und deine Arrays anpassen. So aktualisierst du deine Datei nur in dem Fall, wenn eine Tradeaktion durchgeführt wird. Gruß Timo
|
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 |
Zitat:
|
Zitat:
Grüße |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:32 Uhr. |
Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.6.1
Powered by vBCMS® 2.7.0 ©2002 - 2024 vbdesigns.de
Copyright ©2009 - 2023 by Expert-Advisor.com - Das Metatrader Forum