|
Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4. |
|
Themen-Optionen | Thema durchsuchen | Ansicht |
|
|||
Berechnung der aktuellen Trefferquote
Hallo zusammen,
ich würde gerne in meinem EA die aktuelle Trefferquote, also ob ein Signal erfolgreich war oder nicht, dafür verwenden, ob ein neuer Trade bzgl. des Signals ausgeführt werden soll. Dabei möchte ich ein Array int[10] oder string[10] befüllen lassen, in dem dann jeweils steht, welche der letzten zehn Trades mit dem Signal erfolgreich waren bzw. erfolgreich gewesen wären und daraus die Trefferquote berechnen. Mein Problem ist nun, dass ich sowohl tatsächlich geführte Trades als auch rein theoretische Trades (die aufgrund der zu diesem Zeitpunkt schlechten Trefferquote nicht ausgeführt wurden) im Array mitberücksichtigen möchte. Daher meine Fragen: - Wie kann ich feststellen, ob der letzte tatsächlich getätigte Trade einen Gewinn oder Verlust zur Folge hatte? - Wie könnte man "nicht getätigte Trades" am besten beobachten? Ansonsten bin ich natürlich interessiert, was ihr so von der Idee haltet. Grüße Sandreal |
|
||||
Hi,
Zitat:
Simulierten entryprice speichern, mit simulierten Exitprice vergleichen und in eine csv Datei speichern. Vorsicht mit deiner Array Idee, bei MT Neustart verlierst du den Inhalt. Ansonsten ist deine Idee abhängig davon, was für eine Grundlogik hinter de EA steht. Normalerweise bildet ein EA durch seinen Gewinn/Verlust auch den Markt ab. d.h. mit deinem Array arbeitest du mehr mit Markttechnik als mit Indikatoren etc. dann, was bei den krummen, wilden Kursen der Brokern von Vorteil sein könnte. Probies es aus Gruss sandmann
__________________
es muss nicht immer Forex sein: Handelssysteme auf Eurex Daten MyFxBook - Performance - T4Y |
|
|||
Danke sandmann für die schnelle Antwort!
Die Idee mit der csv-Datei finde ich gut. Das Problem, dass bei Schließen des MT die Array-Daten verloren gehen, kann man ja auch verhindern, indem die Daten in dieses file geschrieben werden und bei Neustart über init() wieder ausgelesen werden. Noch eine Frage: Gibt es eine elegantere Möglichkeit als mit OrderCloseTime() zu prüfen, ob eine Position geschlossen wurde? Für die "nicht getätigten Trades" würde ich auf Tickbasis immer StopLoss und TakeProfit prüfen und dann bei "Aktivierung" eines der beiden Werte auf erfolgreich oder erfolglos schließen. Hat jemand ne bessere Idee? Auf Tickbasis zu prüfen ist ja schon relativ ressourcenlastig (auch wenns eigentlich nur 2-3 Zeilen sind - aber es könnten ja jede Menge "nicht getätigte Trades" gleichzeitig sein). |
|
||||
Zitat:
Zitat:
Code:
bool Time5M(){ static datetime PrevTime5; if(PrevTime5 < iTime(NULL, PERIOD_M5, 0)) { PrevTime5 = iTime(NULL, PERIOD_M5, 0); return(true); } else { return(false); } } MT ist aber ziemlich Ressourcen schonend, auch wenn du es Tickweise berechnest. Ausprobieren!
__________________
es muss nicht immer Forex sein: Handelssysteme auf Eurex Daten MyFxBook - Performance - T4Y |
|
|||
FileReadString
Ich habe nun etwas Schwierigkeiten mit dem Einlesen von Textfiles.
Mein Beispiel file sieht folgendermaßen aus: Code:
7 1 0 1 1 0 0 1 Einlesen: Code:
int hits[]; int handle; ... bool readTradesFile() { handle = FileOpen("hits.txt", FILE_BIN|FILE_READ); if(handle>0) { int hitsNumber = StrToInteger(FileReadString(handle,1)); Print("hitsNumber: "+hitsNumber); ArrayResize(hits,hitsNumber); for(int h=0; h<hitsNumber; h++) hits[h] = StrToInteger(FileReadString(handle,1)); // FileClose(handle); } ... } Code:
2012.03.27 19:15:29 2012.03.20 00:00 hitCheckerTest_Simple EURUSD,H1: 7. entry: 0 2012.03.27 19:15:29 2012.03.20 00:00 hitCheckerTest_Simple EURUSD,H1: 6. entry: 0 2012.03.27 19:15:29 2012.03.20 00:00 hitCheckerTest_Simple EURUSD,H1: 5. entry: 0 2012.03.27 19:15:29 2012.03.20 00:00 hitCheckerTest_Simple EURUSD,H1: 4. entry: 0 2012.03.27 19:15:29 2012.03.20 00:00 hitCheckerTest_Simple EURUSD,H1: 3. entry: 1 2012.03.27 19:15:29 2012.03.20 00:00 hitCheckerTest_Simple EURUSD,H1: 2. entry: 0 2012.03.27 19:15:29 2012.03.20 00:00 hitCheckerTest_Simple EURUSD,H1: 1. entry: 0 2012.03.27 19:15:29 2012.03.20 00:00 hitCheckerTest_Simple EURUSD,H1: hitsNumber: 7 |
|
|||
Hallo,
wenn du eine Text-Datei auslesen möchtest, musst du aber FILE_CSV benutzen und nicht FILE_BIN. Da die ausgelesenen Werte dann "Strings" sind, solltest du sie noch mit StrToInteger in Zahlen umwandeln. Gruß naranjoe |
|
|||
Hallo Sandreal
Hast du deinen Code bereits fertig? Habe das selbe Problem und muss eine Tradehistory für simulierte und echte Trades haben und den Trade nur ausführen, wenn der letzte echte oder simulierte Trade positiv war. Danke dir und Gruss Pat |
|
|||
Jep, ich bin mit dem Teil, der für meinen EA wichtig war fertig. Kannst ja mal schaun, ob die Vereinfachungen in meinem Include-File für deinen Anwendungsfall ausreichen.
Verwendung sieht so aus: Zitat:
Sinn macht HitRate.mqh nur für den diskretionären Handel und wenn loser- und winnerValue weit genug von openPrice entfernt sind, dass diese nicht innerhalb eines Bars auftreten. Für den Handel auf Tickbasis müsstest du es daher noch anpassen. Wäre nett, wenn du dann auch deine Lösung posten würdest. Bisher ist die Trefferquote auch nur für Market Orders implementiert (ohne Berücksichtigung von Slippage). |
Lesezeichen |
Stichworte |
mql4, programmierung, programmierung metatrader, trefferquote, trefferquote berechnen |
|
|