English Русский 中文 Español 日本語 Português
preview
Kategorientheorie in MQL5 (Teil 23): Ein anderer Blick auf den doppelten exponentiellen gleitenden Durchschnitt

Kategorientheorie in MQL5 (Teil 23): Ein anderer Blick auf den doppelten exponentiellen gleitenden Durchschnitt

MetaTrader 5Handelssysteme | 2 Februar 2024, 11:13
278 0
Stephen Njuki
Stephen Njuki

Einführung

Die Implementierung der Kategorientheorie in MQL5 scheint auf Anhieb ein entmutigendes Unterfangen zu sein. Es handelt sich um ein Thema, zu dem es nicht viel leicht zu lesendes Material oder Selbsthilfematerial gibt. Es gibt viele Bücher, aber sie sind für Master- oder PhD-Studenten im akademischen Umfeld gedacht und oft auch so aufgebaut. Der Versuch, dieses Thema zugänglicher zu machen, wird also kein Kinderspiel sein, zumal es nicht darum geht, die akademischen Argumente und Theorien zu rezitieren, sondern vielmehr darum, sie zu interpretieren und bei den Händlern anzuwenden. Zu diesem Zweck erweitern wir unser Thema, indem wir einfache, alltägliche Indikatoren anders betrachten.

In diesem Artikel soll das Konzept der horizontalen Komposition der Natürliche Transformation vorgestellt werden. Wir haben das Antonym im letzten Artikel besprochen,

wo wir gesehen haben, wie drei Funktoren zwischen zwei Kategorien, die zwei natürliche Transformationen in einer vertikalen Komposition implizieren, abgeleitet werden können, wenn es sich bei den Kategorien um so einfache Datensätze wie eine Preiszeitreihe und eine Zeitreihe mit gleitendem Durchschnitt der gleichen Preise handelt. In diesem Beitrag erweitern wir die gleitende Durchschnittszeitreihe horizontal, indem wir eine dritte Kategorie gleitender Durchschnitte hinzufügen, die besser bekannt sind als doppelte, exponentielle gleitende Durchschnitte. Unsere Variante dieses bekannten Indikators verwendet nicht die etablierte Formel, sondern glättet für unsere Zwecke einfach den gleitenden Durchschnitt, indem wir einfach einen gleitenden Durchschnitt eines gleitenden Durchschnitts berechnen. Die Beziehungen zwischen den Funktoren sind ähnlich wie im letzten Artikel, allerdings haben wir nur zwei Funktoren zwischen den Kategorien, im Gegensatz zu den drei, die wir im letzten Artikel hatten. Wie im letzten Artikel hat jedoch jeder Funktor zwischen zwei beliebigen Kategorien seine eigene gleitende Durchschnittsperiode, sodass die natürliche Transformation zwischen jedem Funktorenpaar uns helfen kann, einen Zeitreihenpuffer für die Analyse zu bilden.

Die Bedeutung der Volatilitätsprognose beim Handel ist vielleicht nicht so entscheidend oder kritisch wie die Bestimmung der Art der Position, die man überhaupt haben sollte (ob Kauf oder Verkauf). Nichtsdestotrotz bietet sie uns die Möglichkeit, mögliche Verwendungen und Verbesserungen anderer bestehender Einstiegssignalstrategien zu untersuchen oder sogar neue Strategien zu entwickeln, die ihre Ideen nutzen. Dies ist ein Thema, das wir bereits in früheren Artikeln ausführlich behandelt haben, sodass eine Wiederholung hier nicht ungewöhnlich ist. Wir werden versuchen, unsere Volatilitätsprognose, die in einer Instanz einer Expert-Trailing-Klasse gehandhabt wird, mit der integrierten Awesome Oszillator zu verbinden. Leser sind wie immer herzlich eingeladen, diese Klasse mit anderen Signalen oder ihren eigenen privaten Strategien zu testen, um herauszufinden, was für sie am besten passt; für diesen Artikel werden wir uns an den genialen Oszillator halten.


Hintergrund

Um die Konzepte der Kategorientheorie kurz zu rekapitulieren, haben wir uns mit den Schlüsselbegriffen beschäftigt: Ordnungen als Kategorien, Funktoren, Morphismen als Funktoren in speziellen Situationen und schließlich das Natürlichkeitsquadrat (naturality square), das die Existenz natürlicher Transformationen beweist. Es gab noch andere Konzepte, die wir im Vorfeld betrachtet haben, aber diese Liste sollte die Basis dessen abdecken, was wir in diesem Artikel auspacken.

Es ist von entscheidender Bedeutung zu verstehen, was in diesem Artikel mit der „horizontalen“ Komposition natürlicher Transformationen gemeint ist, da wir uns nicht einfach auf die diagrammatische Darstellung der natürlichen Transformationen in zwei Dimensionen beziehen. Betrachten Sie das nachstehende Diagramm:

Horizontalität bedeutet hier, dass die Funktoren in einer Kette angeordnet sind, sodass verschiedene Paare (oder Sätze) mit verschiedenen Domänen- und Kodomänenkategorien verknüpft sind, wie oben gezeigt, wo die ersten beiden Funktoren A und C Kategorie-1 und Kategorie-2 verknüpfen, während die Funktoren B und D Kategorie-2 und Kategorie-3 verknüpfen. Dies steht im Gegensatz zu dem, was wir im letzten Artikel hatten, wo alle Funktoren das gleiche Paar von Kategorien verknüpften. Selbst wenn die beiden Kategorien im letzten Artikel vertikal gezeichnet würden, was bedeutet, dass die natürlichen Transformationen quer (horizontal) verlaufen, wäre dies immer noch eine vertikale Komposition, um es klar zu sagen. Auch wenn die Kategorien in vertikaler Reihenfolge gezeichnet werden, was bedeutet, dass die natürlichen Transformationen in einer „vertikalen“ Reihenfolge zu sein scheinen, würde es sich um eine horizontale Komposition handeln.

Unsere betrachteten Kategorien sind also eine Preiszeitreihe, die Zeitreihe mit gleitendem Durchschnitt, und eine Zeitreihe mit doppelt exponentiellem gleitendem Durchschnitt. Die Verwendung von doppelt exponentiellen Zeitreihen könnte beim Vergleich zwischen dieser Kategorie und der Kategorie der Preiszeitreihen zu Verwirrung führen. Die 3. Kategorie ist praktisch ein doppelter exponentieller gleitender Durchschnitt der Kategorie-1. Hätten wir die Funktoren B und D einfach als doppelten exponentiellen gleitenden Durchschnitt auf den Objekten der Kategorie-2 aufgefasst, wäre das Ergebnis für uns nicht sehr nützlich gewesen. Ich meine, was ist der DEMA eines MA? Diese Funktoren scheinen also von der Kategorie-1, der ursprünglichen Preisreihe, abzubilden, doch sollte dies einfach als Abbildung des gleitenden Durchschnitts der Kategorie-2 verstanden werden, was es auch tatsächlich ist. Der Leser kann dies ändern und seine eigenen Tests entsprechend durchführen, da der vollständige Quellcode am Ende dieses Artikels beigefügt ist, aber diese Unterscheidung ist wichtig zu beachten.


Kategorien und Funktoren

Unsere erste Kategorie, Kategorie-1, umfasst also die Preiszeitreihen. Wir haben in einem früheren Artikel untersucht, wie eine Totalordnung als Kategorie ausgelegt werden kann, sodass die Leser vielleicht darauf zurückgreifen möchten. Unsere Zeitreihe hier ähnelt einer linearen Ordnung, wie sie in einem früheren Artikel beschrieben wurde. Die Objekte in dieser Kategorie wären die Preis- und Zeitwerte in jedem Intervall, d. h. jedes Objekt hätte mindestens zwei Elemente: einen Preis und einen Zeitwert. Die Morphismen für die Kategorie würden durch das Zeitintervall der Reihe definiert und sie verketten einfach die Preiswerte in aufsteigender Reihenfolge nach Zeit. Das Finanzinstrument, dessen Zeitreihen wir in diesem Artikel untersuchen werden, ist EURUSD.

Die gleitenden Durchschnitte der Preise werden unsere Kategorie-2 sein, und ähnlich wie bei der ersten Kategorie handelt es sich um eine Zeitreihe, die ebenfalls als lineare Ordnung und somit als Kategorie betrachtet werden kann. In erster Linie wird es jedoch zwei Objekte geben, die jeweils eine Zeitreihe darstellen. Die erste wird durch Funktor A abgebildet und repräsentiert den gleitenden Durchschnitt der Preisreihe in einer durch Funktor A definierten Periode. Dieses Modell hat im Wesentlichen zwei gleitende Durchschnittsperioden, wobei die von Funktor A verwendete Periodenlänge die kürzere der beiden ist. Der zweite Funktor mit der Bezeichnung C bildet ebenfalls die Preiszeitreihe auf Kategorie-2 ab und hat eine längere Periodenlänge des gleitenden Durchschnitts als Funktor A. Jedes unserer Objekte in Kategorie-2 ist eine Zeitreihe.

Die dritte und letzte Kategorie, Kategorie-3, umfasst vier Objekte, bei denen es sich um Zeitreihen handelt, obwohl wir nur 2 betrachten. Jedes Objektpaar (4 Objekte sind 2 Paare) wird durch einen einzigen Funktor abgebildet, der den gleitenden Durchschnitt des gleitenden Durchschnitts berechnet, um den doppelten exponentiellen gleitenden Durchschnitt (DEMA) zu erhalten. Wie oben erläutert, scheint der DEMA-Code die Preisreihen der Kategorie-1 zuzuordnen, aber dies geschieht nur, um die Berechnungen zu erleichtern und nicht mit einem nutzerdefinierten Indikator aufwarten zu müssen. Da es sich um einen gleitenden Durchschnitt eines gleitenden Durchschnitts handelt, kann er als Abbildung der Kategorie-2 betrachtet werden. Die Kategorie-2 hat nun zwei Zeitreihen gleitender Durchschnitte, die als schneller und langsamer Durchschnitt betrachtet werden können. Dies bedeutet jedoch, dass unsere Kategorie-3 4 Objekte haben wird, da die beiden Funktoren aus Kategorie-2 jeweils auf die beiden Objekte abgebildet werden und somit eine Verbindung zu einem bestimmten Objekt oder einer Zeitreihe herstellen.


Funktoren und natürliche Transformationen

Die Gesamtzahl der natürlichen Transformationen aus diesen beiden Funktorenpaaren könnte 6 betragen, aber da wir nur 2 der 4 Objekte in Kategorie-3 verwenden werden, wird diese Zahl 2 sein. Zusammenfassend lässt sich sagen, dass eine natürliche Transformation der Unterschied zwischen den beiden Codomänenobjekten der Funktoren ist. Dies lässt sich daher leicht durch Subtraktion der beiden Objekte des gleitenden Durchschnitts erfassen. Wie im letzten Artikel wird jede natürliche Transformation als Zeitreihenpuffer erfasst, und die Korrelation dieser Puffer hilft uns bei der Entscheidung über die Anpassung des/der Trailing-Stops für offene Positionen. Im letzten Artikel diente diese Korrelation zwischen diesen natürlichen Transformationspuffern jedoch als Filter für weißes Rauschen. Da wir uns in diesem Artikel nur mit der Anpassung des Trailing-Stops befassen, wird er wieder als Filter dienen, wenn Anpassungen des Stop-Loss in Richtung der gleitenden Durchschnittstrends vorgenommen werden sollen. Ein negativer Trend mit einer positiven Korrelation zwischen diesen Puffern wäre also ein grünes Licht, um den Stop-Loss für eine Verkaufsposition zu senken. In ähnlicher Weise würde ein positiver Trend mit ausreichender Korrelation (unser Schwellenwert ist alles über Null) bedeuten, dass der Stop-Loss für Kaufpositionen nach oben gesetzt wird, falls es solche Positionen gibt. Es kommt daher zwangsläufig häufig vor, dass wir aufgrund negativer Korrelationen oder weil die Art der eröffneten Position nicht mit dem erzeugten Signal vereinbar ist, kein Signal erhalten, da unsere Stopp-Bewegungsentscheidungen positionsspezifisch sind. Dieses Modell könnte also, wie wir im letzten Artikel gesehen haben, als Instanz der Klasse der Expertensignale rekonstituiert und mit Hilfe des Assistenten in einen Expertenberater integriert werden, dessen Signale dann genauer getestet werden können, um seine Leistung und Ergebnisse zu bewerten.


Vorhersage der Volatilität

Die Vorhersage der Volatilität ist also das, was unser Beispiel der Expertentrailing-Klasse tut, wie es in einigen Artikeln dieser Reihe der Fall war. Wir tun dies hier mit einem Filter; die Trends des gleitenden Durchschnitts müssen durch eine erhebliche Korrelation zwischen den natürlichen Transformationspuffern bestätigt werden. Wir hätten aber auch einen anderen Ansatz wählen können, der mehr auf die Volatilität abzielt, indem wir die Kategorie 1 als eine Reihe von Preisspannen (Höchst- minus Tiefstwerte) darstellen. Diese Reihe hätte dann ihre Durchschnittswerte in Kategorie-2, und Kategorie-3 wäre ihr DEMA, wie wir es mit den Schlusskursen im beigefügten Code tun. Der Prozess ist im Wesentlichen derselbe, aber dieser Ansatz könnte zu Ergebnissen führen, die besser auf die Volatilität abgestimmt sind und darauf reagieren.


Praktische Umsetzung in MQL5

Das Einrichten der MQL5-Umgebung für dieses Modell ähnelt dem, was wir in dieser Serie betrachtet haben. Noch einmal: Die Instanz der Expert-Trailing-Klasse wird als Teil eines Expert Advisors im MQL5-Assistenten zusammengestellt, und damit sie funktioniert oder getestet werden kann, muss zunächst eine Instanz der Expert-Signal-Klasse im Assistenten ausgewählt werden. Für diesen Artikel wurde das integrierte Signal des Awesome Oszillators verwendet. „Integriert“ bedeutet hier, was bereits in der in der IDE bereitgestellten Signalbibliothek vorhanden ist.

Das Schreiben von Code für die Funktoren ist etwas, das wir hier nicht unbedingt tun müssen, da wir die integrierten Instanzen der gleitenden Durchschnittsklassen verwenden können. Die Klassen „CiMA“ und „CiDEMA“ können unsere Anforderungen an den gleitenden Durchschnitt und den doppelten exponentiellen gleitenden Durchschnitt problemlos erfüllen. Nichtsdestotrotz deklarieren und verwenden wir Instanzen der Klasse „CObjects“, um diese Durchschnittswerte zu handhaben, und ihre Deklaration lautet wie folgt:

...

   CObjects<double>        m_o_average_a;
   CObjects<double>        m_o_average_b;
   CObjects<double>        m_o_average_c;
   CObjects<double>        m_o_average_d;
...

Wir müssten, wie in unserem letzten Artikel, die natürlichen Transformationspuffer initialisieren, da die Fähigkeit, Signale abzulesen, von Anfang an wichtig ist. Ihre Größe ist wie zuvor ein Eingabeparameter, „m_transformations“, wie im letzten Artikel, sodass dieser wichtige Schritt fast identisch mit der Implementierung im letzten Artikel gehandhabt wird, mit dem Hauptunterschied, dass wir 4 gleitende Durchschnittsinstanzen für die Puffer verwenden müssen. Die Aktualisierung dieser Werte, die der Initialisierung sehr ähnlich ist, wird wie in der nachstehenden Auflistung gehandhabt:

//+------------------------------------------------------------------+
//| Refresh function from Natural Transformations.                   |
//+------------------------------------------------------------------+
void CTrailingCT::Refresh(void)
   {
      if(!m_init)
      {
         Init();
      }
      else
      {
         m_close.Refresh(-1);
         
         int _x=StartIndex();
         
         for(int i=m_functor_ab+m_functor_ab-1;i>0;i--)
         {
            m_e_price.Let();m_e_price.Cardinality(1);m_o_prices.Get(i,m_e_price);m_o_prices.Set(i-1,m_e_price);
         }
         
         double _p=m_close.GetData(_x);
         m_e_price.Let();m_e_price.Cardinality(1);m_e_price.Set(0,_p);m_o_prices.Set(0,m_e_price);
         
         for(int i=0;i<m_transformations+1;i++)
         {
            double _a=0.0;
            for(int ii=i;ii<m_functor_ab+i;ii++)
            {
               _a+=m_close.GetData(_x+ii);
            }
            _a/=m_functor_ab;
            m_e_price.Let();m_e_price.Cardinality(1);m_e_price.Set(0,_a);m_o_average_a.Set(i,m_e_price);
            //
            double _b=0.0;
            for(int ii=i;ii<m_functor_cd+i;ii++)
            {
               m_e_price.Let();m_e_price.Cardinality(1);m_o_average_a.Get(i,m_e_price);
               double _b_i=0.0;m_e_price.Set(0,_b_i);
               _b+=_b_i;
            }
            _b/=m_functor_cd;
            m_e_price.Let();m_e_price.Cardinality(1);m_e_price.Set(0,_b);m_o_average_b.Set(i,m_e_price);
            //
            double _c=0.0;
            for(int ii=i;ii<m_functor_ab+i;ii++)
            {
               _c+=m_close.GetData(_x+ii);
            }
            _c/=m_functor_ab;
            m_e_price.Let();m_e_price.Cardinality(1);m_e_price.Set(0,_c);m_o_average_c.Set(i,m_e_price);
            //
            double _d=0.0;
            for(int ii=i;ii<m_functor_cd+i;ii++)
            {
               m_e_price.Let();m_e_price.Cardinality(1);m_o_average_c.Get(i,m_e_price);
               double _d_i=0.0;m_e_price.Set(0,_d_i);
               _d+=_d_i;
            }
            _d/=m_functor_cd;
            m_e_price.Let();m_e_price.Cardinality(1);m_e_price.Set(0,_d);m_o_average_d.Set(i,m_e_price);
         }
         
         
         for(int i=m_transformations-1;i>0;i--)
         {
            m_natural_transformations_ac[i]=m_natural_transformations_ac[i-1];
            m_natural_transformations_bd[i]=m_natural_transformations_bd[i-1];
         }
         //
         double _a=0.0;
         m_e_price.Let();m_e_price.Cardinality(1);m_o_average_a.Get(0,m_e_price);m_e_price.Get(0,_a);
         double _b=0.0;
         m_e_price.Let();m_e_price.Cardinality(1);m_o_average_b.Get(0,m_e_price);m_e_price.Get(0,_b);
         double _c=0.0;
         m_e_price.Let();m_e_price.Cardinality(1);m_o_average_c.Get(0,m_e_price);m_e_price.Get(0,_c);
         double _d=0.0;
         m_e_price.Let();m_e_price.Cardinality(1);m_o_average_d.Get(0,m_e_price);m_e_price.Get(0,_d);
         
         m_natural_transformations_ac[0]=_a-_c;
         m_natural_transformations_bd[0]=_b-_d;
      }
   }


Die Aktualisierungsfunktion ist ein wenig kompliziert. Wir beginnen mit der Aktualisierung des Schlusskurszeigers, da er die Grundlage für Kategorie-1 ist. Bevor wir dem Solo-Objekt dieser Kategorie den neuesten Wert zuweisen, müssen wir alle vorhandenen Elemente innerhalb dieses Objekts verschieben. Wir machen dann fast das Gleiche mit den beiden Objekten der Kategorie-2. Der Unterschied besteht darin, dass wir zuerst den gleitenden Durchschnitt über die jeweilige Periodenlänge berechnen müssen und dann die Werte nach der Verschiebung der Werte in beiden Objekten zuordnen, wie wir es in Kategorie-1 getan haben. Danach müssen wir uns mit den Objekten der Kategorie-3 befassen. Es sind 4, aber wie gesagt, wir verwenden nur 2 davon für unsere Projektionen. Die Werte dieser Objekte erhalten wir aus den beiden Objekten, die wir gerade gefüllt haben, und in leichter Abwandlung der DEMA-Formel, die den gleitenden Durchschnitt des gleitenden Durchschnitts vom doppelten gleitenden Durchschnitt subtrahiert, werden wir einfach den ersteren berechnen. Der gleitende Durchschnitt des gleitenden Durchschnitts.

Die Integration unseres Modells mit den täglichen EURUSD-Kursdaten für Testläufe erfolgt, sobald unsere Instanz der Expert-Trailing-Klasse mit dem MQL5-Assistenten zusammengestellt wurde. Wie immer gibt es hier eine Anleitung, wie man das macht. Wie bereits erwähnt, bauen wir diesen Expert Advisor mit dem genialen Oszillator als Instanz der Klasse Expertensignal auf.

Das Backtesting und die Analyse der EURUSD-Historiendaten wird von 2020.01.01 bis 2023.01.01 durchgeführt. Unser Testbericht mit den besten Optimierungsergebnissen wird im Folgenden vorgestellt:

r1

Kritisch anzumerkende Aspekte des Berichts sind in der Regel die MAE-Gewinnkorrelation sowie die Korrelation zwischen Haltedauer und Gewinn. Diese beiden werden in der Regel in Form von Diagrammen am Ende des vollständigen Berichts dargestellt. Die obigen Ausführungen sind eine Zusammenfassung, die sich auf die allgemeinen Kennzahlen bezieht, auf die jeder achten sollte.


Tests und Vorwärtsläufe

Wenn wir einen Vorwärtslauf vom 01.01.2023 bis zum 08.08.2023 mit den besten Einstellungen aus unserem Backtest-Lauf durchführen, erhalten wir den unten stehenden Bericht:

r2

Wir haben nicht den Spaziergang bekommen, den wir gerne gehabt hätten, was normalerweise eines von zwei Dingen bedeutet. Die These unseres Handelsmodells (verwendete Trailing-Klasse) ist beliebig und kann nicht in Handelssystemen verwendet werden, oder wir haben die Idee falsch implementiert mit Fehlern in der Kontrollstruktur oder mit Programmfehler im Code unserer Trailing-Klasse. Wichtig ist jedoch, dass wir selbst bei einem positiven Ergebnis noch umfassendere Tests über einen viel längeren Zeitraum durchführen müssen, bei Forex könnte dies bis zu zwei Jahrzehnte bedeuten, und diese Tests sollten mit echten Ticks durchgeführt werden. Um dies zu unterstreichen, kommen die von unserem Expertenberater generierten einzigartigen Signale zur Anpassung des Trailing-Stops nicht sehr oft vor, da der Trend des gleitenden Durchschnitts in Richtung der offenen Position verlaufen muss. Aus diesem Grund wird die Wirksamkeit der Trailing-Klasse in kurzen Testfenstern, zu denen diese 3-Jahres-Epoche gehören könnte, nicht ausreichend getestet. Darüber hinaus basieren diese Ergebnisse auf unserer Trailing-Klasse, die mit dem Awesome Oszillator verbunden ist. Wie würde die Performance aussehen, wenn sie mit anderen Einstiegssignalen gepaart wäre? Diese und andere Bedenken müssen bei der Bewertung berücksichtigt werden.

Ein weiterer notwendiger Schritt ist das Testen mit realen Daten, bevor man diesen Expertenberater oder seine Variante, die das hier Behandelte beinhaltet, einsetzen kann. Der erste Schritt ist die Einrichtung eines Demokontos bei dem von Ihnen gewünschten Broker, idealerweise mit einem Kontotyp, der dem Konto entspricht, das Sie live führen werden. Verbinden Sie dann den Experten mit dem Chart des/der zu handelnden Symbols/Symbole. Es könnte eine gute Idee sein, den VPS-Service von MetaQuote zu nutzen, da die Einrichtung weniger Kopfzerbrechen bereitet und er preislich konkurrenzfähig ist, aber unabhängig von der getroffenen Wahl ist die Notwendigkeit, die Expertenprotokolle zu überwachen, um die erwartete Leistung und die Handelsergebnisse sicherzustellen, von größter Bedeutung. Sowohl der VPS von MetaQuote als auch ein typischer VPS-Server ermöglichen dies problemlos. Außerdem sollte das Echtzeit-Testkonto mit einem Kapitalbetrag beginnen, der im Falle eines positiven Testergebnisses eingesetzt werden soll. Schließlich könnte auch ein persönliches Handelsjournal eine gute Idee sein, vor allem wenn die hier vorgestellten Ideen in ein anderes Handelssystem einfließen, das in irgendeiner Form von Nachrichten abhängig ist. Denken Sie daran, dass der MQL5-Strategietester das Testen während des Lesens von wirtschaftlichen Kalenderereignissen noch nicht zulässt. Es könnte also hilfreich sein, diese selbst zu protokollieren, damit Sie bei der Überprüfung die relative Bedeutung jeder Nachricht auf lange Sicht leicht beurteilen können.

Die Interpretation der Ergebnisse und die Entscheidung, was als Nächstes zu tun ist, ist sehr subjektiv, aber als Richtschnur könnte man argumentieren, dass bei einem System, das profitabel genug ist, um die Zielanforderungen zu erfüllen, die Korrelation zwischen Gewinn und MAE positiv sein sollte und die Haltedauer sowie die Gewinne bei jedem Handel eine positive Korrelation aufweisen sollten. Die letzte Kennzahl wird oft als Erwartungswert bezeichnet, aber leider wird dieser Wert in den Berichten der Strategietester nicht berechnet.


Schlussfolgerung

Zusammenfassend lässt sich sagen, dass wir gesehen haben, wie die horizontale Zusammensetzung natürlicher Transformationen bei der Vorhersage von Nutzen sein kann. Die Projektionen, die wir für diesen Artikel betrachtet haben, bezogen sich auf Preisspannen, die als Maß für die Volatilität angesehen werden können. Diese Hochrechnungen wurden, wie schon einige Male in dieser Artikelserie, durch die Anpassung des Trailing-Stops offener Positionen genutzt. Während die Ergebnisse des Trainings innerhalb der Stichprobe positiv ausfielen, waren die Ergebnisse außerhalb der Stichprobe oder des Walkforwards nicht positiv. Dies ist zwar ein Rückschlag, ändert aber nichts an der Notwendigkeit einer umfassenderen Prüfung über einen längeren Zeitraum, bevor ein Urteil über die Wirksamkeit des Systems gefällt werden kann.

Die Implikationen dieser Ergebnisse für die Entwicklung des Handelssystems bestehen darin, dass es mit verschiedenen Eingangssignalklassen gepaart werden könnte, um bessere Ergebnisse zu erzielen, oder dass sogar Änderungen an unseren Eingabedatensätzen vorgenommen werden könnten, um verschiedene Testszenarien zu präsentieren.

Wie immer lade ich den Leser ein, diese und andere Möglichkeiten zu erkunden, um den beigefügten Code zu seiner Zufriedenheit zu ändern und zu testen.


Referenzen

Referenzen werden wie üblich meist von Wikipedia aber diesmal auch von Investopedia.

Weitere Ressourcen zum Zusammenstellen und Verwenden des beigefügten Codes in einem Expert Advisor finden Sie hier und hier.


Übersetzt aus dem Englischen von MetaQuotes Ltd.
Originalartikel: https://www.mql5.com/en/articles/13456

Beigefügte Dateien |
ct_22.mqh (29.34 KB)
TrailingCT_23.mqh (16.88 KB)
Lernen Sie, wie man mit Datum und Uhrzeit in MQL5 umgeht Lernen Sie, wie man mit Datum und Uhrzeit in MQL5 umgeht
Ein neuer Artikel über ein neues wichtiges Thema, das sich mit Datum und Zeit beschäftigt. Als Händler oder Programmierer von Handelsinstrumenten ist es sehr wichtig zu verstehen, wie man mit diesen beiden Aspekten Datum und Zeit sehr gut und effektiv umgehen kann. Ich werde also einige wichtige Informationen darüber weitergeben, wie wir mit Datum und Zeit umgehen können, um effektive Handelsinstrumente reibungslos und einfach zu erstellen, ohne dass es zu Komplikationen kommt.
ONNX meistern: Der Game-Changer für MQL5-Händler ONNX meistern: Der Game-Changer für MQL5-Händler
Tauchen Sie ein in die Welt von ONNX, dem leistungsstarken offenen Standardformat für den Austausch von Modellen für maschinelles Lernen. Entdecken Sie, wie der Einsatz von ONNX den algorithmischen Handel in MQL5 revolutionieren kann, indem er es Händlern ermöglicht, hochmoderne KI-Modelle nahtlos zu integrieren und ihre Strategien auf ein neues Niveau zu heben. Entdecken Sie die Geheimnisse der plattformübergreifenden Kompatibilität und lernen Sie, wie Sie das volle Potenzial von ONNX in Ihren MQL5-Handelsbestrebungen ausschöpfen können. Verbessern Sie Ihr Trading-Spiel mit diesem umfassenden Leitfaden zur Beherrschung von ONNX:
Permutieren von Preisbalken in MQL5 Permutieren von Preisbalken in MQL5
In diesem Artikel stellen wir einen Algorithmus zur Permutation von Preisbalken vor und erläutern, wie Permutationstests verwendet werden können, um Fälle zu erkennen, in denen die Leistung einer Strategie gefälscht wurde, um potenzielle Käufer von Expert Advisors zu täuschen.
ALGLIB Bibliothek für numerische Analysen in MQL5 ALGLIB Bibliothek für numerische Analysen in MQL5
Der Artikel wirft einen kurzen Blick auf die numerische Analysebibliothek ALGLIB 3.19, ihre Anwendungen und neue Algorithmen, die die Effizienz der Finanzdatenanalyse verbessern können.