Beliebte Beiträge

Tipp Der Redaktion - 2019

MQL4: Berechnung statistischer Koeffizienten und deren Verwendung zur Optimierung von Beratern

Grüße, Freunde!

Es gibt einige verschiedene statistische Koeffizienten, die den einen oder anderen Aspekt der Qualität des Handelssystems widerspiegeln. Und was passiert, wenn wir die TS basierend auf den Werten eines dieser Koeffizienten optimieren? Heute werden wir uns mit diesem Problem in einer neuen Programmierstunde befassen.

Benutzerdefiniertes Optimierungskriterium

Glücklicherweise bietet MetaTrader die Möglichkeit, Berater anhand benutzerdefinierter Optimierungskriterien zu testen. Diese Funktion finden Sie in den "Expert Advisor Properties" auf der Registerkarte "Testing":

Der Parameter selbst, bezüglich dessen die Optimierung erfolgt, wird im Körper des Experten mit der speziellen onTester () -Methode berechnet.

Tintenfischverhältnis

Hier ist eine Berechnung des klassischen Tintenfischkoeffizienten:

double OnTester () {double AvProfit = 0; doppeltes Kalmar = 0; if (TesterStatistics (STAT_PROFIT_TRADES)> 0) {AvProfit = NormalizeDouble (TesterStatistics (STAT_GROSS_PROFIT) / TesterStatistics (STAT_TRADES), Digits); Kalmar = NormalizeDouble (AvProfit / TesterStatistics (STAT_BALANCE_DD), Digits); } return (Kalmar); }

Dieser Koeffizient wurde speziell erfunden, um die Wirksamkeit einer bestimmten Handelsstrategie eines Händlers zu bewerten. Nach Ansicht vieler Anleger löst es recht komplexe Probleme bei der Auswahl eines Anlageobjekts.

Zum ersten Mal Tintenfischkoeffizient wurde in einem der bekanntesten Futures Exchange Magazine vom Autor der Rubrik Trust and Investment in Hedge Funds, Terry Young, vorgestellt. Dieser Indikator basiert auf einem Konzept, das den Händlern als Drawdown bekannt ist.

Der Hauptnachteil dieses Indikators besteht darin, dass das Risiko nur durch ein einziges Ereignis bestimmt wird (maximaler Verlust), wodurch seine statistische Signifikanz und Repräsentativität verringert wird. Die Verwendung der maximalen Belastung als einzelne Risikobewertung kann zu Verzerrungen bei der Bewertung der Ergebnisse aufgrund von Emissionen führen. Daher können Sie die Formel leicht ändern, indem Sie einige zusätzliche Daten eingeben:

double OnTester () {double AvProfit = 0; doppeltes Kalmar = 0; if (TesterStatistics (STAT_PROFIT_TRADES)> 0) {AvProfit = NormalizeDouble (TesterStatistics (STAT_GROSS_PROFIT) / TesterStatistics (STAT_TRADES), Digits); } Kalmar = NormalizeDouble (-AvProfit * (TesterStatistics (STAT_CONPROFITMAX_TRADES) / TesterStatistics (STAT_TRADES)) / (TesterStatistics (STAT_MAX_LOSSTRADE) * (TesterStatistics (STAT_CONLOSSMAX_TRADES)); Rückkehr (Kalmar); }

Sortino-Koeffizient

Viele verschiedene Metriken werden zur Bewertung von Handelssystemen verwendet. Jeder von ihnen zielt darauf ab, den einen oder anderen Faktor zu identifizieren, und einer dieser Indikatoren ist der Sortino-Koeffizient.

Sortino-Koeffizient Es ist üblich, in Fällen zu verwenden, in denen wir an der Streuung negativer Renditewerte interessiert sind. Die Berechnungsmethode ist der Berechnung der Sharpe Ratio sehr ähnlich. Wenn sowohl positive als auch negative Renditen für das Sharpe-Verhältnis verwendet werden, werden nur negative Werte für den Sortino-Koeffizienten verwendet.

Es ist erwähnenswert, dass Harry Markowitz, der die moderne Theorie des Portfolios entwickelte, die Wichtigkeit der Verwendung negativer Abweichungen als Maß für das Risiko bemerkte. Eine positive Rendite wirkt sich für einen Anleger immer positiv aus, eine negative wirkt sich jedoch negativ aus und muss untersucht werden.

Schreiben wir einen Code, der den Wert des Sortino-Koeffizienten berechnet und zurückgibt:

double OnTester () {double AvProfit = 0; doppeltes Sortino = 0; doppeltes AvLoss = 0; doppelter MaxLoss = 0; if (TesterStatistics (STAT_PROFIT_TRADES)> 0) AvProfit = NormalizeDouble (TesterStatistics (STAT_GROSS_PROFIT) / TesterStatistics (STAT_PROFIT_TRADES), Digits); AvLoss = NormalizeDouble (TesterStatistics (STAT_GROSS_LOSS) / TesterStatistics (STAT_LOSS_TRADES), Digits); MaxLoss = NormalizeDouble (TesterStatistics (STAT_MAX_LOSSTRADE), Digits); Sortino = NormalizeDouble (((AvProfit-MaxLoss) / - AvLoss), Digits); return (Sortino); }

Trainingskoeffizient

Trainingskoeffizient (Treynor 1965) wird auch als Verhältnis von Belohnung zu Volatilität bezeichnet und steht für das Verhältnis von Überschussrenditen zu Marktrisiko. Im Gegensatz zur Sharpe Ratio korreliert die Profitabilität in diesem Indikator nicht mit dem allgemeinen Risiko, sondern nur mit dem systematischen (nicht diversifizierbaren) Risiko.

Je höher die Werte des Trainor-Indikators sind, desto effizienter wird das Anlageportfolio verwaltet. Daher werden die Strategien ausgewählt, die die höchsten Werte des Trainor-Indikators aufweisen. In der Regel wird dieser Indikator zum Erstellen von Portfolioratings verwendet.

Werfen wir einen Blick auf den Code:

double OnTester () {double AvProfit = 0; doppeltes Treynor = 0; doppeltes AvLoss = 0; double MaxProfit = 0; if (TesterStatistics (STAT_PROFIT_TRADES)> 0) AvProfit = NormalizeDouble (TesterStatistics (STAT_GROSS_PROFIT) / TesterStatistics (STAT_PROFIT_TRADES), Digits); AvLoss = NormalizeDouble (TesterStatistics (STAT_GROSS_LOSS) / TesterStatistics (STAT_LOSS_TRADES), Digits); MaxProfit = NormalizeDouble (TesterStatistics (STAT_MAX_PROFITTRADE), Digits); Treynor = NormalizeDouble (((AvProfit-MaxProfit) / - AvLoss), Digits); Rückkehr (Treynor); }

Sharpe Ratio

Sharpe Ratio kam mit dem berühmten amerikanischen Ökonomen - William Sharp. Heute ist es einer der am häufigsten verwendeten Indikatoren für das Risiko-Rendite-Verhältnis. Weitere Informationen zur Sharpe-Ratio finden Sie in einem separaten Artikel. Nun, wir sehen uns den Code an:

double OnTester () {double AvProfit = 0; double Sharp = 0; double ObLoss = 0; double MaxProfit = 0; if (TesterStatistics (STAT_PROFIT_TRADES)> 0) AvProfit = NormalizeDouble (TesterStatistics (STAT_GROSS_PROFIT) / TesterStatistics (STAT_PROFIT_TRADES), Digits); MaxProfit = NormalizeDouble (TesterStatistics (STAT_MAX_PROFITTRADE), Digits); ObLoss = NormalizeDouble (TesterStatistics (STAT_GROSS_LOSS), Digits); Sharp = NormalizeDouble (((AvProfit-MaxProfit) / - ObLoss), Digits); return (scharf); }

Fazit

Auf diese Weise können Sie alle Statistiken Ihrer Handelsexperten optimieren, indem Sie Formeln verschiedener allgemein anerkannter statistischer Koeffizienten verwenden und Ihre eigenen erstellen.

Sehen Sie sich das Video an: Robot Building Tutorials #6 - Intro to MQL4 (Dezember 2019).

Lassen Sie Ihren Kommentar