![]() |
|
Startseite | Registrieren | Hilfe | Benutzerliste | Kalender | Suchen | Heutige Beiträge | Alle Foren als gelesen markieren |
Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4. |
![]() |
|
Themen-Optionen | Thema durchsuchen | Ansicht |
|
|||
![]()
Hallo,
ich versuche für meinen EA eine Funktion zu erstellen, mit der ich abfrage, ob eine Order geschlossen wurde (bool = newClose). Üblicherweiße nutze ich dafür den klassischen loop mit OrderHistoryTotal() und einem Zeitstempel. Code:
bool newClose = false; static datetime lastCloseTime = 0; for(int i=0; i<=OrdersHistoryTotal()-1; i++) if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber) if(OrderCloseTime()>lastCloseTime) { newClose = true; lastCloseTime = OrderCloseTime(); }; Leider wird gerade im Strategie-Tester der EA dann unglaublich langsam, je länger er läuft, da die Anzahl im OrderHistoryTotal() natürlich immer größer wird. Daher die Frage, ob jemand einen alternativen loop-Ansatz hat um z.B.: nur die neuesten 50 geschlossenen Trades zu loop'en um die Schleife nicht gar zu groß werden zu lassen. Einfach OrderHistoryTotal() durch zB 50 zu ersetzten und dann den loop mit i++ oder i-- laufen zu lassen, führt ja leider dazu, dass nach 50 History-Order keine weiteren mehr betrachtet werden... :-( Für Tipps und Anregungen bin ich euch sehr dankbar ![]() |
|
|||
![]()
Ich würde die Schleife rückwärts laufen lassen, d.h. die letzte geschlossene Order wird zuerst abgefragt.
Code:
int i = 0; bool newClose = false; static datetime lastCloseTime = 0; for (i = OrdersHistoryTotal()-1; i >= 0; i--) { if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) { if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) { if (OrderCloseTime() > lastCloseTime) { newClose = true; lastCloseTime = OrderCloseTime(); break; } else break; } } } traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis. |
|
|||
![]()
Danke für den Tipp.
Leider funktioniert es im StrategyTestern nicht. Er verfällt in eine Schleife aus der erst nicht mehr raus kommt... also er läuft quasi gar nicht erst los da ich in der onTick erst mal nach newClose suche :-( |
|
|||
![]()
Das verstehe ich nicht.
In der unten geschriebenen Schleife kann er sich nicht verfangen. Dann wäre es hilfreich, wenn Du den Code der OnTick-Funktion mal postest. traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis. |
|
|||
![]()
Wie dumm von mir.
Hab gerade festgestellt dass ich einen Tippfehler drin hazte. Statt i >= 0 hatte ich 1 >=0 Sorry... mit der Korrektur läuft er durch. Ich lass ihn mal über Nacht laufen und melde mich demnächst ob es die Lösung war. Daaanke schonmal |
![]() |
Lesezeichen |
Themen-Optionen | Thema durchsuchen |
Ansicht | |
|
|