English Русский 中文 Español 日本語 Português
preview
Handelsstrategie auf der Grundlage des verbesserten Indikators zur Erkennung des Kerzenmusters von Doji

Handelsstrategie auf der Grundlage des verbesserten Indikators zur Erkennung des Kerzenmusters von Doji

MetaTrader 5Tester | 16 August 2023, 10:51
299 1
ds2
ds2

Einführung

Der Artikel „Verbesserte Erkennung von Kerzenmustern am Beispiel des Doji“ befasste sich mit dem Konzept der Metabars. Kurz gesagt, eine Metabar ist eine bedingte Kombination mehrerer aufeinanderfolgender Balken zu einem großen Balken. Dies ist ähnlich wie der Balken eines höheren Zeitrahmens, aber nicht genau, da die Größe der Metabars nicht festgelegt ist (er „schwimmt“ in einem bestimmten Bereich) und es keine Bindung an eine bestimmte Start- und Endzeit des Balkens gibt. Daher ermöglicht die Verwendung von Metabars den Händlern, verschiedene Muster der Kerzenanalyse viel häufiger zu erkennen.

Im vorigen Artikel habe ich die Erstellung des Doji-Kerzen-Indikators auf Metabars beschrieben und seine Funktionsweise demonstriert.

Wir werden nun versuchen, eine Handelsstrategie mit einem solchen Indikator zu entwickeln. Theoretisch kann die Strategie, da die Metabars es ermöglichen, Kerzen-Muster häufiger zu erkennen, mehr Handelsgeschäfte abschließen als bei herkömmlichen Bars. Dies ist eine großartige Gelegenheit, mehr Gewinn zu machen.


Konzept der Handelsstrategie: Sind Kerzen genug?

Wir nehmen den Doji-Indikator mit Metabars aus dem obigen Artikel. Leider ist es nicht möglich, Handelsgeschäfte einfach auf Basis der Werte dieses Indikators zu öffnen und zu schließen. Der Grund dafür ist weder der Indikator noch die Metabars. Das Doji-Kerzen-Muster ist im Allgemeinen nicht als unabhängiges Handelssignal gedacht,

Schließlich ist das Doji-Muster ein Signal für eine mögliche Trendumkehr. Das bedeutet, dass vor der Doji-Kerze auch ein Trend in die entsprechende Richtung bestehen sollte. Wenn es keinen Trend gibt, hat es keinen Sinn, auf der Grundlage der Doji-Kerze ein Handelsgeschäft zu tätigen.


Trend und Metabars zusammenbringen

Die Lösung dieser Aufgabe ist nicht so schwierig, wie es auf den ersten Blick erscheinen mag. Eigentlich ist es ganz einfach. Die Doji-Kerze ist eine Metabar, aber der Trend muss sich nicht auf Metabars beziehen, er kann auch auf regulären Bars gebildet werden. Für Kerzen sind die Verhältnisse der maximalen und minimalen Preisabweichungen innerhalb eines Balkens wichtig, und (wie wir im vorigen Artikel herausgefunden haben) hängen sie stark von der Breite des Metabars (d.h. der Anzahl der darin enthaltenen normalen Balken) und seinen Zeitverschiebungen ab. Die Trendlinie zeigt jedoch keine extremen Verhältnisse an, sondern verläuft einfach durch die durchschnittlichen Kurswerte einer Gruppe von Balken. Für die Berechnung der Durchschnittswerte ist die Größe der Teile, in die die Gruppe unterteilt ist, nicht besonders wichtig.

Im Allgemeinen werden wir einen Trend auf regelmäßigen Balken aufbauen.

Das Einzige, was wir wissen müssen, ist der Endzeitpunkt des Trends, d.h. die Nummer des Balkens, ab dem die vom Indikator erkannte Doji-Kerze bereits beginnt, da sich die Breite dieser Kerze in einem größeren (in den Einstellungen des Indikators festgelegt) Bereich ändern kann. Die Balken, die den Kerzen-Metabar bilden, sollten nicht als Teil des Trends betrachtet werden. Die Doji-Kerze ist ein potenzieller Wendepunkt, d. h. es handelt sich nicht mehr um einen alten Trend, aber auch noch nicht um einen neuen. Oder es ist sowohl ein alter als auch ein neuer Trend, je nachdem, wie man es betrachtet. Im Allgemeinen kann er auch als eine Seitwärtsbewegung betrachtet werden, da sein Schlusskurs nahe dem Eröffnungskurs liegt.

Daher werden wir den Metabar mit der Doji-Kerze nicht in die Gruppe der Bars aufnehmen, auf denen der Trend basiert, um Fehler in den statistischen Merkmalen des Trends zu vermeiden.

Der einfachste Weg, um herauszufinden, wann eine Doji-Kerze bei der Berechnung eines Trends beginnt, ist die Berechnung des Trends in demselben Indikator, der diese Kerze darstellt. Mit anderen Worten, wir werden den Indikator aus dem vorherigen Artikel so abändern, dass er einen Filter enthält, der nur die Doji-Kerzen anzeigt, bei denen vorher ein entsprechender Trend existiert. Außerdem eignet sich der Indikator mit einer solchen Einstellung direkt für den Handel: Es wird möglich sein, Handelsgeschäfte mit seinen Signalen ohne zusätzliche Analyse durchzuführen.

Derzeit verfügt der Indikator über Eingänge, deren Namen mit „Candle_“ (Kerze) beginnen. Dies sind die verschiedenen Kerzenparameter. Nun müssen wir dem Indikatorcode verschiedene Trend-Inputs hinzufügen. Dies sollten zumindest die beiden folgenden Parameter sein.

  • Minimale Trendlänge (in Anzahl der Balken):
input int     Trend_WidthMin        = 10;
  • Maximale Trendlänge (in Anzahl der Balken):
input int     Trend_WidthMax        = 50;     

Wenn eine Doji-Kerze erkannt wird, analysiert der Indikator eine Gruppe von Balken vor der Kerze in der Anzahl des durch diese beiden Parameter festgelegten Bereichs. Es wird auch bewertet, ob die Balken einen geeigneten Trend aufweisen.

Weitere zu setzende Trend-Eingaben werden später erwähnt. In der Zwischenzeit sollten wir auf ein kleines, aber technisch wichtiges Detail achten.

Da der Indikator nun eine größere Anzahl vorheriger Balken analysieren muss, um ein Signal auf dem Chart zu zeichnen (weil die Breite des Metabars, auf dem die Kerze aufgebaut ist, auch auf die Länge des Trends erweitert wurde), müssen wir eine kleine Korrektur im Code des Indikators vornehmen. Es gab eine Zeile in OnInit, die berechnete, wie viele Balken ganz am Anfang der Kursentwicklung übersprungen werden sollten. Mit anderen Worten, der Indikator kann für diese Balken nicht berechnet und gezeichnet werden (aufgrund unzureichender historischer Daten):

SkipBars = Candle_WidthMax; 
Diese Zeile sollte nun wie folgt aussehen:
SkipBars = Candle_WidthMax + Trend_WidthMax;

Geeignete Methode zur Trendberechnung

Wir können mit verschiedenen Algorithmen einen Trend erkennen. Einige davon sind einfacher, andere komplexer. Für die Verwendung von Doji-Kerzen ist es meiner Meinung nach wichtig, nicht nur einen Trend zu erkennen, sondern auch einige seiner Merkmale zu definieren. Zeigen wir dies in der Tabelle:

Beispiele für Trends vor der Doji-Kerze

Die obige Abbildung zeigt zwei Beispiele für Trends. Auf der linken Seite sehen wir eine Doji-Kerze, deren Höhe mit den Kursbewegungen innerhalb des vorangegangenen Trends vergleichbar ist und diese sogar ein wenig übersteigt. Es kann davon ausgegangen werden, dass innerhalb dieser Doji-Kerze tatsächlich ein bedeutendes Ereignis stattgefunden hat, das zu einem Aufeinandertreffen ernsthafter gegensätzlicher Kräfte geführt hat. Eine der Kräfte trieb den Kurs mit einer noch nie dagewesenen Kraft nach oben (für die gesamte Dauer der Trendentwicklung), aber eine andere Kraft ließ nicht zu, dass der Kurs an der Spitze bleibt, und brachte den Kurs wieder auf das Ausgangsniveau bei der Eröffnung der Kerze zurück. Mit anderen Worten, mit dieser Kerze können wir den Moment erkennen, in dem eine Kraft, die sich dem Wachstum des Trends widersetzen könnte, ins Spiel kam. Wir können also davon ausgehen, dass sich der Trend erschöpft hat und zur Umkehr bereit ist.

Auf der rechten Seite sehen wir, dass die Höhe der Doji-Kerze im Vergleich zu den Bewegungen, die innerhalb des Trends stattgefunden haben, nichts Besonderes ist. Das bedeutet, dass die Kraft, die den Kurs innerhalb dieser Kerze umgekehrt hat, kaum ausreichen kann, um den gesamten Trend umzukehren. Die Eröffnung eines Handels bei einer solchen Doji-Kerze kann ein ungerechtfertigtes Risiko darstellen. Es wäre schön, wenn wir unserer Handelsstrategie die Möglichkeit geben könnten, zwischen diesen beiden Situationen zu unterscheiden.

Dies kann mit Hilfe der linearen Regressionsmethode geschehen, um den Trend zu bestimmen. In diesem Fall werden wir nicht nur einen Trend erkennen, sondern auch die Gleichung der Linie definieren, die durch die Mitte des Trendkanals verläuft:

y = A + B * x

Zusammensetzung der Gleichung:

x — Koordinaten der Chartpunkte auf der horizontalen Achse (in unserem Fall sind dies die Balken-Nummern).

y — Koordinaten entlang der vertikalen Achse (Preis). Dies sind die Koordinaten, die durch diese lineare Regressionsgleichung berechnet werden, um für jeden Balken einen Punkt auf dem Preischart zu bilden und eine gerade Linie durch diese Punkte zu ziehen. Dies ist eine Trendlinie.

B — Verhältnis, das die Steigung einer Trendlinie charakterisiert. Je höher dieses Verhältnis ist, desto steiler und stärker ist der Trend. Wenn das Verhältnis positiv ist, steigt die Linie von links nach rechts an, was einem Aufwärtstrend entspricht. Ein negativer Verhältniswert entspricht einem Abwärtstrend.

A ist lediglich ein Hilfskoeffizient für die Positionierung der Trendlinie auf der gewünschten Höhe des Charts. Für den Handel hat er keine Bedeutung.

Der Algorithmus zur Berechnung der linearen Regression ist allgemein bekannt. Sie gehört zu den Grundlagen des mathematisch-statistischen Apparates und wird neben dem Handel in vielen Anwendungsbereichen eingesetzt. Als Ergebnis der Algorithmusoperation werden die oben genannten Koeffizienten A und B berechnet.

Im Code des Indikators sieht es verkürzt etwa so aus (der vollständige Code des Indikators ist unten angehängt). Innerhalb des Zyklus werden verschiedene Zwischensummen für alle im gemessenen Trend enthaltenen Balken kumuliert:

      double BarPrice = (open[CurBar] + close[CurBar] + high[CurBar] + low[CurBar])/4;
        
      X = TrendBarNum;
      Y = BarPrice;
      N = TrendBarNum;
      S1 += X;
      S2 += Y;
      S3 += X * Y;
      S4 += X * X;


Wenn alle Summen für Trendbalken gesammelt sind, werden die Verhältnisse der Regressionsgleichung angezeigt:

         B = (N * S3 - S1 * S2) / (N * S4 - S1 * S1);
         A = (S2 - B * S1) / N;

Wenn wir die lineare Regressionsgleichung berechnet haben, können wir durch die Analyse des Verhältnisses B herausfinden, ob es einen Trend in dieser Gruppe von Balken gibt und ob er mit der Richtung der Kerze übereinstimmt:

         if ((CandleDir < 0)&&(B < 0)) continue;
         if ((CandleDir > 0)&&(B > 0)) continue;

Es wäre auch nützlich zu beurteilen, ob der Trend stark genug ist, d. h. wie stark er abfällt. Eine zu geringe Trendsteigung kann einfach nur Rauschen sein, der Fehler einer Seitwärtsbewegung. Außerdem sind die Erträge bei kleinen Kursbewegungen zu gering, um die Handelsgebühren zu decken. Fügen wir also dem Indikatorcode einen Parameter hinzu, der die minimal zulässige Trendsteigung festlegt. Sie wird in Punkten pro Minute gemessen:

input double  Trend_PowerMin        = 0.01;

Im Code wird dieser Parameter in dieselbe Einheit umgerechnet wie das Verhältnis B aus der Regressionsgleichung, und beide werden verglichen:

         if (MathAbs(B) < (Trend_PowerMin*_Point*PeriodSeconds()/60)) continue;

Kommen wir nun zum wichtigsten Punkt, der uns veranlasst hat, die lineare Regression zur Bestimmung eines Trends zu verwenden.

Da die Regressionslinie durch die Mitte des Trendkanals verläuft, können wir nun die Breite dieses Kanals selbst berechnen. Die Breite des Trendkanals ist die größte Spanne der Balkenpreise im Verhältnis zur Regressionslinie. Genauer gesagt handelt es sich um die Summe der größten Abweichungen nach oben und nach unten:

Um die Kanalbreite zu berechnen, müssen wir alle Balken des Trends durchgehen, den Regressionswert für jeden Balken berechnen (das gleiche „y“ aus der zuvor erhaltenen linearen Regressionsgleichung), die Differenz zwischen diesem Wert und den Preisen des Balkens berechnen und die größten Werte dieser Differenzen kumulieren:

         for (X=1; X<=TrendBarNum; X++)
         {
            int TmpCurBar=CandleStartBar+X;
            Y = A + B*X;
            DH=high[TmpCurBar]-Y;
            DL=low [TmpCurBar]-Y;
            if ((DH > maxDH)||(X==1)) maxDH=DH;
            if ((DL < minDL)||(X==1)) minDL=DL;
         }

Wir können genau diese Breite des Kanals mit der Höhe der Doji-Kerze vergleichen, um festzustellen, ob die Bewegungen in dieser Kerze stark genug sind, um den Trend umzukehren. Dazu fügen wir dem Indikator einen weiteren Trend-Eingabeparameter hinzu, der das maximal zulässige Verhältnis zwischen der Kanalbreite und der Höhe der gefundenen Doji-Kerze festlegt:

  input double  Trend_ChanelPowerMax  = 1;

Im Indikatorcode wird er wie folgt berücksichtigt:

         if ((maxDH-minDL) > Trend_ChanelPowerMax*CandleHeight) break; 

Der vollständige Indikatorcode ist unten beigefügt.


Endgültiger Indikatoralgorithmus für die Strategie

Da wir nun den Code haben, der das Vorhandensein eines Trends erkennt, können wir ihn als Filter einbinden. So können nur solche Doji-Kerzen auf dem Indikator-Chart angezeigt werden, vor denen ein in jeder Hinsicht passender Trend liegt - Richtung, Länge und Breite.

Der gesamte Code für die Berechnung und Bewertung der Annehmbarkeit der Trendmerkmale wird in eine separate Funktion innerhalb des Indikatorcodes aufgenommen:

bool DetectTrend(
                 int CandleStartBar,
                 int CandleDir,
                 double CandleHeight,
                 const double& open[],
                 const double& high[],
                 const double& low[],
                 const double& close[]
                )


Sie gibt den logischen Wert zurück, der angibt, ob es einen geeigneten Trend gibt oder nicht. Diese Funktion wird jedes Mal aufgerufen, wenn eine Doji-Kerze gefunden wird:

               if (DojiExists)
               {
                  if (DetectTrend(CurBar, CandleDir, CandleHeight, open, high, low, close))
                     break; // there is a candle and a trend, there is no need to expand the metabar further 
                  else
                     DojiExists=false;
               }

Der vollständige Indikatorcode ist unten beigefügt. Wir werden seine Arbeit zusammen mit dem EA zu einem späteren Zeitpunkt überprüfen.


EA-Algorithmus

Wir haben also einen modifizierten Indikator, der mit Hilfe von Metabars nach Doji-Kerzen auf sucht, und derselbe Indikator bestimmt das Vorhandensein eines Trends vor der Kerze. Der Indikator zeichnet jetzt nur dann eine Linie auf dem Chart, wenn gleichzeitig eine Doji-Kerze und ein Trend in dieselbe Richtung wie die Spitze der Kerze vorliegt. In anderen Fällen zeichnet der Indikator gar nichts.

Die Messwerte eines solchen Indikators sind also bereits ein fertiges Signal für einen Handels-EA. Ein Handelsgeschäft wird getätigt, wenn eine Linie auf dem Indikator erscheint. Es bleibt zu entscheiden, wann ein Handelsgeschäft wieder beendet werden soll.

Da es sich bei dem Signal des Indikators in unserem Fall um eine Vorhersage einer möglichen Trendumkehr mit Angabe der Richtung handelt, sollte das bestehende Handelsgeschäft geschlossen werden, wenn der Indikator ein Signal anzeigt, das demjenigen entgegengesetzt ist, bei dem das Geschäft eröffnet wurde. Dies ist das beste Signal, ein Handelsgeschäft zu beenden, da sein Erscheinen im Idealfall bedeutet, dass der Expert Advisor, nachdem er zu Beginn des Trends in den Markt eingestiegen ist (gemäß dem vorherigen Signal), am Ende des Trends aussteigt, d.h. er wird den größtmöglichen Gewinn aus dieser Marktsituation ziehen.

Dieses Signal ist übrigens nicht der einzige Grund für das Ende eines Handelsgeschäfts. Ein Neues wird sofort in die entgegengesetzte Richtung eröffnet, da wir für den Einstieg auch Indikatorsignale verwenden.

Allerdings folgen die Preise auf dem Markt nicht immer den idealen Bahnen für einen Händler. Der Beginn und das Ende von Trends sind nicht immer klar erkennbar. Zwischen dem Ende eines Trends und dem Beginn des nächsten kann auch eine lange Zeit vergehen. Es handelt sich um einen Zeitraum mit flachen oder kurzen Kursbewegungen nach oben und unten. Unser Indikator wird in keiner Weise auf solche Situationen reagieren. Das bedeutet, dass wir für eine lange Zeit kein Signal für das Ende von ihm erhalten werden. Auch wenn der anfängliche Trend bereits erschöpft ist und es keinen Sinn mehr hat, für diese Strategie auf dem Markt zu sein.

Der einfachste Weg, einer Handelsstrategie zusätzliche Schließbedingungen hinzuzufügen, besteht darin, Take-Profit- und Stop-Loss-Niveaus für alle Eröffnungsgeschäfte festzulegen. Ihr Wert kann in den EA-Einstellungen festgelegt werden.

Außerdem müssen alle Indikatorparameter zu den EA-Einstellungen hinzugefügt werden: Doji-Kerzengrößenbereiche, Trendgrößenbereiche usw. Der EA wird den Indikator (unsichtbar) selbst starten und die Einstellungen an ihn weitergeben.

Der vollständige Code des Handels-EA befindet sich im Anhang des Artikels. Es macht keinen Sinn, den Code in dem Artikel zu beschreiben, da der EA ziemlich einfach und typisch ist. Die gesamte Marktanalyse wird vom Indikator durchgeführt, während der EA nur Handelsgeschäfte auf der Grundlage vorgefertigter Signale eröffnet und schließt.


Prüfen des resultierenden EA

Bevor wir groß angelegte Tests zur Geschichte durchführen, sollten wir prüfen, ob alles korrekt funktioniert. Lassen wir den EA im MetaTrader 5-Strategietester für einen kurzen Zeitraum laufen und untersuchen wir seine im Chart angezeigten Trades.

Es ist zu erkennen, dass das Verhalten des EAs dem beabsichtigten Algorithmus entspricht. Hier ist der Fall, dass der Handel mit dem richtigen Indikatorsignal eröffnet wurde:

Der Indikator signalisiert eine aufwärts gerichtete Doji-Kerze der Metabar aus den beiden vorangegangenen Bars
und ein Aufwärtstrend vor der Kerze. Der EA hat einen Handelsgeschäft eröffnet


Später wurde dieser Handel auf das entgegengesetzte Signal hin geschlossen und ein neuer Handel in die entgegengesetzte Richtung eröffnet:

Der Indikator hat eine abwärts gerichtete Doji-Kerze auf dem Metabar der letzten drei Bars erkannt
und ein Abwärtstrend vor der Kerze. Der EA schließt die Position und eröffnet eine entgegengesetzte.


Hier der Fall, dass lange Zeit kein Gegensignal vom Indikator kam und der Handel durch Gewinnmitnahme geschlossen wurde:

Es gibt keine Signale auf dem Indikator. Die vom EA eröffnete Position wurde bei Erreichen von Take-Profit geschlossen.


Vorbereitung für das Backtesting einer Handelsstrategie

Der daraus resultierende Handels-EA hat sehr flexible Einstellungen. Wir können es so einrichten, dass Doji-Kerzen auf Basis von Metabars oder herkömmlichen (einzelnen) Bars gehandelt werden. Die Trendparameter vor der Kerze können auch auf Nullwerte eingestellt werden (was in der Tat bedeutet, dass das Vorhandensein eines Trends nicht berücksichtigt wird). All dies wirkt sich dramatisch auf das Verhalten des EA aus. Sie können diese Einstellungen sogar bedingt als unterschiedliche Handelsstrategien betrachten. Die Optimierung wird zeigen, welche dieser Optionen am effektivsten sind.

In verschiedenen Handelsressourcen wird empfohlen, Doji-Muster auf Zeitrahmen von nicht weniger als einer Stunde zu verwenden, da sonst das Preisrauschen eine Menge falscher Signale erzeugt.

Verwenden wir EURUSD H4 zum Testen. Für qualitativ hochwertige Statistiken mit minimalem Einfluss von Zufälligkeiten und Anpassungseffekten wird ein langer Zeitraum von 10 Jahren gewählt. Der Strategy Tester in MetaTrader 5 ermöglicht es uns, das ausgewählte Segment in zwei Hälften zu teilen: die erste Hälfte wird zum Trainieren des Expert Advisors verwendet, die zweite Hälfte wird für das automatische Testen nach dem Training (Forward Test) verwendet.



Wir werden zwei Tests (und Schulungen) durchführen, um festzustellen, was effektiver ist: Metabars oder klassische Kerzen. Wir vergleichen anhand des Erholungsfaktors - dem Verhältnis zwischen dem erhaltenen Gewinn und der Inanspruchnahme. Je größer dieser Parameter ist, desto rentabler ist die Strategie.

Der EA hat viele zu optimierende Parameter, und um die Optimierung zu beschleunigen, werden wir sie nicht durch eine erschöpfende Suche, sondern durch einen genetischen Algorithmus durchführen.


Einstellungen für (konventionelle) Doji-Kerzen aus einem Balken

Zeitrahmen H4. Die Kerzenbreite beträgt grundsätzlich 1 Balken (1 bar). Die übrigen Einstellungen haben einen großen Optimierungsbereich:

EA-Parameter Start
Schritt
Ende
Candle_WidthMin 1
Candle_WidthMax 1
Candle_HeightPowerMin 0.2 0.2 2
Candle_BodyPowerMax 0.1 0.1 0.4
Candle_ShadowPowerMax 0.1 0.1 0.4
Trend_WidthMin 1 3 10
Trend_WidthMax 1 4 40
Trend_PowerMin 0 0.2 2
Trend_ChanelPowerMax 0.5 0.2 2
Lose 0.1
TakeProfit 300 300 3000
StopLoss 300 300 3000

Das bedeutet über 63 Millionen Parameterkombinationen. Die genetische Optimierung wird jedoch die Aufzählung um Tausende von Malen reduzieren und es uns ermöglichen, innerhalb weniger Minuten zu passen.


Einstellungen für Metabar Doji-Kerzen

Metabars können eine variable Breite in einem unbegrenzten Bereich haben, d.h. ein Expert Advisor könnte sofort mit einer großen Anzahl von Kerzen unterschiedlicher Breite handeln. Um die Genauigkeit des Experiments zu gewährleisten, werden wir den Bereich jedoch nicht viel größer wählen als bei der Prüfung von Einbar-Kerzen. Die verfügbaren Standardzeitrahmen, die H4 am nächsten kommen, sind H3 und H6. Wir werden nur den Abstand zwischen diesen Werten mit Metabars erfassen. Der nächstkleinere Zeitrahmen, in dem dies möglich ist, ist M30. Wenn wir den EA darauf laufen lassen, können wir auf allen Metabars handeln, die eine Breite haben, die einer der folgenden entspricht: H3,5, H4, H4,5, H5, H5,5. Nur einer dieser Zeitrahmen (H4) ist für den Handel mit klassischen Doji-Kerzen verfügbar. Ohne die Metabars könnten wir auf Basis der anderen nicht handeln. Die Kerzen der Metabars sind wie Kaninchen, die ein Zauberer aus einem leeren Hut zieht. Im Gegensatz zu den bereits existierenden Kaninchen fangen die Metabars jedoch echte zusätzliche Preisbewegungen ein (wir haben dies im vorherigen Artikel gesehen). Und wir sind dabei herauszufinden, ob sich diese Bewegungen in echte zusätzliche Gewinne verwandeln lassen.

Alle anderen EA-Einstellungen sind genau die gleichen wie beim Test der Einbar-Variante. Wir müssen sie nur skalieren: Da der M30-Zeitrahmen 8-mal kleiner ist als der H4-Zeitrahmen, müssen alle in Balken gemessenen EA-Eingaben mit 8 multipliziert werden.

Die Parameter, die vom Einbar-Test abweichen, sind fett gedruckt.

Zeitrahmen M30 (H4 und seine Umgebung werden auf Kosten der Metabars simuliert).

EA-Parameter Start
Schritt
Ende
Candle_WidthMin 7
Candle_WidthMax 11
Candle_HeightPowerMin 0.2 0.2 2
Candle_BodyPowerMax 0.1 0.1 0.4
Candle_ShadowPowerMax 0.1 0.1 0.4
Trend_WidthMin 8 24 80
Trend_WidthMax 8 32 320
Trend_PowerMin 0 0.2 2
Trend_ChanelPowerMax 0.5 0.2 2
Lose 0.1
TakeProfit 300 300 3000
StopLoss 300 300 3000


Ergebnisse des Tests einer Handelsstrategie anhand der Historie

Während der Optimierung des EA für 5 Jahre Historie ging der Strategietester durch etwa 5 Tausend Einstellungen und erstellte ein Diagramm, das zeigt, welches Ergebnis der EA bei jeder der Optionen erzielte. Wir können die folgenden Diagramme von einem Ein-Balken-EA und von einem Metabar-EA nebeneinander stellen, indem wir sie nach der vertikalen Skala (Erholungsfaktor) ausrichten:


Alle Optimierungsergebnisse von Ein-Balken- (links) und Meta-Balken- (rechts) EAs


Diese Diagramme zeigen, dass Metabars im Allgemeinen zu besseren Ergebnissen führen.

Dies ist jedoch nur eine vorläufige und sehr grobe Schlussfolgerung. Exportieren wir die Optimierungsergebnisse in ein externes Programm (z. B. Excel), um eine genauere Analyse durchzuführen. Wenn wir berechnen, wie viele Positionen der EA mit verschiedenen Einstellungen getätigt hat, ergibt sich folgender Spread:

Kerzentyp Anzahl der Positionen
(für einen Durchlauf des Expert Advisors in der Trainingshistorie)
Tief Durchschnitt Hoch
Einbar
0
54
1472
Metabar
0
82
3796

Nur auf der Grundlage einer solchen Stichprobe können wir zuverlässig erkennen, dass wir mit Metabars wirklich mehr Transaktionen durchführen können.

Es ist jedoch noch zu früh, um die Rentabilität zu beurteilen, da das Beispiel eine große Anzahl von Einstellungsoptionen enthält, bei denen der EA nur sehr wenige Trades gemacht hat - nur ein paar oder sogar einen... Daher können wir diesem Ergebnis nicht trauen, egal wie effizient der EA zu sein scheint, denn es könnte zufälliger Natur sein.

Um statistisch verlässliche Schlussfolgerungen ziehen zu können, müssen wir nur die Optionen in der Stichprobe belassen, die dazu geführt haben, dass der EA viele Handelsgeschäfte durchgeführt hat. Wenden wir den folgenden minimal sinnvollen Filter auf die Probe an:

  • Anzahl der Positionen >= 120 (das bedeutet 2 Positionen pro Monat über 5 Jahre)

Danach blieben von etwa 5000 Einstellungsmöglichkeiten nur noch etwa 600 für einen Ein-Balken-EA und etwa 900 für einen Meta-Balken-EA (da dieser im Durchschnitt mehr Positionen handelt). Lassen Sie uns ein einzelnes Diagramm erstellen, um die Trainingsstufen eines Ein-Balken-EAs und eines Meta-Balken-EAs zu vergleichen:

Minimale zuverlässige Optimierungsergebnisse


Die Grafik zeigt, dass der Ein-Balken-EA im Durchschnitt (wie aus den Regressionslinien ersichtlich) über den gesamten Trainingszeitraum ein etwas besseres Ergebnis erzielte. Aber der Metabar-EA hatte eine breitere Streuung der Ergebnisse, sowohl in Richtung größerer Verluste als auch in Richtung größerer Gewinne. Dies lässt sich genau dadurch erklären, dass mehr Positionen von Metabars getätigt wurden, und dies wirkte wie eine Art Verstärker: Unprofitable EA vervielfachten den Verlust (weil sie mehr unprofitable Handelsgeschäfte machten), profitable den Gewinn.

Daher war es der Metabar-EA, der die profitabelsten Ergebnisse erzielte. Das Diagramm zeigt, dass nur der EA mehr als einmal einen Erholungsfaktor von über 6 erreichen konnte.

Nun wollen wir sehen, wie sich die EAs mit den besten Einstellungen in den nächsten 5 Jahren im Vorwärtstest verhalten werden. Das letzte Diagramm zeigt, dass die Trainingsergebnisse im Durchschnitt (die Regressionslinie) den Wert 2 erreichen. Nehmen wir also alles, was über diesem Durchschnitt liegt, als gute Werte an. Für das im obigen Chart dargestellte Beispiel ist ein zusätzlicher Filter anwendbar:

  • Erholungsfaktor >= 2 (bei einer 5-Jahres-Historie und einer Inanspruchnahme von 50 % würde dies 20 % pro Jahr entsprechen).

Die Stichprobengröße wurde nun auf etwa 200 Werte sowohl für die Einbar- als auch für die Metabar-EAs reduziert. Für alle Einstellungen aus diesem Beispiel werden wir die Ergebnisse des Vorwärtstests ermitteln und ein Diagramm erstellen:


Vorwärtstest der besten Einstellungen aus der Optimierung


Das Diagramm des Vorwärtstests zeigt, dass der Metabar-EA seine Führungsposition beibehalten konnte, da er unter den besten Ergebnissen dominiert. Außerdem ist sein Durchschnittsergebnis jetzt auch etwas besser als das eines Einbar-EA.

Wie viele Positionen wurden von allen EAs in diesem Diagramm getätigt? Lassen Sie uns rechnen:

Kerzentyp Anzahl der Positionen
(je ein EA-Durchgang in der Vorwärtstest)
Tief Durchschnitt Hoch
Einbar
121
231
543
Metabar
122
352
1173

Es ist zu erkennen, dass die EAs beim Vorwärtstest genauso aktiv waren wie in der Trainingsphase — die Mindestanzahl der Positionen stimmte ungefähr mit dem Filterwert überein, den wir zuvor angewendet hatten. Die meisten Trades wurden von Metabar-EAs getätigt.

Wie Sie sich vielleicht erinnern, war dies das Ziel dieses Artikels - festzustellen, ob Metabars es Ihnen ermöglichen, mehr Handelsgeschäfte zu machen (und nicht nur mehr Kerzen zu finden) und ob dies den Gewinn erhöht. Jetzt können wir beide Fragen mit „Ja“ beantworten.

Als Nebenuntersuchung können wir die Wirksamkeit der Handelsstrategie auf Doji-Kerzen im Allgemeinen bewerten. Das Vorwärtstest-Diagramm hat seine Beurteilung bereits abgegeben - die Ergebnisse aller Strategien auf ihm sind viel schlechter als in der Trainingsphase. Um wirklich effektiv handeln zu können, müssen wir also ein fortschrittlicheres Handelssystem entwickeln und/oder die optimalen Einstellungen, Zeitrahmen, Währungspaare und historischen Bereiche sorgfältiger auswählen. Als Bonus zeige ich hier einige der einzigartigsten EA-Einstellungen, die im obigen Forward-Test-Diagramm gute Ergebnisse zeigten:

Zeitrahmen H4 M30
Eingaben
Candle_WidthMin 1 7
Candle_WidthMax 1 11
Candle_HeightPowerMin 0.4 2 1.8 1.6
Candle_BodyPowerMax 0.2 0.1 0.2 0.2
Candle_ShadowPowerMax 0.1 0.4 0.4 0.3
Trend_WidthMin 1 80 80 80
Trend_WidthMax 13 296 296 168
Trend_PowerMin 1.6 0 0 0
Trend_ChanelPowerMax 1.5 1.9 1.7 1.9
Lose 0.1
TakeProfit 900 300 300 300
StopLoss 300 3000 1200 3000


Schlussfolgerung

Es konnte experimentell gezeigt werden, dass die Verwendung von Kerzen auf Metabars anstelle von konventionellen (aus einem Balken) Kerzen es der Handelsstrategie ermöglicht, viel mehr Handelsgeschäfte zu tätigen.

Metabars sollten sorgfältig verwendet werden. Denn eine Strategie, die Verluste einfährt und mehr Handelsgeschäfte macht, wird noch unrentabler, während eine profitable Strategie profitabler werden kann.

Übersetzt aus dem Russischen von MetaQuotes Ltd.
Originalartikel: https://www.mql5.com/ru/articles/12355

Beigefügte Dateien |
MQL5.zip (4.82 KB)
Letzte Kommentare | Zur Diskussion im Händlerforum (1)
Alexander Piechotta
Alexander Piechotta | 7 Sept. 2023 in 08:46

Danke für den tollen Artikel.

Beim Indikator ist mir aufgefallen, bei Chart Zoom rein, +  plötzliche die letzten Signale verschwinden.

Es fehlte:

   //--- set maximum and minimum for subwindow  
   IndicatorSetDouble(INDICATOR_MINIMUM,-Candle_WidthMax); 
   IndicatorSetDouble(INDICATOR_MAXIMUM,Candle_WidthMax); 

Jetzt funktioniert es.


Verstehen der MQL5 Objektorientierte Programmierung (OOP) Verstehen der MQL5 Objektorientierte Programmierung (OOP)
Als Entwickler müssen wir lernen, Software zu erstellen und zu entwickeln, die wiederverwendbar und flexibel ist, ohne dass Code dupliziert wird, vor allem, wenn wir verschiedene Objekte mit unterschiedlichen Verhaltensweisen haben. Dies kann durch die Verwendung objektorientierter Programmiertechniken und -prinzipien reibungslos erfolgen. In diesem Artikel werden wir die Grundlagen der objektorientierten Programmierung von MQL5 vorstellen, um zu verstehen, wie wir die Prinzipien und Praktiken dieses wichtigen Themas in unserer Software nutzen können.
Kategorientheorie in MQL5 (Teil 14): Funktoren mit linearen Ordnungen Kategorientheorie in MQL5 (Teil 14): Funktoren mit linearen Ordnungen
Dieser Artikel, der Teil einer größeren Serie über die Implementierung der Kategorientheorie in MQL5 ist. Er befasst sich mit Funktoren. Wir untersuchen, wie eine lineare Ordnung mit Hilfe von Funktoren auf eine Menge abgebildet werden kann, indem wir zwei Datensätze betrachten, bei denen man normalerweise keinen Zusammenhang vermuten würde.
Das Erstellen von grafischen Panels ist mit MQL5 einfach geworden Das Erstellen von grafischen Panels ist mit MQL5 einfach geworden
In diesem Artikel bieten wir eine einfache und leicht verständliche Anleitung für jeden, der eines der wertvollsten und hilfreichsten Werkzeuge im Handel erstellen muss, nämlich das grafische Panel zur Vereinfachung und Erleichterung von Aufgaben rund um den Handel, das dabei hilft, Zeit zu sparen und sich ohne Ablenkungen mehr auf den eigentlichen Handelsprozess zu konzentrieren.
Kategorientheorie in MQL5 (Teil 13): Kalenderereignisse mit Datenbankschemata Kategorientheorie in MQL5 (Teil 13): Kalenderereignisse mit Datenbankschemata
Dieser Artikel, der auf die Implementierung der Kategorientheorie von Ordnungsrelation in MQL5 folgt, untersucht, wie Datenbankschemata für die Klassifizierung in MQL5 eingebunden werden können. Wir werfen einen einführenden Blick darauf, wie Datenbankschemakonzepte mit der Kategorientheorie verbunden werden können, wenn es darum geht, handelsrelevante Textinformationen (string) zu identifizieren. Im Mittelpunkt stehen die Kalenderereignisse.