Optimieren einer Strategie unter Verwendung einer Kurve der Salden und dem Vergleich der Ergebnisse mit dem Kriterium "Balance + max Sharpe Ratio"
Inhalt
- 1. Einführung
- 2. Wie berechnet man eine Trendlinie aus einer Grafik der Salden?
- 2.1. Algorithmus der Berechnung des Kriteriums für die Optimierung
- 2.2. Einführung der ersten Variable TrendProfit
- 2.3. Die Variable ProfitStability
- 3. Arbeiten mit der Bibliothek ALGLIB
- 4. Einbinden der Klasse CBalanceRegression
- 4.1. Ein Expert Advisor erstellt mit dem MQL5 Wizard
- 4.2. Ein Expert Advisor einem standardmäßigen MACD und einer mit gleitendem Durchschnitt
- 5. Optimierung mit EURUSD H4, kein Vorwärts-Test
- 5.1. "EA-Test Salden regression.mq5", EURUSD H4, kein Vorwärts-Test
- 5.1.1 Test 1
- 5.1.2. Vergleich der Testgeschwindigkeit zwischen der im lokalen Netzwerk mit zwei PC und der in der Cloud
- 5.1.3. Test 2
- 5.1.4. Test 3
- 5.2. "Moving Average balance regression.mq5", EURUSD H4, kein Vorwärts-Test
- 5.3. "MACD Sample balance regression.mq5", EURUSD H4, kein Vorwärts-Test
- 6. Optimierung mit EURUSD M15 mit Vorwärts-Test
- 6.1. EA "EA test balance regression.mq5", Vorwärts-Test
- 6.2. EA "MACD Sample balance regression.mq5", Vorwärts-Test
- 6.3. EA "Moving Average balance regression.mq5", Vorwärts-Test
- 7. Schlussfolgerung
1. Einführung
Während meiner Arbeit wurde mir klar, dass es für die Saldenkurve nicht ausreicht, einfach nur das historische Wachstum zu beurteilen. Außerdem sollte sie möglichst gerade sein. Mit anderen Worten, die mittlere quadratische Abweichung von der Trendlinie sollte so klein wie möglich sein. Das bedeutet, dass wir neben Profit auch Stabilität erreichen wollen. Um das zu erreichen, lassen Sie uns noch einen weiteren Optimierungsparameter überprüfen: Die Saldenkurve und die Varianz der Abweichungen der Werte von der Regressionsgeraden.
Wir verwenden die Bibliothek ALGLIB für numerische Berechnungen der linearen Regression und einige andere statistischer Kenngrößen.
2. Wie berechnet man eine Trendlinie aus einer Grafik der Salden?
Wir müssen jene Trendlinie für die Saldenkurve ermitteln, die die Summe der Quadrate der Abweichungen von der Linie minimiert.
Die Parameter der Geradengleichung y=ax+b werden mit der Standardmethode des kleinsten Quadrats (LS) ermittelt. Ich werde nicht alle notwendigen mathematischen Gleichungen entwickeln. Stattdessen werde ich eine fertige Funktion aus der Bibliothek ALGLIB verwenden, die an unsere Erfordernisse angepasst wird.
2.1. Algorithmus der Berechnung des Kriteriums für die Optimierung
Schauen wir uns ein Beispiel von fünf Positionen an:
Abb. 1. Saldenkurve und die lineare Regression
Diese fünf Positionen aus "Balance" 1-2-3-4-5 Saldenkurve. Die linearen Regression wird mit die Methode der kleinsten Quadrate berechnet und gezeichnet (berechnet durch die numerische Analyse der Bibliothek ALGLIB).
2.2. Einführung der ersten Variable TrendProfit
Sie steht für Gewinn je Position in der gezeichneten Linie:
Abb. 2. TrendProfit parameter
Die Variable errechnet sich aus dem Verhältnis der Regressionsgeradenhöhe zur Anzahl der Positionen. Die Höhe wird wiederum als Differenz der Regressionsgeraden an den Punkten B und A berechnet.
Nun müssen wir den Fehler der Regressionsgeraden ermitteln - die durchschnittliche Abweichung der Regressionsgeraden von der Saldenkurve. Wir nennen dies die Standardabweichung der Salden von der linearen Regression und kennzeichnen sie als LR Standardabweichung:
Pic. 3. LR Standardabweichung
In dieser Gleichung wird der Fehler aus der Differenz vom Saldo und dem Wert der linearen Regression ermittelt. Sie finden Details dazu hier (auf russisch).
Im Fall der Abb. 1, sind die Fehler wir folgt:
error #1 | error #2 | error #3 | error #4 | error #5 |
---|---|---|---|---|
10 000 - 10 600 = - 600 | 12 000 - 11 200 = 800 | 11 000 - 11 800 = - 800 | 14 000 - 12 400 = 1600 | 12 000 - 13 000 = - 1000 |
Daher errechnet sich der LR Standardabweichung wie folgt:
Pic. 4. Berechnung des LR Standardabweichungs
2.3. Die Variable ProfitStability.
Dieser Parameter ist verantwortlich für die Glätte des Saldenkurve. Unsere Ziele:
- Die Regressionsgerade sollte möglichst steil sein, relativ zur Waagerechten - das bedeutet mehr Gewinn;
- Die Abweichung der Saldenkurve von der Regressionsgeraden sollte so gering wie möglich sein - dies deutet auf eine stabilere Handelsbilanz hin.
Die ProfitStability wird als Verhältnis von TrendProfit und LR Standardabweichung berechnet:
Pic. 5. Die Variable ProfitStability
Um die Auswirkungen von Positionen mit unterschiedlichen Volumina zu reduzieren, können wir die Variable ProfitStability durch das Gesamtvolumen aller Positionen dividieren.
3. Arbeiten mit der Bibliothek ALGLIB
Aktuell (Build 1645) ist die Bibliothek ALGLIB seit langem Teil der Standardbibliothek: [date folder]\MQL5\Include\Math\Alglib\alglib.mqh
Pic. 6. Der Pfad zu Bibliothek ALGLIB in der Standardbibliothek
Die Klassen der Bibliothek ALGLIB
Um mit der linearen Regression arbeiten zu können, benötigen wir die folgenden Klassen:- Klasse CLinReg — Basisklasse zur Berechnung der linearen Regression
- Methode CLinReg::LRBuild — Berechnet die linearen Regression
- Methode CLinReg::LRUnpack — Rückgabe des Koeffizienten der linearen Modells
- Klasse CLinearModel — Hilfsklasse
- Klasse CLRReport — Struktur, die die erweiterten Daten des linearen Modells enthält. Insbesondere interessieren wir uns für die Variable m_rmserror (mittlerer quadratischer Fehler).
Klasse BalanceRegression.mqh
Alle Arbeiten, die mit der linearen Regression und der Parameterberechnung zusammenhängen, werden in der Klasse BalanceRegression.mqh ausgeführt.
Methoden der Klassen
Parametereinstellungen | |
---|---|
SetStartBalance | Bestimmt den Anfangssaldo |
SetFromDate | Setzt das Anfangsdatum in der Handelshistorie |
SetVolumeNormalization | Bestimmt die Art, die Volumina zu normalisieren |
Abfrage der Ergebnisse | |
GetProfitStability | Abfrage der Ergebnisse |
Die Arbeit mit CBalanceRegression umfasst folgende Schritte.
- Bestimmen des Anfangssaldo — Aufruf der Methode SetStartBalance.
- Setzten das Anfangsdatum in der Handelshistorie — Aufruf der Methode SetFromDate.
- Bestimmen der Art, die Volumina zu normalisieren — Aufruf der Methode SetVolumeNormalization. Wenn Sie die Volumina normalisieren wollen, über geben Sie 'true', sonst — 'false'.
- Abfrage der Ergebnisse — Aufruf der Methode GetProfitStability, sie gibt die Ergebnisse von OnTester zurück.
3.1. Berechnungsschritte (Methode GetProfitStability)
Die Ergebnisse der Positionen mit (Kommission + Swap + Gewinn) > 0.0 werden im Array arr_profits gesichert. Die Volumina aller Positionen müssen in der Variablen total_volume aufsummiert werden.
//--- double arr_profits[]; // array of results deals double total_volume=0; // total volume
Als nächstes gehen Sie alle Positionen durch - tragen Sie sie in das Array arr_profits ein und addieren Sie die Volumina der Positionen zur Variablen total_volume:
//--- request trade history HistorySelect(m_from_date,to_date); uint total_deals=HistoryDealsTotal(); ulong ticket_history_deal=0; //--- for all deals for(uint i=0;i<total_deals;i++) { //--- try to get deals ticket_history_deal if((ticket_history_deal=HistoryDealGetTicket(i))>0) { long deal_type =HistoryDealGetInteger(ticket_history_deal,DEAL_TYPE); double deal_volume =HistoryDealGetDouble(ticket_history_deal,DEAL_VOLUME); double deal_commission =HistoryDealGetDouble(ticket_history_deal,DEAL_COMMISSION); double deal_swap =HistoryDealGetDouble(ticket_history_deal,DEAL_SWAP); double deal_profit =HistoryDealGetDouble(ticket_history_deal,DEAL_PROFIT); if(deal_type!=DEAL_TYPE_BUY && deal_type!=DEAL_TYPE_SELL) continue; if(deal_commission==0.0 && deal_swap==0.0 && deal_profit==0.0) continue; total_volume+=deal_volume; int arr_size=ArraySize(arr_profits); ArrayResize(arr_profits,arr_size+1,50); // resize the aray if(arr_size==0) arr_profits[arr_size]=GetSetStartBalance()+deal_commission+deal_swap+deal_profit; else arr_profits[arr_size]=arr_profits[arr_size-1]+deal_commission+deal_swap+deal_profit; int d=0; } }
Anmerkung: Wenn wir den ersten Eintrag in das Array arr_profits vornehmen, summieren wir den Anfangssaldo und die Resultate der Positionen. Für alle nachfolgenden Einträge summieren Sie die vorherige Eintragung und das Endergebnis des Handels.
Deklarieren Sie das Objekt der Klasse CMatrixDouble. Eigentlich ist das eine Matrix. Füllen wir sie aus: Positionsnummer (beginnend in "1") und das finanzielle Ergebnis.
//--- CMatrixDouble object CMatrixDouble xy(arr_size,2); for(int i=0;i<arr_size;i++) { xy[i].Set(0,i+1); xy[i].Set(1,arr_profits[i]); //Print(arr_profits[i]); // for debag }
Deklarieren Sie die Objekte der benötigten Klassen (CLinReg, CLinearModel, CLRReport) und berechnen Sie die linearen Regression:
//--- linear regression construction CLinReg linear_regression; CLinearModel linear_model; CLRReport linear_report; int retcode; linear_regression.LRBuild(xy,arr_size,1,retcode,linear_model,linear_report); if(retcode!=1) { Print("Linear regression failed, error code=",retcode); return(0.0); } int nvars; double coefficients[]; linear_regression.LRUnpack(linear_model,coefficients,nvars); double coeff_a=coefficients[0]; double coeff_b=coefficients[1]; PrintFormat("y = %.1f x + %.1f",coeff_a,coeff_b);
Rufen Sie schließlich die Methode LRUnpack auf, um die Koeffizienten für der Gleichung y = a*x + b zu erhalten. Die Koeffizienten sind im Array der Koeffizienten.
Nachdem wir nun die lineare Regression mit Hilfe der Bibliothek ALGLIB berechnet haben, können wir direkt mit der Berechnung des Parameters fortfahren, der den Schwerpunkt des gesamten Artikels bildet.
//--- сalculation of parameters double TrendProfit=((double)arr_size*coeff_a+coeff_b)-(1.0*coeff_a+coeff_b); // the projection of the regression line on the "Y" axis TrendProfit/=(double)arr_size; // divided by the number of trades double TrendMSE=linear_report.m_rmserror; // root mean square error on a training set double ProfitStability=TrendProfit/TrendMSE; //--- normalize the trading volume if(GetVolumeNormalization()) ProfitStability/=total_volume; //--- we multiply by the number of deals - we aren't interested in passes which have few deals ProfitStability*=arr_size; //--- return(ProfitStability*10000.0);
Abhängig vom anfänglichen Parametern, gesetzt von der Methode SetVolumeNormalization, teilen wir den Parameter ProfitStability entweder in die Summe der gehandelten Volumina auf oder nicht. Das Ergebnis wird mit 10 000 multipliziert, um die Ergebnisse besser darstellen zu können.
4. Einbinden der Klasse CBalanceRegression
Betrachten wir den Vorgang verschiedener EAs, die Klasse CBalanceRegression einzubinden.
4.1. Ein Expert Advisor erstellt mit dem MQL5 Wizard
Wir wollen prüfen, wie sich die Normalisierung der gehandelten Volumina auf das Ergebnis auswirkt. Das bedeutet, dass wir einen EA benötigen, der dynamisch das Volumen der offenen Positionen berechnet. Dies kann im MQL5 Wizard geschehen: Wählen Sie Expert Advisor (erstellen) und fügen Sie eines der Geldmanagementmodule auf der Seite "Geldmanagement" hinzu:
- "Handeln mit fixer Margin" — berechnet die Lotgröße in % der freien Margin
- "Handeln mit fixem Risiko" — berechnet die Lotgröße in % des Kontosaldos
- "Handeln mit optimierten Handelsvolumen" — berechnet die Lotgröße in Abhängigkeit der Handelshistorie
Für diesen Artikel wählte ich das Geldmanagementmodul "Handeln mit fixem Risiko", und der EA heißt "EA test balance regression.mq5". Beispielsweise zeige ich die Einbindung der Datei mit der Klasse CBalanceRegression.
Schritt 1. Einbinden der Datei CBalanceRegression und Anlegen des Klassenobjektes (m_balance_regression).
ACHTUNG: Die Datei der Klasse CBalanceRegression sollte sich im Verzeichnis [data-Ordner]\MQL5\Include\Balance regression befinden.
//--- available money management #include <Expert\Money\MoneyFixedRisk.mqh> //--- available module Balance Regression #include <Balance regression\BalanceRegression.mqh> //+------------------------------------------------------------------+ //| Inputs | //+------------------------------------------------------------------+
and
//+------------------------------------------------------------------+ //| Global expert object | //+------------------------------------------------------------------+ CExpert ExtExpert; CBalanceRegression m_balance_regression; //+------------------------------------------------------------------+ //| Initialization function of the expert | //+------------------------------------------------------------------+
Schritt 2. Ergänzen eines Eingabeparameters, um das Normalisieren der Volumina zu aktivieren/deaktivieren:
input double Money_FixRisk_Percent=10.0; // Percentage of risk //--- inputs for balance normalization input bool InpVolumeNormalization=true; // Volume normalization //+------------------------------------------------------------------+ //| Global expert object | //+------------------------------------------------------------------+
Schritt 3. Legen Sie die Parameter für das Objekt m_balance_regression der Klasse CBalanceRegression fest: Ausgangsdaten für die Abfrage der Handelshistorie und des Modus der Normalisierung des Handelsvolumens:
//+------------------------------------------------------------------+ //| Initialization function of the expert | //+------------------------------------------------------------------+ int OnInit() { //--- Set parameters of CBalanceRegression m_balance_regression.SetStartBalance(AccountInfoDouble(ACCOUNT_BALANCE)); m_balance_regression.SetFromDate(TimeCurrent()); m_balance_regression.SetVolumeNormalization(InpVolumeNormalization); //--- Initializing expert
Schritt 4. Fügen Sie die Funktion OnTester ganz am Ende der Datei hinzu. Hier erhalten wir das eigene Optimierungskriterium (durch Aufruf von GetProfitStability) und übergeben die Parameter an den Tester:
//+------------------------------------------------------------------+ //| Tester function | //+------------------------------------------------------------------+ double OnTester() { //--- double ret=m_balance_regression.GetProfitStability(TimeCurrent()); //--- return(ret); }
4.2. Der Expert Advisors auf Basis eines standardmäßigen MACD und einem gleitenden Durchschnitt
Die originalen EAs befinden sich in [Datenordner]\MQL5\Experten\Beispiele\MACD\MACD Sample.mq5 bzw. [Datenordner]MQL5\Experten\Beispiele\Moving Average\Moving Average.mq5.
Nehmen Sie die original EAs und speichern Sie ihre Kopien unter einem anderen Namen. Ich habe die Namen "MACD Sample balance regression.mq5" und "Moving Average balance regression.mq5" gewählt.
Schritt 1. Binden Sie die Datei der Klasse CBalanceRegression ein und deklarieren Sie das Objekt dieser Klasse (m_balance_regression).
ACHTUNG: Die Datei der Klasse CBalanceRegression sollte sich im Verzeichnis [data-Ordner]\MQL5\Include\Balance regression befinden.
MACD Sample balance regression.mq5 | Moving Average balance regression.mq5 |
---|---|
#include <Trade\AccountInfo.mqh> //--- available module Balance Regression #include <Balance regression\BalanceRegression.mqh> CBalanceRegression m_balance_regression; //--- input double InpLots =0.1; // Lots | #include <Trade\Trade.mqh> //--- available module Balance Regression #include <Balance regression\BalanceRegression.mqh> CBalanceRegression m_balance_regression; input double MaximumRisk = 0.02; // Maximum Risk in percentage |
Schritt 2. Ergänzen eines Eingabeparameters, um das Normalisieren der Volumina zu aktivieren/deaktivieren:
MACD Sample balance regression.mq5 | Moving Average balance regression.mq5 |
---|---|
input int InpMATrendPeriod =26; // MA trend period //--- inputs for balance normalization input bool InpVolumeNormalization=true; // Volume normalization //--- int ExtTimeOut=10; // time out in seconds between trade operations | input int MovingShift = 6; // Moving Average shift //--- inputs for balance normalization input bool InpVolumeNormalization=true; // Volume normalization //--- int ExtHandle=0; |
Schritt 3. Legen Sie die Parameter für das Objekt m_balance_regression der Klasse CBalanceRegression fest: Ausgangsdaten für die Abfrage der Handelshistorie und des Modus der Normalisierung des Handelsvolumens:
MACD Sample balance regression.mq5 | Moving Average balance regression.mq5 |
---|---|
//+------------------------------------------------------------------+ //| Initialization and checking for input parameters | //+------------------------------------------------------------------+ bool CSampleExpert::Init(void) { //--- Set parameters of CBalanceRegression m_balance_regression.SetStartBalance(AccountInfoDouble(ACCOUNT_BALANCE)); m_balance_regression.SetFromDate(TimeCurrent()); m_balance_regression.SetVolumeNormalization(InpVolumeNormalization); //--- initialize common information | //+------------------------------------------------------------------+ //| Initialisierungsfunktion des Experten | //+------------------------------------------------------------------+ int OnInit(void) { //--- Set parameters of CBalanceRegression m_balance_regression.SetStartBalance(AccountInfoDouble(ACCOUNT_BALANCE)); m_balance_regression.SetFromDate(TimeCurrent()); m_balance_regression.SetVolumeNormalization(InpVolumeNormalization); //--- prepare trade class to control positions if hedging mode is active |
Schritt 4. Fügen Sie die Funktion OnTester ganz am Ende der Datei hinzu. Hier erhalten wir das eigene Optimierungskriterium (durch Aufruf von GetProfitStability) und übergeben die Parameter an den Tester:
//+------------------------------------------------------------------+ //| Tester function | //+------------------------------------------------------------------+ double OnTester() { //--- double ret=m_balance_regression.GetProfitStability(TimeCurrent()); //--- return(ret); }
5. Optimierung mit EURUSD H4, kein Vorwärts-Test
Wir haben drei EAs, mit denen wir die Idee der Optimierung der Saldokurve mit der Regressionsmethode überprüfen können. Die beiden EAs ("EA Test Balance Regression.mq5" und "Moving Average Balance Regression.mq5") berechnen das Positionsvolumen dynamisch während des Handels, während "MACD Sample Balance Regression.mq5" eine fixe Lotgröße verwendet.
5.1. "EA test balance regression.mq5", EURUSD, H4, kein Vorwärts-Test
Um keine Optionen zu verpassen und das Testen zu beschleunigen, habe ich die beiden Parameter zur Optimierung gewählt - die Parametergrenzen für die Signale zum Eröffnen und Schließen der Position:
Pic. 7. EA-Fenster zur Optimierung
- Test 1: Optimierung des Standardparameters "Balance + max Sharp Ratio",
- Test 2: Optimierung des benutzerdefinierten Parameters "Custom max", während der Parameter für die Optimierung der gehandelten Volumina 'false' ist,
- Test 3: Optimierung des benutzerdefinierten Parameters "Custom max", während der Parameter für die Optimierung der gehandelten Volumina 'true' ist.
5.1.1 Test 1: Optimierung der Standardparameter "Balance + max Sharp Ratio".
Einstellungen des Testers für Test 1 (Hinweis: Der Parameter "Optimierung" entspricht "Balance + max Sharpe Ratio"):
Pic. 8. Eingabefenster des Testers
5.1.2. Vergleich der Testgeschwindigkeit zwischen der im lokalen Netzwerk mit zwei PC und der in der Cloud
Das lokale Netzwerk mit zwei Computern:
- Ein Laptop mit Quad-Core Intel Core i3-3120M @2.50GHz, 8077 MB. Es wurden nur drei der vier Agenten für den Test verwendet, das das Terminal mit den Agenten des zweiten Computers Verbindung halten muss;
- Ein Desktop-PC mit einem Sechskern AMD Phenom II X6 1075T Prozessor, 4058 MB. Es wurden nur vier der sechs für den Test verwendet, um die CPU nicht zu überhitzen.
Pic. 9. Optimierung im lokalen Netzwerk
Test 1 im lokalen Netzwerk dauerte 21 Minuten und 43 Sekunden.
Jetzt lösche ich die gespeicherten Testergebnisse und starte Test 1 erneut in der MQL5 Cloud Europe 1. In der Cloud, benötigte der Test 1 Minute und 9 Sekunden. Der Test kostete $0.06.
Die Ergebnisse des Tests 1, absteigend sortiert nach der Spalte "Result", die fünf besten Ergebnisse:
Pass | Result | Profit | Expected Payoff | Profit Factor | Recovery Factor | Sharpe Ratio | Custom | Equity DD % | Trades | Signal_ThresholdOpen | Signal_ThresholdClose |
---|---|---|---|---|---|---|---|---|---|---|---|
346 | 4349.76 | 17818.98 | 181.83 | 1.28 | 1.45 | 0.16 | 27989.31 | 60.48 | 98 | 30 | 100 |
345 | 4349.76 | 17818.98 | 181.83 | 1.28 | 1.45 | 0.16 | 27989.31 | 60.48 | 98 | 25 | 100 |
344 | 4349.76 | 17818.98 | 181.83 | 1.28 | 1.45 | 0.16 | 27989.31 | 60.48 | 98 | 20 | 100 |
343 | 4349.76 | 17818.98 | 181.83 | 1.28 | 1.45 | 0.16 | 27989.31 | 60.48 | 98 | 15 | 100 |
327 | 4349.76 | 17818.98 | 181.83 | 1.28 | 1.45 | 0.16 | 27989.31 | 60.48 | 98 | 30 | 95 |
Pic. 10. Test 1, Optimierungsdurchlauf 346
5.1.3. Test 2: Optimierung des benutzerdefinierten Parameters "Custom max", während der Parameter für die Optimierung der gehandelten Volumina 'false' ist,
Die Einstellungen für Test 2 (Hinweis: "Custom max" entspricht "Optimization"):
Pic. 11. Eingabefenster des Testers
Die Einstellungen für Test 2 (Hinweis: "Volume normalization" ist auf 'false' gesetzt):
Pic. 12. EA-Fenster zur Optimierung
Die Ergebnisse des Tests 2, absteigend sortiert nach der Spalte "Result", die fünf besten Ergebnisse:
Pass | Result | Profit | Expected Payoff | Profit Factor | Recovery Factor | Sharpe Ratio | Custom | Equity DD % | Trades | Signal_ThresholdOpen | Signal_ThresholdClose |
---|---|---|---|---|---|---|---|---|---|---|---|
270 | 40085.45 | 11072.30 | 93.04 | 1.12 | 0.90 | 0.11 | 40085.45 | 41.18 | 119 | 30 | 80 |
269 | 40085.45 | 11072.30 | 93.04 | 1.12 | 0.90 | 0.11 | 40085.45 | 41.18 | 119 | 25 | 80 |
268 | 40085.45 | 11072.30 | 93.04 | 1.12 | 0.90 | 0.11 | 40085.45 | 41.18 | 119 | 20 | 80 |
267 | 40085.45 | 11072.30 | 93.04 | 1.12 | 0.90 | 0.11 | 40085.45 | 41.18 | 119 | 15 | 80 |
251 | 40085.45 | 11072.30 | 93.04 | 1.12 | 0.90 | 0.11 | 40085.45 | 41.18 | 119 | 30 | 75 |
Pic. 13. Test 2, EURUSD H4, Optimierungsdurchlauf 270
Die Optimierung durch den benutzerdefinierten Parameter "Custom max" erlaubte es uns, die Ergebnisse mit geringerer Rentabilität, aber mit kleinerem Drawdown des Kapitals (Spalte Eigenkapital DD %) zu wählen. Außerdem hat Test 2 eine kleineren Drawdown des Kapitals. Das sieht man auch visuell, wenn wir die Bilder 12 und 13 vergleichen.
5.1.4. Test 3: Optimierung des benutzerdefinierten Parameters "Custom max", während der Parameter für die Optimierung der gehandelten Volumina 'true' ist:
Die Einstellungen für Test 3 (Einstellungen sind gleich denen von Test 2):
Pic. 14. Eingabefenster des Testers
Die Einstellungen für Test 2 (Hinweis: "Volume normalization" ist auf 'true' gesetzt):
Pic. 15. EA-Fenster zur Optimierung
In der Cloud benötigt der Test 2 Minuten und 27 Sekunden. Der gesamte Test lief in der MQL5 Cloud Europe 1. Die Kosten betrugen $0.08.
Test 3 Ergebnisse, absteigend sortiert nach der Spalte "Result", die fünf besten Ergebnisse:
Pass | Result | Profit | Expected Payoff | Profit Factor | Recovery Factor | Sharpe Ratio | Custom | Equity DD % | Trades | Signal_ThresholdOpen | Signal_ThresholdClose |
---|---|---|---|---|---|---|---|---|---|---|---|
346 | 92.11 | 17818.98 | 181.83 | 1.28 | 1.45 | 0.16 | 92.11253 | 60.48 | 98 | 30 | 100 |
345 | 92.11 | 17818.98 | 181.83 | 1.28 | 1.45 | 0.16 | 92.11253 | 60.48 | 98 | 25 | 100 |
344 | 92.11 | 17818.98 | 181.83 | 1.28 | 1.45 | 0.16 | 92.11253 | 60.48 | 98 | 20 | 100 |
343 | 92.11 | 17818.98 | 181.83 | 1.28 | 1.45 | 0.16 | 92.11253 | 60.48 | 98 | 15 | 100 |
327 | 92.11 | 17818.98 | 181.83 | 1.28 | 1.45 | 0.16 | 92.11253 | 60.48 | 98 | 30 | 95 |
Da der Parameter Handelsvolumen gleich 'true' im Test 3 ist, ist es dieselbe Option wie im Test 1. Dies ist eine guter Wert für den Vergleich mit die Ergebnisse der Optimierung der Saldenkurve mit der linearen Regression.
Fazit: Die Optimierung der Saldenkurve mit der linearen Regression erlaubt es, Ergebnisse auszuwählen, die nicht schlechter oder gar vergleichbar mit der Optimierungsmethode "Balance + max Sharp Ratio" sind.
5.2. "Moving Average balance regression.mq5", EURUSD H4, kein Vorwärts-Test
Die folgenden Parameter werden zur Optimierung ausgewählt:
Pic. 16. EA-Fenster zur Optimierung
Ich werde drei Tests mit dem EA "Moving Average balance regression" durchführen:
- Test 1: Optimierung des Standardparameters "Balance + max Sharp Ratio",
- Test 2: Optimierung des benutzerdefinierten Parameters "Custom max", während der Parameter für die Optimierung der gehandelten Volumina 'false' ist,
- Test 3: Optimierung des benutzerdefinierten Parameters "Custom max", während der Parameter für die Optimierung der gehandelten Volumina 'true' ist.
Die Einstellungen des Tests (Währung, Ticks und Zeitintervall sind die gleichen wie auf dem Bild 5).
5.2.1. Test 1 (Optimierung des Standardparameters "Balance + max Sharp Ratio") wurde in der Cloud durchgeführt. In der Cloud dauerte der Test 1 Minute und 22 Sekunden. Der gesamte Test lief in der MQL5 Cloud Europe 1. Die Kosten betrugen $0.03.
Test 1 Ergebnisse, Ergebnisspalte absteigend sortiert, fünf beste Ergebnisse:
Pass | Result | Profit | Expected Payoff | Profit Factor | Recovery Factor | Sharpe Ratio | Custom | Equity DD % | Trades | DecreaseFactor | MovingPeriod |
---|---|---|---|---|---|---|---|---|---|---|---|
19 | 3500.83 | 1209.31 | 28.79 | 2.89 | 2.74 | 0.31 | 280.3791 | 4.29 | 42 | 9 | 13 |
18 | 3500.83 | 1209.31 | 28.79 | 2.89 | 2.74 | 0.31 | 280.3791 | 4.29 | 42 | 8 | 13 |
17 | 3500.83 | 1209.31 | 28.79 | 2.89 | 2.74 | 0.31 | 280.3791 | 4.29 | 42 | 7 | 13 |
21 | 3438.91 | 1202.00 | 28.62 | 2.76 | 2.52 | 0.31 | 287.1098 | 4.59 | 42 | 11 | 13 |
20 | 3438.91 | 1202.00 | 28.62 | 2.76 | 2.52 | 0.31 | 287.1098 | 4.59 | 42 | 10 | 13 |
Prüfen wir den Durchlauf #19:
Pic. 17. Test 1, EURUSD H4, Optimierungsdurchlauf 270
5.2.2. Test 2 (Optimierung des benutzerdefinierten Parameters "Custom max", während der Parameter für die Optimierung der gehandelten Volumina 'false' ist) wird in der Cloud durchgeführt. In der Cloud dauert der Test 0 Minuten und 00 Sekunden, weil die Ergebnisse aus dem Cache abgeholt wurden, obwohl sie umgekehrt sind. Der gesamte Test wird in der MQL5 Cloud Europe 2 durchgeführt. Der Test kostet $0.00.
Test 2 Ergebnisse, Ergebnisspalte absteigend sortiert, fünf beste Ergebnisse:
Pass | Result | Profit | Expected Payoff | Profit Factor | Recovery Factor | Sharpe Ratio | Custom | Equity DD % | Trades | DecreaseFactor | MovingPeriod |
---|---|---|---|---|---|---|---|---|---|---|---|
141 | 102076.24 | 1029.99 | 25.75 | 2.16 | 2.29 | 0.22 | 102076.2 | 3.93 | 40 | 14 | 22 |
140 | 102076.24 | 1029.99 | 25.75 | 2.16 | 2.29 | 0.22 | 102076.2 | 3.93 | 40 | 13 | 22 |
139 | 102076.24 | 1029.99 | 25.75 | 2.16 | 2.29 | 0.22 | 102076.2 | 3.93 | 40 | 12 | 22 |
142 | 101254.84 | 1037.87 | 25.95 | 2.15 | 2.31 | 0.22 | 101254.8 | 3.93 | 40 | 15 | 22 |
138 | 90936.41 | 960.67 | 24.02 | 2.09 | 2.08 | 0.21 | 90936.41 | 4.31 | 40 | 11 | 22 |
Der Durchlauf 141 ist der oberste der Tabelle (er hat das Maximum in der Spalte "Result"):
Pic. 18. Test 2, EURUSD H4, Optimierungsdurchlauf 141
Im Test 2, die Optimierung der Saldenkurve zeigt bessere Ergebnisse als die Optimierung von "Balance + max Sharp Ratio".
5.2.3. Test 3 (Optimierung des benutzerdefinierten Parameters "Custom max", während der Parameter für die Optimierung des gehandelten Volumens 'true' ist) wird in der Cloud durchgeführt. In der Cloud dauert der Test 1 Minute und 13 Sekunden. Der gesamte Test wird in der MQL5 Cloud Europe 2 durchgeführt. Die Kosten betrugen $0.05.
Test 3 Ergebnisse, absteigend sortiert nach der Spalte "Result", die fünf besten Ergebnisse:</s1>
Pass | Result | Profit | Expected Payoff | Profit Factor | Recovery Factor | Sharpe Ratio | Custom | Equity DD % | Trades | DecreaseFactor | MovingPeriod |
---|---|---|---|---|---|---|---|---|---|---|---|
141 | 13869.05 | 1029.99 | 25.75 | 2.16 | 2.29 | 0.22 | 13869.05 | 3.93 | 40 | 14 | 22 |
140 | 13869.05 | 1029.99 | 25.75 | 2.16 | 2.29 | 0.22 | 13869.05 | 3.93 | 40 | 13 | 22 |
139 | 13869.05 | 1029.99 | 25.75 | 2.16 | 2.29 | 0.22 | 13869.05 | 3.93 | 40 | 12 | 22 |
142 | 13235.93 | 1037.87 | 25.95 | 2.15 | 2.31 | 0.22 | 13235.93 | 3.93 | 40 | 15 | 22 |
138 | 12542.95 | 960.67 | 24.02 | 2.09 | 2.08 | 0.21 | 12542.95 | 4.31 | 40 | 11 | 22 |
Test 3 hat die gleichen besten Optionen wie Test 2 ausgewählt. Der Parameter für die Optimierung des gehandelten Volumens, der gleich 'true' ist, hat keine Korrekturen vorgenommen.
Fazit: Die Optimierung durch den Parameter "Custom max" in beiden Tests (Test 2 und 3) schaffte es, bessere Ergebnisse als in Test 1 zu erzielen. Der Parameter für die Optimierung des gehandelten Volumens, der gleich 'true' ist, hat in Test 3 keine Korrekturen vorgenommen.
5.3. MACD Sample balance regression.mq5, EURUSD, H4, kein Vorwärts-Test
Die folgenden Parameter werden zur Optimierung ausgewählt:
Pic. 19. EA-Fenster zur Optimierung
Ich werde die gleichen drei Tests mit dem EA "MACD Sample balance regression" durchführen:
- Test 1: Optimierung der Standardparameter "Balance + max Sharp Ratio"
- Test 2: Optimierung des benutzerdefinierten Parameters "Custom max", während der Parameter für die Optimierung der gehandelten Volumina 'false' ist,
- Test 3: Optimierung des benutzerdefinierten Parameters "Custom max", während der Parameter für die Optimierung der gehandelten Volumina 'true' ist.
Die Einstellungen des Tests (Währung, Ticks und Zeitintervall sind die gleichen wie auf dem Bild 5).
5.3.1. Test 1 (Optimierung des Standardparameters "Balance + max Sharp Ratio") wurde in der Cloud durchgeführt. In der Cloud dauert der Test 3 Minuten und 55 Sekunden (die Zeit ist vergleichsweise groß, da die Aufgabe nicht auf einigen langsamen Agenten ausgeführt wurde, daher wurden 10 Aufgaben auf andere Agenten verteilt). Der gesamte Test lief in der MQL5 Cloud Europe 1. Die Kosten betrugen $0.04.
Test 1 Ergebnis:
Pass | Result | Profit | Expected Payoff | Profit Factor | Recovery Factor | Sharpe Ratio | Custom | Equity DD % | Trades | InpTakeProfit | InpTrailingStop |
---|---|---|---|---|---|---|---|---|---|---|---|
163 | 767049.82 | 363.32 | 24.22 | 3.87 | 74.02 | 24573559 | 0.91 | 15 | 25 | 50 | |
136 | 767049.82 | 363.32 | 24.22 | 3.87 | 74.02 | 24573559 | 0.91 | 15 | 25 | 45 | |
109 | 767049.82 | 363.32 | 24.22 | 3.87 | 74.02 | 24573559 | 0.91 | 15 | 25 | 40 | |
82 | 767049.82 | 363.32 | 24.22 | 3.87 | 74.02 | 24573559 | 0.91 | 15 | 25 | 35 | |
55 | 767049.82 | 363.32 | 24.22 | 3.87 | 74.02 | 24573559 | 0.91 | 15 | 25 | 30 |
Es gibt nur sehr wenige Positionen (von 13 bis 16) zu diesem Zeitpunkt. Ich hoffe, dass es mehr Positionen mit einem niedrigeren Zeitrahmen (M15) geben wird. Diese Tests sind in einem weiteren Abschnitt unten aufgeführt. Im Moment ist das beste Ergebnis #163:
Pic. 20. Test 1, EURUSD H4, Optimierungsdurchlauf 163
5.3.2. Test 2 (Optimierung des benutzerdefinierten Parameters "Custom max", während der Parameter für die Optimierung der gehandelten Volumina 'false' ist) wird in der Cloud durchgeführt. In der Cloud dauert der Test 0 Minuten und 00 Sekunden, weil die Ergebnisse aus dem Cache abgeholt wurden, obwohl sie umgekehrt sind. Der gesamte Test wird in der MQL5 Cloud Europe 2 durchgeführt. Der Test kostet $0.00.
Test 2 Ergebnisse:
Pass | Result | Profit | Expected Payoff | Profit Factor | Recovery Factor | Sharpe Ratio | Custom | Equity DD % | Trades | InpTakeProfit | InpTrailingStop |
---|---|---|---|---|---|---|---|---|---|---|---|
163 | 24573558.59 | 363.32 | 24.22 | 3.87 | 74.02 | 24573559 | 0.91 | 15 | 25 | 50 | |
136 | 24573558.59 | 363.32 | 24.22 | 3.87 | 74.02 | 24573559 | 0.91 | 15 | 25 | 45 | |
109 | 24573558.59 | 363.32 | 24.22 | 3.87 | 74.02 | 24573559 | 0.91 | 15 | 25 | 40 | |
82 | 24573558.59 | 363.32 | 24.22 | 3.87 | 74.02 | 24573559 | 0.91 | 15 | 25 | 35 | |
55 | 24573558.59 | 363.32 | 24.22 | 3.87 | 74.02 | 24573559 | 0.91 | 15 | 25 | 30 |
Test 2 erzielte die gleichen besten Ergebnisse (vergleiche alle Spalten außer Result) wie Test 1.
5.3.3. Test 3 (Optimierung des benutzerdefinierten Parameters "Custom max", während der Parameter für die Optimierung des gehandelten Volumens 'true' ist) wird in der Cloud durchgeführt. In der Cloud dauerte der Test 1 Minute und 5 Sekunden. Der gesamte Test wird in der MQL5 Cloud Europe 2 durchgeführt. Die Kosten betrugen $0.05.
Test 3 Ergebnisse:
Pass | Result | Profit | Expected Payoff | Profit Factor | Recovery Factor | Sharpe Ratio | Custom | Equity DD % | Trades | InpTakeProfit | InpTrailingStop |
---|---|---|---|---|---|---|---|---|---|---|---|
163 | 16382372.39 | 363.32 | 24.22 | 3.87 | 74.02 | 16382372 | 0.91 | 15 | 25 | 50 | |
136 | 16382372.39 | 363.32 | 24.22 | 3.87 | 74.02 | 16382372 | 0.91 | 15 | 25 | 45 | |
109 | 16382372.39 | 363.32 | 24.22 | 3.87 | 74.02 | 16382372 | 0.91 | 15 | 25 | 40 | |
82 | 16382372.39 | 363.32 | 24.22 | 3.87 | 74.02 | 16382372 | 0.91 | 15 | 25 | 35 | |
55 | 16382372.39 | 363.32 | 24.22 | 3.87 | 74.02 | 16382372 | 0.91 | 15 | 25 | 30 |
Die Optimierung der Saldenkurve mit der linearen Regression funktioniert wie bei der Methode "Balance + max Sharp Ratio".
6. Optimierung mit EURUSD M15 mit Vorwärts-Test
Wir haben die gleichen drei EAs: "EA Test Balance Regression.mq5", "Moving Average Balance Regression.mq5" und "MACD Sample Balance Regression.mq5". Im Gegensatz zu den vorherigen Tests testen wir nun auf M15 mit aktiviertem Vorwärts-Test.
6.1. "EA Test Balance Regression.mq5", vorwärts Test. Ich werde drei Tests durchführen:
- Test 1: Optimierung der Standardparameter "Balance + max Sharp Ratio"
- Test 2: Optimierung des benutzerdefinierten Parameters "Custom max", während der Parameter für die Optimierung der gehandelten Volumina 'false' ist,
- Test 3: Optimierung des benutzerdefinierten Parameters "Custom max", während der Parameter für die Optimierung der gehandelten Volumina 'true' ist.
6.1.1. Test 1: Optimierung der Standardparameter "Balance + max Sharp Ratio". Eingabefenster des Testers:
Abb. 21. Eingabefenster des Testers
Die Parameter des EAs im Testers sind identisch mit denen der Abb. 7.
In der Cloud benötigt der Test 2 Minuten und 14 Sekunden. Der gesamte Test wird in der MQL5 Cloud Europe 2 durchgeführt. Die Kosten betrugen $0.08.
Ergebnisse der Optimierung:
Pass | Result | Profit | Expected Payoff | Profit Factor | Recovery Factor | Sharpe Ratio | Custom | Equity DD % | Trades | Signal_ThresholdOpen | Signal_ThresholdClose |
---|---|---|---|---|---|---|---|---|---|---|---|
352 | 23196.38 | 85836.92 | 721.32 | 1.47 | 2.03 | 0.24 | 2722.602 | 48.82 | 119 | 4 | 100 |
351 | 23196.38 | 85836.92 | 721.32 | 1.47 | 2.03 | 0.24 | 2722.602 | 48.82 | 119 | 55 | 100 |
333 | 23196.38 | 85836.92 | 721.32 | 1.47 | 2.03 | 0.24 | 2722.602 | 48.82 | 119 | 4 | 95 |
332 | 23196.38 | 85836.92 | 721.32 | 1.47 | 2.03 | 0.24 | 2722.602 | 48.82 | 119 | 55 | 95 |
314 | 23196.38 | 85836.92 | 721.32 | 1.47 | 2.03 | 0.24 | 2722.602 | 48.82 | 119 | 4 | 90 |
Pic. 22. Test 1, EURUSD M15, Optimierungsdurchlauf 352
Vorwärts-Ergebnisse:
Pass | Forward Result | Back Result | Profit | Expected Payoff | Profit Factor | Recovery Factor | Sharpe Ratio | Custom | Equity DD % | Trades | Signal_ThresholdOpen | Signal_ThresholdClose |
---|---|---|---|---|---|---|---|---|---|---|---|---|
284 | 216.48 | 11708.46 | 18.91 | 1.89 | 1.02 | 0.02 | 0.02 | 7172.395 | 9.33 | 10 | 100 | 80 |
283 | 216.48 | 11708.46 | 18.91 | 1.89 | 1.02 | 0.02 | 0.02 | 7172.395 | 9.33 | 10 | 95 | 80 |
282 | 216.48 | 11708.46 | 18.91 | 1.89 | 1.02 | 0.02 | 0.02 | 7172.395 | 9.33 | 10 | 90 | 80 |
281 | 216.48 | 11708.46 | 18.91 | 1.89 | 1.02 | 0.02 | 0.02 | 7172.395 | 9.33 | 10 | 85 | 80 |
265 | 216.48 | 11708.46 | 18.91 | 1.89 | 1.02 | 0.02 | 0.02 | 7172.395 | 9.33 | 10 | 100 | 75 |
Jetzt ist die beste Einstellung so, dass es nur 10 Positionen im Vorwärts-Test gibt. Das ist natürlich nicht genug, aber wir müssen noch einen Test durchzuführen:
Pic. 23. Test 1, EURUSD M15, Vorwärtsdurchlauf 284
6.1.2. Test 2: Optimierung des benutzerdefinierten Parameters "Custom max", während der Parameter für die Optimierung der gehandelten Volumina 'false' ist,
Beste Ergebnisse der Optimierung (kein Vorwärts-Test):
Pass | Result | Profit | Expected Payoff | Profit Factor | Recovery Factor | Sharpe Ratio | Custom | Equity DD % | Trades | Signal_ThresholdOpen | Signal_ThresholdClose |
---|---|---|---|---|---|---|---|---|---|---|---|
284 | 180332.68 | 10820.37 | 309.15 | 4.67 | 6.80 | 0.56 | 180332.7 | 7.98 | 35 | 100 | 80 |
283 | 180332.68 | 10820.37 | 309.15 | 4.67 | 6.80 | 0.56 | 180332.7 | 7.98 | 35 | 95 | 80 |
282 | 180332.68 | 10820.37 | 309.15 | 4.67 | 6.80 | 0.56 | 180332.7 | 7.98 | 35 | 90 | 80 |
281 | 180332.68 | 10820.37 | 309.15 | 4.67 | 6.80 | 0.56 | 180332.7 | 7.98 | 35 | 85 | 80 |
265 | 180332.68 | 10820.37 | 309.15 | 4.67 | 6.80 | 0.56 | 180332.7 | 7.98 | 35 | 100 | 75 |
Pic. 24. Test 2, EURUSD M15, Optimierungsdurchlauf 352
Vorwärts-Ergebnisse:
Pass | Forward Result | Back Result | Profit | Expected Payoff | Profit Factor | Recovery Factor | Sharpe Ratio | Custom | Equity DD % | Trades | Signal_ThresholdOpen | Signal_ThresholdClose |
---|---|---|---|---|---|---|---|---|---|---|---|---|
284 | -14294.76 | 180332.68 | 18.91 | 1.89 | 1.02 | 0.02 | 0.02 | -14294.8 | 9.33 | 10 | 100 | 80 |
283 | -14294.76 | 180332.68 | 18.91 | 1.89 | 1.02 | 0.02 | 0.02 | -14294.8 | 9.33 | 10 | 95 | 80 |
282 | -14294.76 | 180332.68 | 18.91 | 1.89 | 1.02 | 0.02 | 0.02 | -14294.8 | 9.33 | 10 | 90 | 80 |
281 | -14294.76 | 180332.68 | 18.91 | 1.89 | 1.02 | 0.02 | 0.02 | -14294.8 | 9.33 | 10 | 85 | 80 |
265 | -14294.76 | 180332.68 | 18.91 | 1.89 | 1.02 | 0.02 | 0.02 | -14294.8 | 9.33 | 10 | 100 | 75 |
In Test 2 zeigt die Vorwärtsprüfung die gleichen Ergebnisse wie in Test 1.
Durch die Optimierung der Saldenkurve mit der Methode der linearen Regression in Test 2 konnten wir Ergebnisse ermitteln, die nicht schlechter sind als in Test 1 (Methode "Balance + max Sharp Ratio").
6.1.3. Test 3: Optimierung des benutzerdefinierten Parameters "Custom max", während der Parameter für die Optimierung der gehandelten Volumina 'true' ist. In der Cloud dauert der Test 3 Minuten und 29 Sekunden. Der gesamte Test lief in der MQL5 Cloud Europe 1. Die Kosten betrugen $0.07.
Beste Ergebnisse der Optimierung (kein Vorwärts-Test):
Pass | Result | Profit | Expected Payoff | Profit Factor | Recovery Factor | Sharpe Ratio | Custom | Equity DD % | Trades | Signal_ThresholdOpen | Signal_ThresholdClose |
---|---|---|---|---|---|---|---|---|---|---|---|
208 | 1660.90 | 10008.05 | 285.94 | 4.50 | 6.55 | 0.56 | 1660.901 | 7.98 | 35 | 100 | 4 |
207 | 1660.90 | 10008.05 | 285.94 | 4.50 | 6.55 | 0.56 | 1660.901 | 7.98 | 35 | 95 | 4 |
206 | 1660.90 | 10008.05 | 285.94 | 4.50 | 6.55 | 0.56 | 1660.901 | 7.98 | 35 | 90 | 4 |
205 | 1660.90 | 10008.05 | 285.94 | 4.50 | 6.55 | 0.56 | 1660.901 | 7.98 | 35 | 85 | 4 |
189 | 1660.90 | 10008.05 | 285.94 | 4.50 | 6.55 | 0.56 | 1660.901 | 7.98 | 35 | 100 | 55 |
Pic. 25. Test 3, EURUSD M15, Optimierungsdurchlauf 208
Die Ermöglichung der "Normalisierung der gehandelten Volumina" hatte keinen wesentlichen Einfluss auf das Ergebnis. Auch wurde eines der besten Ergebnisse wurde innerhalb des optimierten Intervalls gefunden.
Die besten Ergebnisse des Vorwärts-Test:
Pass | Forward Result | Back Result | Profit | Expected Payoff | Profit Factor | Recovery Factor | Sharpe Ratio | Custom | Equity DD % | Trades | Signal_ThresholdOpen | Signal_ThresholdClose |
---|---|---|---|---|---|---|---|---|---|---|---|---|
266 | -103.43 | -25.56 | -7464.56 | -24.64 | 0.66 | -0.99 | -0.11 | -103.428 | 75.43 | 303 | 10 | 80 |
247 | -103.43 | -25.56 | -7464.56 | -24.64 | 0.66 | -0.99 | -0.11 | -103.428 | 75.43 | 303 | 10 | 75 |
228 | -103.43 | -25.56 | -7464.56 | -24.64 | 0.66 | -0.99 | -0.11 | -103.428 | 75.43 | 303 | 10 | 70 |
209 | -103.43 | -25.56 | -7464.56 | -24.64 | 0.66 | -0.99 | -0.11 | -103.428 | 75.43 | 303 | 10 | 65 |
156 | -120.35 | -29.28 | -8013.01 | -22.76 | 0.63 | -1.00 | -0.13 | -120.35 | 80.44 | 352 | 30 | 50 |
Der Vorwärts-Test in Test 3 (der Parameter für die Optimierung des gehandelten Volumens ist 'true') zeigt NUR NEGATIVE Ergebnisse an (siehe Spalte "Forward Result"). Dies ist ein gutes Ergebnis für die Optimierung des Saldenkurve mit der linearen Regression, da die genauesten und realistischsten Ergebnisse für den Vorwärts-Test ausgewählt wurden.
Durch die Optimierung der Saldenkurve mittels der linearen Regression (der Parameter für die Optimierung der gehandelten Volumina ist 'false') können Ergebnisse erzielt werden, die mit der Methode "Balance max + Sharp Ratio" vergleichbar sind). Wenn der Parameter für die Optimierung des gehandelten Volumens 'true' ist, zeigen die Ergebnisse des Vorwärts-Tests das tatsächliche Testbild in diesem Zeitraum an.
6.2. "MACD Sample balance regression.mq5", Vorwärts-Test
6.2.1. Test 1: Optimierung des standardmäßigen Parameters "Balance + max Sharp Ratio" in der Cloud. In der Cloud dauerte der Test 1 Minute und 3 Sekunden. Der gesamte Test lief in der MQL5 Cloud Europe 1. Die Kosten betrugen $0.06.
Ergebnisse der Optimierung:
Pass | Result | Profit | Expected Payoff | Profit Factor | Recovery Factor | Sharpe Ratio | Custom | Equity DD % | Trades | InpTakeProfit | InpTrailingStop |
---|---|---|---|---|---|---|---|---|---|---|---|
171 | 2094.29 | 479.93 | 8.57 | 1.81 | 2.03 | 0.20 | -1.69249 | 2.30 | 56 | 65 | 50 |
144 | 2094.29 | 479.93 | 8.57 | 1.81 | 2.03 | 0.20 | -1.69249 | 2.30 | 56 | 65 | 45 |
182 | 2078.33 | 489.23 | 8.74 | 1.82 | 2.07 | 0.20 | -9.9625 | 2.29 | 56 | 120 | 50 |
155 | 2077.49 | 489.03 | 8.73 | 1.82 | 2.07 | 0.20 | -9.90369 | 2.29 | 56 | 120 | 45 |
181 | 2066.17 | 484.13 | 8.65 | 1.81 | 2.05 | 0.20 | -8.1109 | 2.29 | 56 | 115 | 50 |
Abb. 26. Test 1, EURUSD M15, Optimierungsdurchlauf 171
Vorwärts-Ergebnisse:
Pass | Forward Result | Back Result | Profit | Expected Payoff | Profit Factor | Recovery Factor | Sharpe Ratio | Custom | Equity DD % | Trades | InpTakeProfit | InpTrailingStop |
---|---|---|---|---|---|---|---|---|---|---|---|---|
78 | 1182.13 | 1659.86 | 83.87 | 5.24 | 1.43 | 0.42 | 0.12 | -44.8452 | 1.95 | 16 | 140 | 30 |
77 | 1134.97 | 1659.86 | 78.87 | 4.93 | 1.41 | 0.40 | 0.11 | -53.5369 | 1.95 | 16 | 135 | 30 |
105 | 1107.99 | 1639.60 | 78.17 | 4.89 | 1.40 | 0.39 | 0.11 | -26.6428 | 1.96 | 16 | 140 | 35 |
76 | 1085.51 | 1659.86 | 73.87 | 4.62 | 1.38 | 0.37 | 0.11 | -62.5775 | 1.95 | 16 | 130 | 30 |
171 | 1060.24 | 2094.29 | 62.97 | 3.94 | 1.32 | 0.36 | 0.11 | -347.982 | 1.70 | 16 | 65 | 50 |
Abb. 27. Test 1, EURUSD M15, Vorwärtsdurchlauf 78
6.2.2. Test 2: Optimierung des benutzerdefinierten Parameters "Custom max", während der Parameter für die Optimierung der gehandelten Volumina 'false' ist,
Ergebnisse der Optimierung:
Pass | Result | Profit | Expected Payoff | Profit Factor | Recovery Factor | Sharpe Ratio | Custom | Equity DD % | Trades | InpTakeProfit | InpTrailingStop |
---|---|---|---|---|---|---|---|---|---|---|---|
168 | 84498.76 | 442.03 | 7.89 | 1.74 | 2.08 | 0.19 | 84498.76 | 2.07 | 56 | 50 | 50 |
141 | 84498.76 | 442.03 | 7.89 | 1.74 | 2.08 | 0.19 | 84498.76 | 2.07 | 56 | 50 | 45 |
114 | 84498.76 | 442.03 | 7.89 | 1.74 | 2.08 | 0.19 | 84498.76 | 2.07 | 56 | 50 | 40 |
167 | 83473.95 | 442.03 | 7.89 | 1.74 | 2.08 | 0.19 | 83473.95 | 2.06 | 56 | 45 | 50 |
140 | 83473.95 | 442.03 | 7.89 | 1.74 | 2.08 | 0.19 | 83473.95 | 2.06 | 56 | 45 | 45 |
Abb. 28. Test 2, EURUSD M15, Optimierungsdurchlauf 168
Vorwärts-Ergebnisse:
Pass | Forward Result | Back Result | Profit | Expected Payoff | Profit Factor | Recovery Factor | Sharpe Ratio | Custom | Equity DD % | Trades | InpTakeProfit | InpTrailingStop |
---|---|---|---|---|---|---|---|---|---|---|---|---|
78 | 1182.13 | 1659.86 | 83.87 | 5.24 | 1.43 | 0.42 | 0.12 | 6462.158 | 1.95 | 16 | 140 | 30 |
77 | 1134.97 | 1659.86 | 78.87 | 4.93 | 1.41 | 0.40 | 0.11 | 5018.77 | 1.95 | 16 | 135 | 30 |
105 | 1107.99 | 1639.60 | 78.17 | 4.89 | 1.40 | 0.39 | 0.11 | 5617.275 | 1.96 | 16 | 140 | 35 |
76 | 1085.51 | 1659.86 | 73.87 | 4.62 | 1.38 | 0.37 | 0.11 | 3525.665 | 1.95 | 16 | 130 | 30 |
171 | 1060.24 | 2094.29 | 62.97 | 3.94 | 1.32 | 0.36 | 0.11 | -5131.93 | 1.70 | 16 | 65 | 50 |
Abb. 29. Test 2, EURUSD M15, Vorwärtsdurchlauf 78
Die Optimierung der Saldenkurve mit der Regressionsmethode in Test 2 ergab vergleichbare Ergebnisse wie die Methode "Balance + max Sharp Ratio".
6.2.3. Test 3: Optimierung des benutzerdefinierten Parameters "Custom max", während der Parameter für die Optimierung der gehandelten Volumina, der auf 'true' gesetzt ist, in der Cloud ausgeführt wird. In der Cloud dauert der Test 1 Minute und 44 Sekunden. Der gesamte Test lief in der MQL5 Cloud Europe 1. Die Kosten betrugen $0.08.
Ergebnisse der Optimierung:
Pass | Result | Profit | Expected Payoff | Profit Factor | Recovery Factor | Sharpe Ratio | Custom | Equity DD % | Trades | InpTakeProfit | InpTrailingStop |
---|---|---|---|---|---|---|---|---|---|---|---|
168 | 15089.06 | 442.03 | 7.89 | 1.74 | 2.08 | 0.19 | 15089.06 | 2.07 | 56 | 50 | 50 |
141 | 15089.06 | 442.03 | 7.89 | 1.74 | 2.08 | 0.19 | 15089.06 | 2.07 | 56 | 50 | 45 |
114 | 15089.06 | 442.03 | 7.89 | 1.74 | 2.08 | 0.19 | 15089.06 | 2.07 | 56 | 50 | 40 |
167 | 14906.06 | 442.03 | 7.89 | 1.74 | 2.08 | 0.19 | 14906.06 | 2.06 | 56 | 45 | 50 |
140 | 14906.06 | 442.03 | 7.89 | 1.74 | 2.08 | 0.19 | 14906.06 | 2.06 | 56 | 45 | 45 |
Vorwärts-Ergebnisse:
Pass | Forward Result | Back Result | Profit | Expected Payoff | Profit Factor | Recovery Factor | Sharpe Ratio | Custom | Equity DD % | Trades | InpTakeProfit | InpTrailingStop |
---|---|---|---|---|---|---|---|---|---|---|---|---|
78 | 4038.85 | 13138.16 | 83.87 | 5.24 | 1.43 | 0.42 | 0.12 | 4038.849 | 1.95 | 16 | 140 | 30 |
105 | 3510.80 | 13026.26 | 78.17 | 4.89 | 1.40 | 0.39 | 0.11 | 3510,797 | 1.96 | 16 | 140 | 35 |
77 | 3136.73 | 13138.16 | 78.87 | 4.93 | 1.41 | 0.40 | 0.11 | 3136.731 | 1.95 | 16 | 135 | 30 |
132 | 3074.09 | 13598.05 | 73.17 | 4.57 | 1.38 | 0.37 | 0.10 | 3074.089 | 1.96 | 16 | 140 | 40 |
159 | 2658.84 | 13777.31 | 68.47 | 4.28 | 1.35 | 0.35 | 0.10 | 2658.844 | 1.96 | 16 | 140 | 45 |
Die Optimierung der Saldenkurve mit der linearen Regression hat sich als vergleichbar mit der Standard-Methode "Balance max + Sharp Ratio" erwiesen.
6.3. Der EA "Moving Average balance regression.mq5", Vorwärts-Test
6.3.1. Test 1: Optimierung der Standardparameter "Balance + max Sharp Ratio". Die Parameter des Testers sind ähnlich mit denen der Abb. 15. und die für den EA ähnlich denen der Abb. 23.
In der Cloud dauert der Test 1 Minute und 28 Sekunden. Der gesamte Test lief in der MQL5 Cloud Europe 1. Die Kosten betrugen $0.05.
Ergebnisse der Optimierung:
Pass | Result | Profit | Expected Payoff | Profit Factor | Recovery Factor | Sharpe Ratio | Custom | Equity DD % | Trades | DecreaseFactor | MovingPeriod |
---|---|---|---|---|---|---|---|---|---|---|---|
53 | -1.29 | -16.76 | -0.03 | 0.99 | -0.03 | 0.00 | 11966.34 | 5.92 | 525 | 4 | 16 |
52 | -1.29 | -16.76 | -0.03 | 0.99 | -0.03 | 0.00 | 11966.34 | 5.92 | 525 | 3 | 16 |
165 | -6.17 | -24.02 | -0.05 | 0.99 | -0.03 | 0.00 | -37045.4 | 6.66 | 465 | 12 | 24 |
166 | -26.36 | -49.14 | -0.11 | 0.99 | -0.07 | 0.00 | -38052.8 | 6.86 | 465 | 13 | 24 |
163 | -39.47 | -61.88 | -0.13 | 0.98 | -0.09 | 0.00 | -39156.1 | 6.62 | 465 | 10 | 24 |
Abb. 30. Test 1, EURUSD M15, Optimierungsdurchlauf 53
Vorwärts-Ergebnisse:
Pass | Forward Result | Back Result | Profit | Expected Payoff | Profit Factor | Recovery Factor | Sharpe Ratio | Custom | Equity DD % | Trades | DecreaseFactor | MovingPeriod |
---|---|---|---|---|---|---|---|---|---|---|---|---|
48 | 409.74 | -460.18 | 185.78 | 1.06 | 1.16 | 0.80 | 0.04 | 42602.76 | 2.26 | 175 | 12 | 15 |
49 | 364.79 | -461.14 | 165.23 | 0.94 | 1.14 | 0.67 | 0.04 | 38508.36 | 2.41 | 175 | 13 | 15 |
50 | 362.45 | -460.40 | 164.15 | 0.94 | 1.14 | 0.66 | 0.04 | 38292.53 | 2.42 | 175 | 14 | 15 |
51 | 353.14 | -467.05 | 159.83 | 0.91 | 1.13 | 0.65 | 0.03 | 37460.15 | 2.42 | 175 | 15 | 15 |
47 | 350.60 | -629.53 | 144.32 | 0.82 | 1.13 | 0.65 | 0.03 | 32767.39 | 2.17 | 175 | 11 | 15 |
Abb. 31. Test 1, EURUSD M15, Vorwärtsdurchlauf 48
6.3.2. Test 2: Optimierung des benutzerdefinierten Parameters "Custom max", während der Parameter für die Optimierung der gehandelten Volumina 'false' ist.
Ergebnisse der Optimierung:
Pass | Result | Profit | Expected Payoff | Profit Factor | Recovery Factor | Sharpe Ratio | Custom | Equity DD % | Trades | DecreaseFactor | MovingPeriod |
---|---|---|---|---|---|---|---|---|---|---|---|
53 | 11966.34 | -16.76 | -0.03 | 0.99 | -0.03 | 0.00 | 11966.34 | 5.92 | 525 | 4 | 16 |
52 | 11966.34 | -16.76 | -0.03 | 0.99 | -0.03 | 0.00 | 11966.34 | 5.92 | 525 | 3 | 16 |
54 | 2465.75 | -103.27 | -0.20 | 0.96 | -0.14 | -0.01 | 2465.748 | 7.19 | 525 | 5 | 16 |
57 | 813.83 | -91.78 | -0.17 | 0.97 | -0.13 | -0.01 | 813.831 | 6.75 | 525 | 8 | 16 |
56 | 813.83 | -91.78 | -0.17 | 0.97 | -0.13 | -0.01 | 813.831 | 6.75 | 525 | 7 | 16 |
Vorwärts-Ergebnisse:
Pass | Forward Result | Back Result | Profit | Expected Payoff | Profit Factor | Recovery Factor | Sharpe Ratio | Custom | Equity DD % | Trades | DecreaseFactor | MovingPeriod |
---|---|---|---|---|---|---|---|---|---|---|---|---|
48 | 42602.76 | -73708.28 | 185.78 | 1.06 | 1.16 | 0.80 | 0.04 | 42602.76 | 2.26 | 175 | 12 | 15 |
49 | 38508.36 | -74600.92 | 165.23 | 0.94 | 1.14 | 0.67 | 0.04 | 38508.36 | 2.41 | 175 | 13 | 15 |
50 | 38292.53 | -74386.41 | 164.15 | 0.94 | 1.14 | 0.66 | 0.04 | 38292.53 | 2.42 | 175 | 14 | 15 |
51 | 37460.15 | -75315.40 | 159.83 | 0.91 | 1.13 | 0.65 | 0.03 | 37460.15 | 2.42 | 175 | 15 | 15 |
47 | 32767.39 | -107616.36 | 144.32 | 0.82 | 1.13 | 0.65 | 0.03 | 32767.39 | 2.17 | 175 | 11 | 15 |
6.3.3. Test 3: Optimierung des benutzerdefinierten Parameters "Custom max", während der Parameter für die Optimierung der gehandelten Volumina, der auf 'true' gesetzt ist, in der Cloud ausgeführt wird. In der Cloud benötigt der Test 0 Minuten und 42 Sekunden. Der gesamte Test lief in der MQL5 Cloud Europe 1. Die Kosten betrugen $0.04.
Ergebnisse der Optimierung:
Pass | Result | Profit | Expected Payoff | Profit Factor | Recovery Factor | Sharpe Ratio | Custom | Equity DD % | Trades | DecreaseFactor | MovingPeriod |
---|---|---|---|---|---|---|---|---|---|---|---|
53 | 243.32 | -16.76 | -0.03 | 0.99 | -0.03 | 0.00 | 243.3172 | 5.92 | 525 | 4 | 16 |
52 | 243.32 | -16.76 | -0.03 | 0.99 | -0.03 | 0.00 | 243.3172 | 5.92 | 525 | 3 | 16 |
54 | 45.69 | -103.27 | -0.20 | 0.96 | -0.14 | -0.01 | 45.68738 | 7.19 | 525 | 5 | 16 |
57 | 13.40 | -91.78 | -0.17 | 0.97 | -0.13 | -0.01 | 13.40301 | 6.75 | 525 | 8 | 16 |
56 | 13.40 | -91.78 | -0.17 | 0.97 | -0.13 | -0.01 | 13.40301 | 6.75 | 525 | 7 | 16 |
Vorwärts-Ergebnisse:
Pass | Forward Result | Back Result | Profit | Expected Payoff | Profit Factor | Recovery Factor | Sharpe Ratio | Custom | Equity DD % | Trades | DecreaseFactor | MovingPeriod |
---|---|---|---|---|---|---|---|---|---|---|---|---|
48 | 1772.90 | -997.81 | 185.78 | 1.06 | 1.16 | 0.80 | 0.04 | 1772.899 | 2.26 | 175 | 12 | 15 |
49 | 1591.91 | -994.94 | 165.23 | 0.94 | 1.14 | 0.67 | 0.04 | 1591.912 | 2.41 | 175 | 13 | 15 |
50 | 1577.12 | -987.34 | 164.15 | 0.94 | 1.14 | 0.66 | 0.04 | 1577.123 | 2.42 | 175 | 14 | 15 |
51 | 1537.14 | -972.44 | 159.83 | 0.91 | 1.13 | 0.65 | 0.03 | 1537.142 | 2.42 | 175 | 15 | 15 |
47 | 1473.35 | -1540.90 | 144.32 | 0.82 | 1.13 | 0.65 | 0.03 | 1473.354 | 2.17 | 175 | 11 | 15 |
Die Optimierung der Saldenkurve mit der linearen Regression in Test 3 wiederholt die Ergebnisse von Test 1 vollständig. Mit anderen Worten, die Optimierung der gehandelten Volumina hat keinen Einfluss auf das Ergebnis, obwohl der EA "Moving Average balance regression.mq5" die Lotgröße der Positionen dynamisch berechnet.
Die Optimierung der Saldenkurve mit der linearen Regression hat sich als vergleichbar mit der Standard-Methode "Balance max + Sharp Ratio" erwiesen.
7. Schlussfolgerung
Die Ergebnisse der Optimierung der Saldenkurve mit der linearen Regression hat sich als gleichwertig zur Optimierung nach "Balance + max Sharp Ratio" herausgestellt. Die EAs mit dynamischem Lot haben interessante Ergebnisse gezeigt: In einigen Fällen ergibt die Einstellung "traded volumes normalization" in Verbindung mit einem Vorwärts-Test ein realistischeres Bild.
Ich glaube, die beschriebene Methode hat das Recht zu existieren, und sie kann weiter verbessert werden, zum Beispiel durch die Betrachtung der Dauer von profitablen und verlustbringenden Handelsgeschäften und das Experimentieren mit den erhaltenen Werten.
Übersetzt aus dem Russischen von MetaQuotes Ltd.
Originalartikel: https://www.mql5.com/ru/articles/3642
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.