Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools
Zurück   Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools > Metatrader 4 > Programmierung MQL4

Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4.


Portalsuche


Werbung

Login
Benutzername:
Kennwort:


Statistik
Themen: 3824
Beiträge: 36915
Benutzer: 6.074
Aktive Benutzer: 496
Links: 80
Wir begrüßen unseren neuesten Benutzer: hmf44
Mit 483 Benutzern waren die meisten Benutzer gleichzeitig online (21.04.16 um 17:12).
Neue Benutzer:
vor 6 Stunden
- hmf44
vor 10 Stunden
- Crossa
vor 11 Stunden
- snatshit
vor einem Tag
- Roerich
vor einem Tag
- John_Liver...

Onlineuser
'Wer ist online' anzeigen Benutzer: 2
Gäste: 48
Gesamt: 50
Team: 0
Team:  
Benutzer:  Domke01, mahnwache
Freunde anzeigen

Empfehlungen

Werbung

Thema geschlossen
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt 23.03.12
Neues Mitglied
 
Registriert seit: Aug 2011
Beiträge: 25
Sandreal befindet sich auf einem aufstrebenden Ast
Standard 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
  #2 (permalink)  
Alt 23.03.12
Benutzerbild von sandmann23
Mitglied
 
Registriert seit: Feb 2012
Beiträge: 67
sandmann23 befindet sich auf einem aufstrebenden Ast
sandmann23 eine Nachricht über Skype™ schicken
Standard

Hi,
Zitat:
Zitat von Sandreal Beitrag anzeigen
Daher meine Fragen:
- Wie kann ich feststellen, ob der letzte tatsächlich getätigte Trade einen Gewinn oder Verlust zur Folge hatte?
Speicher die Ticketnummer, die du bei OrderSend bekommst in einem array. Dann kannst du jeder Zeit OrderProfit() checken.
Zitat:
Zitat von Sandreal Beitrag anzeigen
- Wie könnte man "nicht getätigte Trades" am besten beobachten?
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
facebook
  #3 (permalink)  
Alt 23.03.12
Neues Mitglied
 
Registriert seit: Aug 2011
Beiträge: 25
Sandreal befindet sich auf einem aufstrebenden Ast
Standard

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).
  #4 (permalink)  
Alt 23.03.12
Benutzerbild von sandmann23
Mitglied
 
Registriert seit: Feb 2012
Beiträge: 67
sandmann23 befindet sich auf einem aufstrebenden Ast
sandmann23 eine Nachricht über Skype™ schicken
Standard

Zitat:
Zitat von Sandreal Beitrag anzeigen
Noch eine Frage:
Gibt es eine elegantere Möglichkeit als mit OrderCloseTime() zu prüfen, ob eine Position geschlossen wurde?
Ist elegant genug, da du mit Select_by_ticket eh das intere Orderarray von MT füllst.
Zitat:
Zitat von Sandreal Beitrag anzeigen
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).
Code:
bool Time5M(){ 
   static datetime PrevTime5;

   if(PrevTime5 < iTime(NULL, PERIOD_M5, 0))
   {
	  PrevTime5 = iTime(NULL, PERIOD_M5, 0);
	  return(true);
   } else {
	  return(false);
   }
}
dann check es alle 5min nur
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
facebook
  #5 (permalink)  
Alt 27.03.12
Neues Mitglied
 
Registriert seit: Aug 2011
Beiträge: 25
Sandreal befindet sich auf einem aufstrebenden Ast
Standard 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
1. Eintrag: Anzahl der Daten, also Größe von hits[]; danach kommen die einzulesenden Daten

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);
   }
   ...
}
Beim Ausgeben der in hits eingelesenen Daten bekomme ich allerdings folgendes in der Konsole:
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
Wie verwende ich FileReadString richtig?
  #6 (permalink)  
Alt 27.03.12
Elite Mitglied
 
Registriert seit: Jun 2010
Ort: Trier
Beiträge: 116
naranjoe befindet sich auf einem aufstrebenden Ast
Standard

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
  #7 (permalink)  
Alt 01.04.12
Neues Mitglied
 
Registriert seit: Apr 2012
Beiträge: 1
pat77 befindet sich auf einem aufstrebenden Ast
Standard

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
  #8 (permalink)  
Alt 02.04.12
Neues Mitglied
 
Registriert seit: Aug 2011
Beiträge: 25
Sandreal befindet sich auf einem aufstrebenden Ast
Standard

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:
#include <HitRate.mqh>

extern string tradesFile; // .csv
extern string hitsFile; // bei mir .txt (.csv sollte auch gehn)

int init()
{
// int num = Anzahl der zu betrachtenden Trades, auf dessen Basis die Trefferquote berechnet wird
clearHitsFile(hitsFile, num);
clearTradesFile(tradesFile);
...
}

int start()
{
...
double hitRate = hitRate(tradesFile,hitsFile);
...
OrderSend(...);
// nach jedem OrderSend einen neuen Eintrag hinzufügen!
// loserValue = Wert (Preis), bei dem der Trade als Verlierer gewertet wird
// winnerValue analog
newTradeEntry(tradesFile,TimeCurrent(), cmd, openPrice, loserValue, winnerValue);
...
}
Dabei wird der Trades (egal, ob tatsächlich ausgeführt oder nicht) als Gewinner oder Verlierer gewertet, wenn loserValue (z.b. ein StopLoss) oder winnerValue (z.B. Wert, bei dem der StopLoss über BreakEven gesetzt wird) getriggert wird.
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).
Angehängte Dateien
Dateityp: rar HitRate.rar (1,8 KB, 2x aufgerufen)
  #9 (permalink)  
Alt 02.04.12
Neues Mitglied
 
Registriert seit: Aug 2011
Beiträge: 25
Sandreal befindet sich auf einem aufstrebenden Ast
Standard

Wenn du nur wissen musst, ob der letzte Treffer erfolgreich war, kannst du "clearHitsFile(hitsFile, 1)" sowie "double hitRate = hitRate(tradesFile,hitsFile); if(hitRate>0)..." verwenden.

Grüße
Sandreal
Thema geschlossen

Lesezeichen

Stichworte
mql4, programmierung, programmierung metatrader, trefferquote, trefferquote berechnen


Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are aus
Pingbacks are aus
Refbacks are aus




Alle Zeitangaben in WEZ +1. Es ist jetzt 21:57 Uhr.



Der Wavesnode - Spam Firewall
-----------------------------------------------------------------------------------------------------------------------------
Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Powered by vBCMS® 2.7.0 ©2002 - 2017 vbdesigns.de
SEO by vBSEO 3.6.1
Copyright ©2009 - 2017 by Expert-Advisor.com - Das Metatrader Forum
MetaTrader bzw. MetaTrader 4 und MetaTrader 5 sind eingetragene Marken der MetaQuotes Software Corp.
-----------------------------------------------------------------------------------------------------------------------------