English 日本語
preview
MQL5-Assistenten-Techniken, die Sie kennen sollten (Teil 83):  Die Verwendung von Mustern des Stochastischen Oszillators und des FrAMA – Archetypen des Verhaltens

MQL5-Assistenten-Techniken, die Sie kennen sollten (Teil 83): Die Verwendung von Mustern des Stochastischen Oszillators und des FrAMA – Archetypen des Verhaltens

MetaTrader 5Handelssysteme |
54 0
Stephen Njuki
Stephen Njuki

Einführung

Unsere Plattform, MetaTrader 4/5, hat sich in den 2 Jahrzehnten, in denen sie verfügbar ist, vor allem wegen ihrer Flexibilität durchgesetzt, die im Wesentlichen sowohl den manuellen als auch den automatisierten Handel ermöglicht. So stehen beispielsweise sowohl der manuelle als auch der automatische Modus nicht nur zur Verfügung, um einer Vielzahl von Handelsansätzen gerecht zu werden, sondern sie sind auch mit entsprechenden Tools ausgestattet. Es gibt einen Veranstaltungskalender für den manuellen Handel und eine Strategie-Tester-Konsole für den automatisierten Handel, neben einer Vielzahl anderer Tools, für jeden.

Der MQL5-Assistent, der den automatisierten und nicht den manuellen Handel unterstützt, ist der unbesungene Held, der das Prototyping von Multi-Signal-Systemen mit anpassbaren Trailing Stops und Money Management ermöglicht. Jeder von einem Assistenten zusammengestellte Expert Advisor enthält eine Orchestrierung der Bausteine: eine oder mehrere Signalklassen, eine Trailing-Stop-Logik und Regeln für das Geldmanagement. Die Signalklasse, auf die wir uns in vielen Artikeln dieser Reihe konzentrieren, ist der Ort, an dem Muster erkannt, Wahrscheinlichkeiten abgeleitet und Handelsentscheidungen getroffen werden. 

In diesem Artikel tauchen wir wieder einmal tief in eine selbst erstellte Signalklasse ein, die den Stochastik-Oszillator und den Fractal Adaptive Moving Average zusammenführt. Durch diese Kombination zweier bekannter Indikatoren soll ein leistungsfähiges hybrides System entstehen, dessen Indikator-Ziel es ist, eine binäre Darstellung der Logik dieser Indikatoren in einer Pipeline zu liefern. Dieser dient in erster Linie als digitaler Rauschfilter für Marktmuster. Wie üblich werden wir 10 Indikatormuster betrachten, die für verschiedene Arten von Märkten geeignet sind, wobei die betrachteten Markttypen trendfolgend/mittelwertumkehrend, korreliert/entkoppelt und mit geringer/hoher Volatilität sind. Jedes dieser zehn Muster, die wir in der nutzerdefinierten Signalklasse definieren werden, steht für ein bestimmtes Setup von entweder der FrAMA-Steigung oder Stochastik-Positionierung oder Kursmuster.

Das Design unserer nutzerdefinierten Signalklasse passt daher gut zum modularen Charakter des MQL5-Assistenten, und der beigefügte Code am Ende des Artikels sollte im Ordner 'MQL5\Include\Expert\Signal\Custom' platziert werden, oder wie im Header der beigefügten '.mq5'-Datei angegeben. Eine Anleitung dazu sowie zur Erstellung eines Expert Advisors mit dem Assistenten finden neue Leser hier. Jedes der zehn Muster der nutzerdefinierten Signalklasse ist „in sich geschlossen“, d. h. sie verwenden alle dasselbe Berechnungsgerüst. Dennoch können die Nutzer sie ein- oder ausschalten, jedem Muster eine andere Gewichtung zuweisen oder die Bedingungen jedes Musters in Strategy Tester separat optimieren. Unser gesamtes Expert Advisor Setup ist daher keine Blackbox, sondern so transparent wie möglich. Da er in hohem Maße anpassbar ist, ist er im Wesentlichen anpassungsfähig und besser darauf ausgerichtet, die verschiedenen Markttypen, wie z. B. Märkte mit Trendumkehr oder korrelierte/entkoppelte Märkte oder Märkte mit niedriger/hoher Volatilität, auf einer sehr hohen Abstimmungsebene zu bewältigen.

Der hier vorgestellte Testrahmen prüft daher, wie sich unsere zehn Signalmuster unter jedem dieser Marktregime gestalten. Wir führen das übliche Training oder die Optimierung über ein Jahr durch und machen dann einen Vorwärtstest über das folgende Jahr. Bei der Betrachtung dieser verschiedenen Systeme führen wir auch Tests für verschiedene Anlageklassen ein – Rohstoffe, Aktien und Devisen. Genauer gesagt, werden wir den S&P 500 Index und die Paare XAUUSD und USDJPY testen. Alle Tests werden mit dem 4-stündigen Zeitrahmen durchgeführt, wobei die Ausbildung von Juli 2023 bis Juli 2024 dauert, während die Vorabtests von Juli 2024 bis Juli 2025 stattfinden.

Am Ende dieses Beitrags hoffen wir zu zeigen, wie die einfache, sich ergänzende Kombination dieser beiden Indikatoren in ein Entscheidungssystem umgewandelt werden kann, das das Potenzial hat, kontextabhängige Muster zu erkennen. Wir hoffen, nicht nur einen Rahmen für Experimente bieten zu können, sondern auch einen, der es ermöglicht, Ideen zu finden, die in die eigenen Handelsstrukturen oder Systeme integriert werden können.


Fusion von Stochastik-Oszillator und FrAMA

Um ein besseres Gefühl dafür zu bekommen, wie sich der Stochastik Oszillator und der Fractal Adaptive Moving Average (FrAMA) gegenseitig ergänzen können, ist es wichtig, zu verstehen, was jeder Indikator misst. Darüber hinaus könnte es jedoch sinnvoll sein, die Verwendung von vektorisierten binären Mustern als zusätzliche Kontrolle oder Filter für unsere Indikatorsignale zu nutzen. 

Betrachten wir jedoch zunächst den FrAMA, so handelt es sich um einen gleitenden Durchschnitt, der seine Empfindlichkeit in Abhängigkeit von der fraktalen Dimension der Kursbewegungen anpasst. Sein Ziel ist es wohl, in trendigen Märkten glatter zu werden und in unruhigen Märkten oder in „fraktalartigen“ Preissituationen besser zu reagieren. Seine Formel lautet wie folgt:

f1

Wann:

f2

und:

wobei:

  • P(t) der aktuelle Kurs (in der Regel der Schlusskurs) ist,
  • D die fraktale Dimension, ein Maß für die Marktrauhigkeit, ist.
  • N1, N2 ​sind die Preisspannen über aufeinanderfolgende Segmente innerhalb des FrAMA-Rückblickfensters.

In Fällen, in denen die Märkte ruhiger und direktionaler werden, tendiert der D-Wert gegen eins. Dies wiederum führt zu einem größeren Alpha. Eine weitere positive Korrelation besteht darin, dass sich der FrAMA wie ein schneller gleitender Durchschnitt eng am Kurs orientiert. Wenn der Markt jedoch chaotischer ist oder sich in einer Bandbreite bewegt, tendiert D gegen 2. Dadurch wird der FrAMA glatter oder flacher, da er dann dazu dient, dieses Rauschen herauszufiltern. In der nutzerdefinierten Signalklasse, die wir im Folgenden übernehmen, verhält sich das FrAMA daher wie ein kontextabhängiges Trend-Rücksicherung. Sie passt ihre Steigung je nach Volatilität und Preisstruktur dynamisch an.

Der Stochastik-Oszillator, der von George Lane entwickelt wurde, ist einer der ältesten und vielleicht am häufigsten verwendeten Momentum-Indikatoren. Er quantifiziert die Position des aktuellen Schlusskurses im Verhältnis zur Hoch-Tief-Spanne über einen festgelegten Zeitraum. Dieser Indikator besteht aus zwei Puffern mit den Bezeichnungen K und D. Ihre Formeln lauten wie folgt:

f4

wobei:

  • Ct = aktueller Schlusskurs,
  • Hn = höchster Stand in den letzten n Perioden,
  • Ln = niedrigster Stand in den letzten n Zeiträumen,
  • SMAm = einfacher gleitender Durchschnitt von %K über m Perioden.

Innerhalb der eingebauten Indikatorbibliothek von MQL5 ist die entsprechende Klasse für diesen Indikator erwartungsgemäß CiStochastic. Die Zuordnung zu diesen beiden Puffern, K und D, kann von der Main-Funktion und der Signal-Funktion aus einer Instanz dieser Klasse erhalten werden. Bekanntlich bewegt sich der K-Wert zwischen 0 und 100, sodass ein Vermögenswert als überverkauft eingestuft wird, wenn er unter der 20er-Marke liegt, während ein Wert über der 80er-Marke auf überkaufte Regionen hinweisen könnte. Die Kreuzungen von K und D sowie ihre Muster in und um diese Schwellen sind wichtig, um Umkehrungen und Fortsetzungen zu erkennen. In diesem Artikel bilden diese die Grundlage für unsere binären Darstellungen, die uns als Signal dienen. 

Nachdem wir unsere beiden Indikatoren definiert haben, können wir nun ihre „Verschmelzung“ betrachten. Die Kombination von FrAMA und der Stochastik bildet eine zweidimensionale Logik, bei der FrAMA die Trendrichtung erkennt und ihre Glätte anpasst, sodass wir eine dynamische Metrik für die Tendenz des Marktes erhalten, ob nach oben, unten oder flach; und die Stochastik identifiziert jede Erschöpfung des Momentums oder geeignete Timing-Einträge in Bezug auf eine vorherrschende Preisspanne. Die Verwendung beider Methoden gleicht die Schwächen der jeweils anderen aus.  Der FrAMA vermeidet trendloses Rauschen durch verfrühte Signale, während die Stochastik hilft, späte Einstiege bei Umkehrungen zu vermeiden. Im Folgenden finden Sie eine Auflistung der zusätzlichen nutzerdefinierten Funktionen, die für diese Indikatorpaarung eingeführt wurden.

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool CSignalFrAMA_Stochastic::FlatFrama(int ind)
{  const double tol = m_pips * m_symbol.Point();
   for(int i = ind; i < m_past+ind; i++)
      if(MathAbs(FrAMASlope(i)) > tol) return false;
   return true;
}

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool CSignalFrAMA_Stochastic::FarAboveFrama(const int ind, double mult)
{  double dist = MathAbs(Close(ind) - FrAMA(ind));
   double atr  = High(ind + 1) - Low(ind + 1);
   if(atr <= 0.0) return false;
   //printf(__FUNCTION__ + " dist & atr are: %.5f, & %.5f ", dist, atr);
   return (Close(ind) > FrAMA(ind) && dist > mult * m_symbol.Point() * atr / 4.0);
}
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool CSignalFrAMA_Stochastic::FarBelowFrama(const int ind, double mult)
{  const double dist = MathAbs(Close(ind) - FrAMA(ind));
   const double atr  = High(ind + 1) - Low(ind + 1);
   if(atr <= 0.0) return false;
   //printf(__FUNCTION__);
   return (Close(ind) < FrAMA(ind) && dist > mult * m_symbol.Point() * atr / 4.0);
}
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool CSignalFrAMA_Stochastic::BullishDivergence()
{  int a = -1, b = -1;
   for(int i = 2; i <= m_past + 2; i++)
   {  if(Low(i) < Low(i - 1) && Low(i) < Low(i + 1))
      {  if(a == -1) a = i;
         else
         {  b = i;
            break;
         }
      }
   }
   if(a == -1 || b == -1) return false;
   bool priceLL = (Low(a) < Low(b));
   bool oscHL   = (K(a) > K(b));
   return (priceLL && oscHL);
}
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool CSignalFrAMA_Stochastic::BearishDivergence()
{  int a = -1, b = -1;
   for(int i = 2; i <= m_past + 2; i++)
   {  if(High(i) > High(i - 1) && High(i) > High(i + 1))
      {  if(a == -1) a = i;
         else
         {  b = i;
            break;
         }
      }
   }
   if(a == -1 || b == -1) return false;
   bool priceHH = (High(a) > High(b));
   bool oscLH   = (K(a) < K(b));
   return (priceHH && oscLH);
}
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool CSignalFrAMA_Stochastic::FramaTurningUp()
{  return (FrAMASlope(X() + 3) < 0 && FrAMASlope(X() + 2) < 0 && FrAMASlope(X() + 1) > 0 && FrAMASlope(X()) > 0);
}
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool CSignalFrAMA_Stochastic::FramaTurningDown()
{  return (FrAMASlope(X() + 3) > 0 && FrAMASlope(X() + 2) > 0 && FrAMASlope(X() + 1) < 0 && FrAMASlope(X()) < 0);
}

Für neue Leser: Um eine binäre Darstellung zu erhalten, wird die Bedingung jedes Indikators mit Hilfe eines booleschen wahr oder falsch Rahmens überprüft. So wird z. B. geprüft, ob eine Steigung vorhanden ist, ob eine Bereichsbedingung vorliegt usw. Jedes dieser Ergebnisse wird dann zu einem 1-Bit-Signal, das bei der Aggregation einen binären Vektor darstellt, dessen 1en das Vorhandensein eines Musters bedeuten und die 0en das Fehlen des Musters. Im Wesentlichen digitalisiert diese Methode das analoge Kursgeschehen und ermöglicht es so einem Expert Advisor, den Markt als eine Reihe boolescher Vektoren zu lesen. Diese Vektoren sind auch rechnerisch leicht, sodass mehr als eine Musterprüfung pro neuem Preisbalken möglich ist, was die CPU-Belastung minimiert.


Der Testrahmen

Unser Ziel beim Testen der Signalmuster des Stochastik-Oszillators und des FrAMA ist nicht auf die Backtests einer einzelnen Strategie beschränkt, sondern vielmehr darauf, besser zu verstehen, wie sich zehn einzigartige Indikatormuster in unterschiedlichen Marktsituationen verhalten. Um statistische Konsistenz zu gewährleisten, werden alle unsere Tests mit denselben Einstellungen für die Input-Optimierung durchgeführt, wobei der größte Vorbehalt darin besteht, dass bestimmte Asset-Typen mit unterschiedlichen Marktarchetypen getestet werden.

Alle zehn Signalmuster werden auf dem 4-Stunden-Zeitrahmen getestet, um einen Kompromiss zwischen der Rauschunterdrückung durch eine nicht zu geringe Größe und einer ausreichenden Handelsfrequenz durch die geringe Größe zu finden. Wie oben erwähnt, wird jedes Muster vom 1. Juli 2023 bis zum 1. Juli 2024 trainiert/optimiert, während die Vorwärtssuche/Validierung vom 1. Juli 2024 bis zum 1. Juli 2025 durchgeführt wird. Unser geteiltes Format gewährleistet ein ganzes Jahr Training mit der Stichprobe, gefolgt von einem weiteren Jahr Validierung außerhalb der Stichprobe.

Im Optimierungslauf wurden die typischen Open- und Close-Schwellenwerte der nutzerdefinierten Signalklasse, das Limitpreis-Entry-Delta für alle platzierten Trades sowie der Take-Profit eingestellt. Wie bereits in früheren Artikeln beschrieben, stimmen wir uns auch immer auf den Schwellenwert für die Öffnung/Auslösung der einzelnen Signalmuster ab. Was wir zusätzlich einführen, ist die Anpassung des Rückblickzeitraums und der Pips-Schwelle. Der Bitmasken-Parameter „PatternsUsed“ wird ebenfalls manuell für jeden Signalmusterlauf angepasst, wie bereits in früheren Artikeln erläutert.

Um alle binären Muster besser kontextualisieren zu können, wurden die Tests pro Wertpapier nach einem bestimmten Marktarchetyp gruppiert. Die ausgewählten Handelsinstrumente sollten jedes dieser Marktverhaltensweisen am besten demonstrieren. Dies wurde wie folgt tabellarisch dargestellt:

Markttyp Getestete Muster Verwendetes Handelsinstrument Begründung
Trend 0,6 XAUUSD Die Fähigkeit von Gold, sich an den Makrofaktoren auszurichten
Rückkehr zum Mittelwert 1,7 XAUUSD Intraday-Konsolidierungen bei Gold, die auf Momentum-Spitzenwerte hindeuten könnten
Korreliert 2 SPX Starke Korrelationen zwischen den Aktien und Momentum-Anpassungssignale
Entkoppelt 3,9 SPX Divergenz und Entkopplungslogik können in einigen asymmetrischen Sektoren gut funktionieren
Hohe Volatilität 4,8 USDJPY Die Volatilität des Yen kann auf Überschreitungen der Mittellinie und Umkehrmuster hinweisen
Geringe Volatilität 5 USDJPY Schwankungen und flache FrAMA können in engen Volatilitätszyklen häufig vorkommen.

Unsere obige tabellarische Zuordnung soll es ermöglichen, jedes Signalmuster in der „Umgebung zu betrachten, für die es konzeptionell ausgelegt ist“.

Unser Optimierungskriterium war das eingebaute „Komplexitätskriterium“, das so verstanden werden kann, dass es die Robustheit und bessere Verallgemeinerung im Gegensatz zum reinen Gewinn betont. Da wir außerdem jedes Signalmuster als in sich geschlossenen binären Logikblock strukturieren, kann die Kontextrelevanz jedes Musters für den Marktarchetyp des getesteten Wertpapiers besser bejaht oder verneint werden. Entwickler sind daher in der Lage, diesen Rahmen für unabhängige hybride Strategien wiederzuverwenden, indem sie Änderungen mit minimalen Code-Änderungen vornehmen.


Muster-0: Einstellung für Trendbruch

Unser erstes Muster ist darauf ausgelegt, in direktionalen, dynamischen Märkten zu gedeihen. Seine Kernlogik ist auf die adaptive Steigung des FrAMA und die Kreuzungssignale der Stochastik abgestimmt. Wir implementieren es wie folgt in MQL5:

VERKAUF – Der Kurs liegt unter dem FrAMA; die Steigung des FrAMA ist negativ, was auf ein Abwärtsmomentum hindeutet; die %K-Linie des Stochastik kreuzt unter %D, was auf einen Abwärtskreuz hindeutet; der %K-Wert liegt über 80, was bedeutet, dass der Markt überkauft war.

p0_verkaufen

//+------------------------------------------------------------------+
//| Check for Pattern 0.                                             |
//+------------------------------------------------------------------+
bool CSignalFrAMA_Stochastic::IsPattern_0(ENUM_POSITION_TYPE T)
{  if(T == POSITION_TYPE_BUY)
   {  return((Close(X()) > FrAMA(X()) && FrAMASlope(X()) > 0 && CrossUp(K(X()), D(X()), K(X() + 1), D(X() + 1)) && K(X()) < 20) ? true : false);
   }
   else if(T == POSITION_TYPE_SELL)
   {  return((Close(X()) < FrAMA(X()) && FrAMASlope(X()) < 0 && CrossDown(K(X()), D(X()), K(X() + 1), D(X() + 1)) && K(X()) > 80) ? true : false);
   }
   return(false);
}

Das Verkaufssignal, das ein Spiegelbild des Aufwärtssignals ist, sieht vor, dass der Kurs unter dem FrAMA liegt, wobei der FrAMA eine negative Steigung aufweist und der Stochastik einen Abwärts-Crossover mit dem K über 80 hat. Muster-0 verkörpert den Übergang von der Kompression zur Expansion, dem Markenzeichen eines beginnenden Trends. Wir haben uns für den Rohstoff Gold entschieden, weil er häufig zwischen ausgedehnten Richtungswechseln und Konsolidierungsfallen schwankt, die in der Regel von makroökonomischen Faktoren wie Inflationserwartungen und der Politik der Zentralbanken bestimmt werden. Gold wurde gewählt, um die Trendsensitivität von Muster-0 auszunutzen. Die Ergebnisse des Vorwärtstests für Muster-0 sind ebenfalls unten aufgeführt:

r0

Wir sind in der Lage, den Vorwärtstest mit einem gewissen Gewinn zu beenden. Der „Erfolg“ dieses Musters könnte auf zwei wichtige Beobachtungen hindeuten. Erstens hätte die Wahl des getesteten Handelsinstruments angesichts der makroökonomischen Dynamik des XAU als Instrument mit hohem Momentum geeignet sein können. Die Amplitude der Tagesspanne ermöglicht es der Stochastik-Komponente, sich von überverkauften Niveaus zu erholen, ohne dass es zu vorzeitigen Umkehrungen kommt. Zweitens könnte auch hier die Robustheit des Musters ausschlaggebend gewesen sein, da wir ein Paar senkrecht zueinander stehender Messgrößen betrachten – Trendrichtung und Wiederbeschleunigung des Momentums. Jeder der beiden Indikatoren trägt einzigartige Daten zu dem binären Urteil bei, das sich nicht nur beim Training, sondern auch beim Vorwärtsgang erfolgreich durchsetzt.


Muster-1 Rückkehr zum Mittelwert, Umkehr-Haken

Während wir bei Muster-0 nach Ausbrüchen in trendigen Märkten gesucht haben, nehmen wir bei diesem Signalmuster eine etwas entgegengesetzte Haltung ein, indem wir uns auf die Umkehr zum Mittelwert konzentrieren. Wir suchen nach Erschöpfungspunkten, an denen der Preis vorübergehend vom Gleichgewicht abweicht, bevor er wieder einbricht. Bei diesem Muster wird die stochastische Sensibilität bei kurzfristigen Extremen eingesetzt, wobei der FrAMA als dynamische Referenzlinie dient, die dabei hilft, Überschreitungen innerhalb des adaptiven Bereichs zu erkennen.

Muster-1 sollte sich gut für Handelsinstrumente eignen, die stark um eine zentrale Trendlinie oszillieren, wobei häufige Impulsspitzen und -tiefs bei relativ „stabiler“ Volatilität zu verzeichnen sind. Gold kann diese Merkmale aufweisen, insbesondere bei Konsolidierungen nach starken Anstiegen oder Rückgängen. Wir setzen dies in MQL5 wie folgt um:

VERKAUFENDer Kurs liegt über dem FrAMA (überbewerteter Bereich); die %K-Linie ist größer als 85 und damit stark überkauft; die %K-Linie fällt, d.h. sie ist niedriger als vor einem Balken

p1-verkaufen

//+------------------------------------------------------------------+
//| Check for Pattern 1.                                             |
//+------------------------------------------------------------------+
bool CSignalFrAMA_Stochastic::IsPattern_1(ENUM_POSITION_TYPE T)
{  if(T == POSITION_TYPE_BUY)
   {  return((Close(X()) < FrAMA(X()) && K(X()) < 15 && K(X()) > K(X() + 1)) ? true : false);
   }
   else if(T == POSITION_TYPE_SELL)
   {  return((Close(X()) > FrAMA(X()) && K(X()) > 85 && K(X()) < K(X() + 1)) ? true : false);
   }
   return(false);
}

Jede Seite des Handels, die Kauf- und Verkaufssignale, erfassen die erste Umdrehung des K, wenn sie sich in extremen Zonen befinden. Dies geschieht, indem man sich gegen das kurzfristige Verhalten der Menge positioniert. Der FrAMA, der als Filter fungiert, sorgt dafür, dass die Auftragseingänge, die erfolgen, wenn sich der Preis vom Mittelwert entfernt, ständig „angepasst“ werden. Damit sollen falsche Umkehrungen in Trendläufen vermieden werden.

Gold folgt zwar meist einem Trend, kann aber in seinen Konsolidierungsphasen auch für eine Umkehr zum Mittelwert geeignet sein. Er kann in engen, richtungslosen Korridoren oszillieren, insbesondere wenn makroökonomische Katalysatoren pausieren. In diesen Zeiten neigt der FrAMA-Anstieg dazu, sich abzuflachen, was ein adaptives Gleichgewicht darstellt, das auf den „fairen Wert“ hinweist. Wenn die Stochastik gleichzeitig in den extremen Regionen unter 15 oder über 85 festhängt, spiegelt sie die Erschöpfung der spekulativen Positionierung wider, was eine Umkehrmöglichkeit bietet. Die Vorwärtstests schlossen mit einem Gewinn,und ergaben folgenden Bericht.

r1



Muster-2: Korrelierte Trendfortsetzung

Unser drittes Muster wurde entwickelt, um nachhaltige Trendvortsetzungen in Marktumgebungen mit Korrelationen zu erfassen, in denen Vermögenswerte synchronisierte Bewegungen zeigen, die durch gemeinsame makroökonomische Einflüsse angetrieben werden. Dieses Muster macht sich einen robusten FrAMA zunutze, der entweder eine stark positive Steigung bei Käufen oder eine inverse negative Steigung bei Verkäufen aufweisen würde. Dies muss dann mit einer konsistenten Positionierung des Stochastik-Oszillators gepaart werden. Insbesondere müssen K und D über der 50 bleiben, wenn sie sich für eine Kauf-Positionierung entscheiden, oder unterhalb, wenn sie sich für eine Verkaufs-Positionierung entscheiden. Dies soll eine anhaltende Dynamik darstellen. Wir implementieren dies wie folgt in MQL5.

VERKAUFENDie Steigung des FrAMA ist stark negativ, was einen Abwärtstrend bestätigt. In der historischen Rückblickperiode blieben sowohl der Stochastic %K als auch der %D unter 50, was auf eine anhaltende fallende Stimmung hindeutet.

p2-verkaufen

//+------------------------------------------------------------------+
//| Check for Pattern 2.                                             |
//+------------------------------------------------------------------+
bool CSignalFrAMA_Stochastic::IsPattern_2(ENUM_POSITION_TYPE T)
{  const double strong = m_pips * m_symbol.Point();
   bool up   = (FrAMASlope(X()) > strong);
   bool down = (FrAMASlope(X()) < -strong);
   bool over = true, under = true;
   for(int i = 0; i < m_past; i++)
   {  over  &= (K(X() + i) > 50 && D(X() + i) > 50);
      under &= (K(X() + i) < 50 && D(X() + i) < 50);
   }
   if(T == POSITION_TYPE_BUY)
   {  return((up   && over)  ? true : false);
   }
   else if(T == POSITION_TYPE_SELL)
   {  return((down && under) ? true : false);
   }
   return(false);
}

Streng genommen kann jeder Handelsinstrument verwendet werden, um dieses Muster zumindest zu testen, und unsere Verwendung des SPY war in keiner Weise eine strikte Empfehlung. Der Index eignet sich jedoch gut für dieses Muster, da er unter den 10 Mustern, die wir in Betracht ziehen, dasjenige ist, das am stärksten zur Korrelation neigt, und dieser Index neigt dazu, hohe Korrelationen mit den ihn bildenden Aktien aufzuweisen. Die Autokorrelation ist daher in bestimmten Zeiträumen zwangsläufig hoch. Unser Vorwärtstest zeigte, wie unten dargestellt, wenig vielversprechende Ergebnisse.

r2



Muster-3 Entkoppelte Divergenzerfassung

Unser 4. Muster entfernt sich von reinen Richtungsregeln und konzentriert sich stattdessen auf die Entkopplung vom Markt. Dies ist der Fall, wenn Preis und Dynamik nicht mehr synchron sind. Dieses Muster macht sich den strukturellen Kontrast zwischen FrAMA und der Stochastik zunutze, und zwar unter dem Gesichtspunkt einer geglätteten Trenddarstellung bzw. eines kurzfristigen Maßes für die innere Energie. Ziel ist es, Auf- oder Abwärts-Divergenzen zu erkennen, kurz bevor der Kurs ein neues Extrem erreicht, um zu kaufen bzw. zu verkaufen. Diesem Signal müsste dann dem Stochastik-Oszillator folgen, der die anhaltende Dynamik nicht bestätigt, was eine mögliche Erschöpfung bedeutet. Dies soll eine Entkopplung verdeutlichen, insbesondere in Umgebungen, die normalerweise korreliert sind und viele synchronisierte Verhaltensweisen aufweisen. Wir implementieren dies wie folgt in MQL5.

VERKAUFENDer Kurs liegt über dem FrAMA, aber das Momentum ist anderer Meinung; es besteht eine Abwärts-Divergenz; der Kurs erreicht ein höheres Hoch, aber der Stochastic %K erreicht ein niedrigeres Hoch.

p3

//+------------------------------------------------------------------+
//| Check for Pattern 3.                                             |
//+------------------------------------------------------------------+
bool CSignalFrAMA_Stochastic::IsPattern_3(ENUM_POSITION_TYPE T)
{  if(T == POSITION_TYPE_BUY)
   {  return((Close(X()) < FrAMA(X()) && BullishDivergence())  ? true : false);
   }
   else if(T == POSITION_TYPE_SELL)
   {  return((Close(X()) > FrAMA(X()) && BearishDivergence()) ? true : false);
   }
   return(false);
}

Der SPY-Index war für dieses Muster insofern geeignet, als er aufgrund der Synchronisierung zwischen ihm und seinen Basiswerten häufig autokorreliert ist. Diese Konstellation ist daher für eine gelegentliche vorübergehende Entkopplung prädestiniert, wenn sich einige „unvermeidliche“ sektorale Divergenzen ergeben. So kann beispielsweise die Technologiebranche zulegen, während der Energiesektor aufgrund einiger kurzfristiger Themen oder überraschender Schlagzeilen schwächer wird. Diese sektorübergreifenden Divergenzen können bei makroökonomischen Wendepunkten auftreten und deuten häufig auf Divergenzen bei den Indikatoren auf Indexebene hin. In diesem Fall ist die FrAMA die strukturelle „Basislinie“, während die Stochastik ein „kurzfristiger Beschleunigungsmesser“ ist. Wenn die beiden nicht übereinstimmen, ist dies in der Regel eine Vorstufe zur Trendmüdigkeit oder eine Phase der Neugewichtung. Die Ergebnisse des Vorwärtstest für Muster-3 waren wie folgt.

r3

Das günstige Ergebnis von Muster-3 könnte darauf zurückzuführen sein, dass wir nicht den Kursen hinterherlaufen, sondern vielmehr Korrelationsbrüche antizipieren, die in der Regel den Wendepunkten an den Märkten vorausgehen.

 

Muster-4: Hohe Volatilität Überschwingen

Unser fünftes und letztes Muster in diesem Artikel dient dazu, volatilitätsbedingte Extremwerte zu erkennen. Diese treten auf, wenn sich der Kurs weit über seinen adaptiven Mittelwert hinaus ausdehnt, bevor entweder eine Korrektur oder eine Fortsetzung eintritt. Diese Regel kombiniert die adaptive Grundlinie von FrAMA mit einem Distanzfilter. Im Wesentlichen geht es darum, statistisch bedeutsame Abweichungen zu erkennen, die durch eine Volatilitätsausweitung verstärkt werden.

Dieses Muster ist für schnelllebige Märkte gedacht, in denen Überschreitungen an der Tagesordnung sind und Trendausbrüche oft über das Gleichgewicht hinausgehen, bevor sie sich normalisieren. Aus diesem Grund haben wir den USD JPY für dieses Muster ausgewählt. Wir implementieren sie in MQL5 wie folgt.

//+------------------------------------------------------------------+
//| Check for Pattern 4.                                             |
//+------------------------------------------------------------------+
bool CSignalFrAMA_Stochastic::IsPattern_4(ENUM_POSITION_TYPE T)
{  if(T == POSITION_TYPE_BUY)
   {  return((FarAboveFrama(X()) && K(X()) > 60)  ? true : false);
   }
   else if(T == POSITION_TYPE_SELL)
   {  return((FarBelowFrama(X()) && K(X()) < 40) ? true : false);
   }
   return(false);
}

Durch die Verwendung eines dynamischen Abstands als zusätzlichen Hyperparameter, „dist“, wird das Signal nur dann ausgelöst, wenn die Abweichung statistisch signifikant ist. Der Eingangsparameter „mult“ hätte ebenfalls angepasst werden können, er wird jedoch fast als Epsilon oder Nicht-Null-Wert verwendet. Die Leser können einen Blick auf diesen Code werfen, der unten angehängt ist, und sehen, ob die Einstellung dieses Codes die Leistung des Signalmusters sinnvoll beeinflussen würde. 

Zurück zur Wahl von USD JPY: Dieses Devisenpaar neigt, wie wahrscheinlich die meisten Yen-Paare, dazu, seine Volatilität asymmetrisch auszudrücken. Dies wird besonders deutlich, wenn es zu längeren Trendausbrüchen kommt, z. B. wenn es geldpolitische oder Zinsunterschiede zwischen der FED und dem JCB gibt. Auf diese folgen jedoch in der Regel fast gleichwertige Gegenmaßnahmen. Starke Reaktionen sind auch bei Liquiditätsveränderungen innerhalb eines Tages oder bei der Veröffentlichung wichtiger Wirtschaftsnachrichten zu beobachten. All diese Faktoren tragen dazu bei, dass dieses Muster eine hohe Volatilität aufweist. Die Erprobung dieses Musters war auf seinem Weg nach vorn profitabel, wie der folgende Bericht zeigt.

r4

Das Vertrauen von Muster-4 in die Volatilitätsskalierung könnte auf diese günstigen Ergebnisse zurückzuführen sein.


Schlussfolgerung

Für diese Indikatorpaarung haben wir die typischen 10 Muster, wie es bei gepaarten Indikatorsignalen der Fall ist, jedoch haben wir nur 5 für diesen Artikel besprochen. Unser nächster Beitrag wird dort anknüpfen, wo wir heute aufgehört haben. Wie wir gesehen haben, hat die Verschmelzung von FrAMA und dem stochastischen Oszillator in einer nutzerdefinierten Signalklasse jedoch ein gewisses Potenzial für Nützlichkeit außerhalb unserer begrenzten Testfenster gezeigt. Jedes der fünf von uns betrachteten Muster verkörperte ein bestimmtes Verhaltensmuster, das am besten von einem bestimmten Vermögenswert/Wertpapier gezeigt wurde. Wir haben mit XAUUSD, SPX und USDJPY getestet und werden im nächsten Artikel mit diesen Wertpapieren bei unterschiedlichen, aber verwandten Marktmustern fortfahren.


Haftungsausschluss

Dies ist keine finanzielle Beratung. Mit diesen Artikeln soll nicht behauptet werden, dass sie die Märkte verstehen, sondern sie sollen zur Diskussion von Ideen anregen. Dabei geht es nicht darum, einen Gral zu finden, sondern vielmehr darum, die vorhandenen Möglichkeiten auszuloten und hoffentlich aufzuzeigen, wie sie genutzt werden können. Die abschließende Arbeit und wichtige Sorgfalt liegt immer auf Seiten des Lesers, sollte er sich dafür entscheiden, einen Teil des hier vorgestellten Materials zu übernehmen.

Name Beschreibung
WZ-83.mq5 Mit dem Assistenten erstellter Expert Advisor, in dessen Kopfzeile Name und Ort der enthaltenen Dateien aufgeführt sind
SignalWZ_83.mqh Nutzerdefinierte Signalklassendatei für Wizard Assembly
Für neue Leser finden Sie hier eine Anleitung, wie Sie die angehängten Dateien mit dem MQL5-Assistenten bei der Erstellung eines Expert Advisors verwenden können.

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

Beigefügte Dateien |
WZ_83.mq5 (8.5 KB)
SignalWZ_83.mqh (50.52 KB)
Die Übertragung der Trading-Signale in einem universalen Expert Advisor. Die Übertragung der Trading-Signale in einem universalen Expert Advisor.
In diesem Artikel wurden die verschiedenen Möglichkeiten beschrieben, um die Trading-Signale von einem Signalmodul des universalen EAs zum Steuermodul der Positionen und Orders zu übertragen. Es wurden die seriellen und parallelen Interfaces betrachtet.
Bivariate Copulae in MQL5 (Teil 1): Implementierung von Gauß- und Studentische t-Copulae für die Modellierung von Abhängigkeiten Bivariate Copulae in MQL5 (Teil 1): Implementierung von Gauß- und Studentische t-Copulae für die Modellierung von Abhängigkeiten
Dies ist der erste Teil einer Artikelserie, in der die Implementierung von bivariaten Copulae in MQL5 vorgestellt wird. Dieser Artikel enthält Code zur Implementierung der Gauß‘schen und Studentischen t-Copulae. Außerdem werden die Grundlagen der statistischen Copulae und verwandte Themen behandelt. Der Code basiert auf dem Python-Paket Arbitragelab von Hudson und Thames.
Eine alternative Log-datei mit der Verwendung der HTML und CSS Eine alternative Log-datei mit der Verwendung der HTML und CSS
In diesem Artikel werden wir eine sehr einfache, aber leistungsfähige Bibliothek zur Erstellung der HTML-Dateien schreiben, dabei lernen wir auch, wie man eine ihre Darstellung einstellen kann (nach seinem Geschmack) und sehen wir, wie man es leicht in seinem Expert Advisor oder Skript hinzufügen oder verwenden kann.
Entwicklung des Price Action Analysis Toolkit (Teil 44): Aufbau eines VWMA Crossover Signal EA in MQL5 Entwicklung des Price Action Analysis Toolkit (Teil 44): Aufbau eines VWMA Crossover Signal EA in MQL5
In diesem Artikel wird ein VWMA-Crossover-Signal für den MetaTrader 5 vorgestellt, das Händlern helfen soll, potenzielle Aufwärts- und Abwärtsbewegungen zu erkennen, indem es Preisbewegungen mit dem Handelsvolumen kombiniert. Der EA generiert klare Kauf- und Verkaufssignale direkt auf dem Chart, verfügt über ein informatives Panel und lässt sich vollständig an den Nutzer anpassen, was ihn zu einer praktischen Ergänzung Ihrer Handelsstrategie macht.