Diskussion zum Artikel "Entwicklung eines Expertenberaters für mehrere Währungen (Teil 12): Entwicklung eines Risikomanagers auf der Ebene des Eigenhandels"

 

Neuer Artikel Entwicklung eines Expertenberaters für mehrere Währungen (Teil 12): Entwicklung eines Risikomanagers auf der Ebene des Eigenhandels :

In dem EA, der hier entwickelt wird, haben wir bereits einen bestimmten Mechanismus zur Kontrolle des Drawdowns. Sie ist jedoch probabilistischer Natur, da sie auf den Ergebnissen von Tests mit historischen Preisdaten beruht. Daher kann der Drawdown manchmal die maximal erwarteten Werte übersteigen (wenn auch mit einer geringen Wahrscheinlichkeit). Versuchen wir, einen Mechanismus hinzuzufügen, der die garantierte Einhaltung der festgelegten Drawdown-Höhe gewährleistet.

Kürzlich wurde das Thema Risikomanagement in den Artikeln Risikomanager für manuellen Handel und Risikomanager für algorithmischen Handelbehandelt. In diesen Artikeln schlug der Autor eine programmatische Implementierung vor, die die Einhaltung verschiedener Handelsparameter mit vorher festgelegten Indikatoren kontrolliert. Wird zum Beispiel die festgelegte Verlustgrenze für einen Tag, eine Woche oder einen Monat überschritten, wird der Handel ausgesetzt.

Der Artikel Einige Lektionen der Prop-Firmen erwies sich ebenfalls als interessant. Der Autor untersucht die Handelsanforderungen, die von Prop-Trading-Unternehmen auferlegt werden, um Händler herauszufordern, das Kapital für das Management zu erhalten. Trotz der zweideutigen Haltung gegenüber den Aktivitäten solcher Unternehmen, die auf verschiedenen dem Handel gewidmeten Ressourcen zu finden ist, ist die Anwendung klarer Regeln für das Risikomanagement eine der wichtigsten Komponenten eines erfolgreichen Handels. Es wäre also sinnvoll, die bereits gesammelten Erfahrungen zu nutzen und einen eigenen Risikomanager zu implementieren, der das Risikokontrollmodell der Prop-Trading-Unternehmen als Grundlage verwendet.

Autor: Yuriy Bykov

 
Tolle Arbeit, die Sie da leisten! Danke für den Artikel.
 
Vielen Dank für das Feedback! Wir werden unser Bestes tun, um die Messlatte weiterhin hoch zu halten.
 

Vielen Dank für den interessanten Artikel! Gute Arbeit.

Wenn ich darf, möchte ich einige logische und technische Punkte klären:

Verstehe ich das richtig, dass bei der Risikokontrolle in der Methode DailyLoss() das Risiko des Equity Drawdowns nicht berücksichtigt wird?

Warum verwenden Sie Makros, wenn Sie mit Arrays arbeiten?

Vielen Dank!

 

Danke für die Rückmeldung!

Правильно я понимаю, что при контроле рисков в методе DailyLoss() не учитывается риск просадки по еквити?

Wahrscheinlich falsch. Die Methode DailyLoss() wertet nicht aus, wie groß der Drawdown war. Sie rechnet lediglich die angegebene maximale Höhe des Drawdowns ggf. von Prozent in die Kontowährung um. Der Vergleich selbst findet in der Methode CheckDailyLimit() statt:

if(m_dailyProfit < -DailyLoss() && CMoney::DepoPart() > 0) { ... }

Der Wert von m_dailyProfit wird bei jedem Tick aktualisiert und errechnet sich aus der Differenz zwischen dem aktuellen Guthaben (Eigenkapital) und dem Tagesniveau(dem Maximum aus dem Saldowert und dem Guthaben zu Beginn der Tagesperiode):

m_dailyProfit = m_equity - m_baseDailyLevel;

Es sieht also so aus, als ob der Drawdown bei den Fonds einfach berücksichtigt wird. Oder habe ich die Frage missverstanden?


Warum verwenden Sie Makros, wenn Sie mit Arrays arbeiten?

Für die Kompaktheit des Codes. Mit Makros können Sie auch einen Codeblock als Parameter übergeben, während Sie bei der Implementierung solcher Operationen durch Funktionen keinen Codeblock als Parameter an Funktionen übergeben können.

 
Yuriy Bykov jedem Tick aktualisiert und errechnet sich aus der Differenz zwischen dem aktuellen Guthaben (Eigenkapital) und dem Tagesstand(dem Maximum aus Guthaben und Guthaben zu Beginn der Tagesperiode):

Es scheint also, dass der Drawdown bei den Fonds einfach berücksichtigt wird. Oder habe ich die Frage missverstanden?


Für die Kompaktheit des Codes. Außerdem erlauben Makros die Übergabe eines Codeblocks als Parameter, während Sie bei der Implementierung solcher Operationen durch Funktionen keinen Codeblock als Parameter an Funktionen übergeben können.

Vielen Dank für Ihre ausführliche Antwort )) Wir werden auf neue Artikel warten! )

 

Lieber Yuriy,

Ich versuche, den Code zu kompilieren, aber ich erhalte den folgenden Fehler in VirtualRiskManager.mqh:

"Changed - undeclared identifier" in Zeile CVirtualReceiver::Instance().Changed(); // Den Empfänger über Änderungen benachrichtigen

Ich habe den Code mehrere Male überprüft, aber es geht nicht. Können Sie mir erklären, was ich übersehe?

Ich freue mich schon auf den nächsten Artikel dieser Serie.

Danke

 

Hallo!

Ich bitte um Entschuldigung, ich habe vergessen, mindestens eine weitere Datei beizufügen, an der Bearbeitungen vorgenommen wurden. Ab Teil 16 wird jedem Artikel ein komplettes Archiv der Projektdateien beigefügt. Ich werde es hier für diesen Artikel anhängen.

Dateien:
MQL5.zip  80 kb
 
Yuriy Bykov Projektdateien beigefügt. Ich werde es hier für diesen Artikel anhängen.
Vielen Dank!