Drawdown eines Laufenden Expert Advisors herausfinden (möglichst automatisch)

 

Das gesuchte steht im Titel, habe in Metatrader 4 momentan 5-10 EAs am Laufen und bei allen manuell monatlich nach ihren Drawdown zu ermitteln ist nahezu unmöglich, wenn es noch 5 weitere werden.

Es sollen neue Tiefs und Hochs des Profits des einzelnen EAs gezeigt werden(ganz wichtig: nicht des gesamten Terminals! sondern nur des EAs).


Hat jemand einen derartigen Code in MQL4 parat oder einen Thread in dem soetwas erfolgreich erstellt werden konnte ?


Alternativ: Hat jmd ideen welche befehle ich verwenden könnte um soetwas selbst zu codieren?

(in erster Linie kommt mir OrdersHistoryTotal in den sinn, jedoch ist dies nur die Anzahl...)

Besonders schwierig ist die Frage wie ich eine  Vermischung der Drawdowns der einzelnen EAs vermeiden kann...


Danke für alle denen grad eine Glühbirne im Kopf angegangen ist. :)

 
Bayne:

Das gesuchte steht im Titel, habe in Metatrader 4 momentan 5-10 EAs am Laufen und bei allen manuell monatlich nach ihren Drawdown zu ermitteln ist nahezu unmöglich, wenn es noch 5 weitere werden.

Es sollen neue Tiefs und Hochs des Profits des einzelnen EAs gezeigt werden(ganz wichtig: nicht des gesamten Terminals! sondern nur des EAs).


Hat jemand einen derartigen Code in MQL4 parat oder einen Thread in dem soetwas erfolgreich erstellt werden konnte ?


Alternativ: Hat jmd ideen welche befehle ich verwenden könnte um soetwas selbst zu codieren?

(in erster Linie kommt mir OrdersHistoryTotal in den sinn, jedoch ist dies nur die Anzahl...)

Besonders schwierig ist die Frage wie ich eine  Vermischung der Drawdowns der einzelnen EAs vermeiden kann...


Danke für alle denen grad eine Glühbirne im Kopf angegangen ist. :)

oh, das ist eigentlich gar nicht so schwer,

über die Order History findest du ja die Trades. Da mussts du nur nach dem Monat filtern. Jeder EA hat ja eine Magic Number. Die kannst Du in der History auch auslesen.

Dann kannst Du die Profit Werte wie Du willst akumullieren, oder was auch immer damit anstellen.

 

Dazu muss man zwei Werte speichern (irgendwie so - nicht getestet!):

  1. Max. des Saldo: double MaxBal = fmax(MaxBal ,AccountInfoDouble(ACCOUNT_BALANCE));
  2. Max. der Differenz: double DD = fmax(DD,MaxBal - AccountInfoDouble(ACCOUNT_BALANCE));
 
Carl Schreiber:

Dazu muss man zwei Werte speichern (irgendwie so - nicht getestet!):

  1. Max. des Saldo: double MaxBal = fmax(MaxBal ,AccountInfoDouble(ACCOUNT_BALANCE));
  2. Max. der Differenz: double DD = fmax(DD,MaxBal - AccountInfoDouble(ACCOUNT_BALANCE));

geht glaub ich so nicht Carl,

er will ja den Drawdown des einzelnen EA. Dazu darf man, meines Erachtens, nicht die Account_Balance verwenden. Zumindest nicht die Endbalance.

Mit der Anfangsbalance hast du ja den Beginn jeden Monats. Nehmen wir weiters an, Du handelst immer gleich groß.

Dann kannst Du die Gewinne / Verluste akumlieren, um mal die Performance zu finden

OrderHistory des gesamten EA über den Zeitraum.

und dann kannst Du weitersuchen für den max. Drawdown.


Ob Du den dann von oben oder unten berechnest, das ist noch eine weitere Frage.


aber warum eigentlich MT4?

 
amando:

geht glaub ich so nicht Carl,

er will ja den Drawdown des einzelnen EA. Dazu darf man, meines Erachtens, nicht die Account_Balance verwenden. Zumindest nicht die Endbalance.

Mit der Anfangsbalance hast du ja den Beginn jeden Monats. Nehmen wir weiters an, Du handelst immer gleich groß.

Dann kannst Du die Gewinne / Verluste akumlieren, um mal die Performance zu finden

OrderHistory des gesamten EA über den Zeitraum.

und dann kannst Du weitersuchen für den max. Drawdown.


Ob Du den dann von oben oder unten berechnest, das ist noch eine weitere Frage.


aber warum eigentlich MT4?

@Carl Schreiber

@amando


Bekomme den Profit/Verlust der einzelnen Orders nicht richtig rein...



static int Ergebnis = 200; //(startwert von damals)


for(int i=OrdersHistoryTotal()-1;i>=0;i--)
 {OrderSelect(i,SELECT_BY_POS,MODE_HISTORY); 
 if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==true){
   if(OrderMagicNumber()==12345)
{
       Ergebnis=Ergebnis+OrderProfit() ;
       Comment(Ergebnis);GetLastError();
    }
 }}

Funzt jedoch nicht (bei der comment Ausgabe bekomme ich nach der ersten Order eine Komma zahl, die im Millisekundentakt hochzählt (20.8794215, 20.8794216, 20.8794217... etc.)

Was mache ich falsch...


Option 2:

Hätte ansonsten eine static deklariert, die für jedes neue Schließen den Profit/Verlust addiert (Vergangenheit wäre zwar nicht dabei, aber dafür umso einfacher)....

(Scheint aber zuu einfach zu sein als das es funktionieren könnte (funzt nämlich leider gar nicht..)

if (Anzahl<OrdersHistoryTotal()){
     if(OrderSelect(OrdersHistoryTotal(),SELECT_BY_POS,MODE_HISTORY)==true && OrderSymbol()=="EURUSD" && OrderMagicNumber()==MagicNummer;){
    Ergebnis=Ergebnis+OrderProfit() ;))
     Comment (Ergebnis);}
     }
 
in dem du alle Trades nach einem unterschiedlichen Comment (klar jede EA hat einen anderen) filterst? 
 
Tino Viehweg:
in dem du alle Trades nach einem unterschiedlichen Comment (klar jede EA hat einen anderen) filterst? 

Wie meinst du das?

 
Bayne:

Wie meinst du das?

das versteh ich auch nicht, der Comment ist ja nur für die Visualisierung der Ausgabe.


ja klar, der Komment muss was machen

ich bin mir nicht mehr sicher, ist ewig her mit MT4, warum verwendest auch keinen MT5, da hätt ichs fertig ;-)

for(int i=OrdersHistoryTotal()-1;i>=0;i--)
 {OrderSelect(i,SELECT_BY_POS,MODE_HISTORY); 
 if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==true){
   if(OrderMagicNumber()==12345)
{
       Ergebnis+=OrderProfit() ;
       Comment(Ergebnis);GetLastError();
    }
 }}

könnte eventuell gehen, mir Ergebnis = Ergebnis+OrderProfit kanns nicht gehen

 

@amando (hab dieses Projekt in MT4 angefangen und will es so auch erstmal zuende bringen, bevor ich endlich zu MT5 wechseln kann)

Habs so wie oben probiert, funktioniert leider immernoch nicht.

Das Problem liegt darin, dass diese For Schleife mit jedem Tick ausgeführt wird. ich muss also den zgriff auf die vergangenen Orders blockieren, damit diese nicht immer wieder neu dazu gezählt werden, sondern nur wenn es tatsächlich eine neu geclosed'te Order gab.


Jmd nh idee wie ich das machen kann? mein code klappt nicht wirklich:


if (Anzahl<OrdersHistoryTotal()){
 for(int i=OrdersHistoryTotal()-1;i>=0;i--)
 {OrderSelect(i,SELECT_BY_POS,MODE_HISTORY); 
 if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==true){
   if(OrderMagicNumber()==12345)
{
       /*Ergebnis+=OrderProfit();
       Comment(Ergebnis);GetLastError();*/
       Ergebnis+= OrderProfit();
    }
 }}}
 
Wenn mehr als ein EA auf dem Konto laufen, muss man halt einen 'Saldo' der Erträge des EAs bilden, statt den des Kontos.
 

Machts nicht so kompliziert.


Ersoll seine Konten mit myfxbook verlinken und dann stehen ihm alle Möglichkeiten den DD ob einzeln oder 2 Eas monatlich jährlich whatever darzustellen.


Grund der Beschwerde: