Bibliotheken: CTradeStatistics

 

CTradeStatistics:

Eine Klasse für die Berechnung des ENUM_STATISTICS Enumerationsparameters

Autor: Andrey Voytenko

 
Automated-Trading:

CTradeStatistics:

Autor: Andrey Voytenko

Guten Tag!

Ich bin daran interessiert, ob es möglich ist, die LR-Korrelation in die OnTester()-Funktion zu setzen, um den Expert Advisor nach diesem Kriterium zu optimieren, und zwar über Custom max?

 
forexman77:

Ich interessiere mich dafür, ob es möglich ist, die LR-Korrelation in die Funktion OnTester() einzubinden: ....

Die Beschreibung gibt ein Beispiel mit OnTrade(). Nichts hindert Sie daran, die Berechnungen in OnTester() zu verschieben.

 
avoitenko:

Die Beschreibung gibt ein Beispiel mit OnTrade(). Nichts hindert Sie daran, die Berechnungen auf OnTester() zu übertragen.

Ich bin nicht sehr vertraut mit mql5, also entschuldigen Sie bitte offensichtliche Fehler.

Ich versuche, dies im EA-Code vor OnDeinit zu tun:

double OnTester()
{
double lrk=TesterStatistics(STAT_LR_CORRELATION);
  return(lrk);
}

Es kommt der Fehler "'STAT_LR_CORRELATION' - can't convert enum" heraus.

Wenn ja:

double OnTester()
  {
//--- wiederholte Anfragen in derselben Sekunde blockieren.
   static datetime time_on_trade;
   if(time_on_trade==TimeTradeServer())return;
   time_on_trade=TimeTradeServer();

//--- Statistik aktualisieren
   if(!m_stat.Calculate())Print(m_stat.GetLastErrorString());

  }

Fehler: "'return' - Funktion muss einen Wert zurückgeben", " '}' - nicht alle Kontrollpfade geben einen Wert zurück".

1 und 2 Zeile im EA:

#include <CTradeStatistics.mqh>
CTradeStatistics m_stat;

Sagen Sie mir, was falsch ist?

 

Ich habe es durch Versuch und Irrtum geschafft:

double OnTester()
{
CTradeStatistics m_stat;  
if(m_stat.Calculate()) PrintFormat("LR Correlation: %.2f",m_stat.LRCorrelation());
else Print(m_stat.GetLastErrorString());
double LRC=(double)m_stat.LRCorrelation();
return(LRC);
}
Ich glaube, es hat funktioniert...?
 

Andrei, es gibt einige Kommentare.

1. Zeile 500

if(m_balance_data.At(i)!=0.0) ändern in if(m_balance_data.At(i-1)!=0.0)


2. Zeile 511
keine Überprüfung des Nenners m_initial_deposit auf 0

3. Geben Sie unbedingt an, dass Sie die m_sharpe_ratio-Berechnung für die Option "Jährliche Sharpe Ratio" mit der Option "RiskFreeRate" verwenden

verwenden, da dies nur eine der Optionen ist, die sich ausdrücklich von der Standardoption unterscheidet.

 

Ich habe festgestellt, dass dieser Code keine Statistiken zum Equity Drawdown berechnen kann. Hat jemand einen Erfolg bei der Berechnung des Equity Drawdown mit seinem eigenen Code?

 

Was meinen Sie? Ich muss Ihre Frage falsch verstanden haben, denn diese einfache Antwort kann unmöglich das sein, wonach Sie suchen, oder? ---> Equity - Balance = { Draw-Down wenn negativ, Profit wenn positiv } ziemlich einfache Berechnung. Mit MT5 Handelsklassen können Sie ein Kontoobjekt CAccountInfo acc erstellen; acc ist das erstellte Kontoinformationsobjekt, das Ihnen schnellen Zugriff auf alle Kontodetailfunktionen bietet. dann machen Sie dies acc.Equity()-acc.Balance(). Nun, um ehrlich zu sein, können Sie einen noch einfacheren Code verwenden acc.Profit(). Wenn positiv ist Gewinn, wenn negativ ist Draw-Down richtig? Negatives Eigenkapital Gewinn ist das gleiche wie Draw-Down. Profit() ist die Differenz zwischen Eigenkapital und Balance

Wenn Ihre Frage komplexer ist, fügen Sie bitte Details hinzu ;)

 
Vielen Dank, Andrey! Ausgezeichnete Arbeit.
 
keine durchschnittliche Haltezeit?
 

perfekte Arbeit!

wenn Sie Kompilierwarnungen vermeiden wollen

müssen Sie das Null-Element zum enum deal_result hinzufügen:

//+------------------------------------------------------------------+
//| Geschäftsergebnis |
//+------------------------------------------------------------------+
enum deal_result
{
NOVALUE=0, //<---- hinzugefügt
WIN=1,
LOSS
};