English
preview
Entwicklung eines Toolkits zur Preisaktionsanalyse (Teil 55): Entwurf eines Overlays der CPI-Minikerzen für Intra-Bar-Druck

Entwicklung eines Toolkits zur Preisaktionsanalyse (Teil 55): Entwurf eines Overlays der CPI-Minikerzen für Intra-Bar-Druck

MetaTrader 5Indikatoren |
17 2
Christian Benjamin
Christian Benjamin

Inhalt


Einführung

Die meisten Händler lernen, Kerzen anhand eines einfachen Farbcodes zu interpretieren: Grün steht für Kaufen, Rot für Verkaufen. In der Praxis verhält sich der Preis jedoch nur selten auf solch binäre Weise. Jede Kerze steht für eine kontinuierliche Verhandlung zwischen Käufern und Verkäufern, und der Schlusskurs spiegelt nur wider, wo dieser Kampf endete, nicht aber, wie stark eine der beiden Seiten während der Bar dominierte. Infolgedessen können zwei Kerzen in Farbe und Größe ähnlich aussehen, aber sehr unterschiedliche Informationen vermitteln: Eine kann entscheidend nahe dem Hoch schließen und damit einen anhaltenden Kaufdruck signalisieren, während eine andere schwach endet, obwohl sie grün ist.

Eine hilfreiche Analogie ist ein Fußballspiel. Das Endergebnis (z. B. 1:0) gibt an, wer gewonnen hat, sagt aber nichts darüber aus, wie das Spiel verlaufen ist. Eine Mannschaft kann mit einem einzigen Tor verlieren, obwohl sie den Ballbesitz kontrolliert, die meiste Zeit des Spiels in der gegnerischen Hälfte verbringt und die besseren Chancen herausspielt. Kerzen funktionieren ähnlich. Die Farbe der Kerze zeigt an, ob der Kurs über oder unter dem Eröffnungswert geschlossen hat, aber sie verdeckt oft, welche Seite den größten Teil der Bewegung innerhalb der Bar kontrolliert hat – und wie stark diese Kontrolle tatsächlich war.

Dieser Artikel stellt die Minikerzen des „Candle Pressure Index“ (Kerzendruckindex) für MetaTrader 5 vor, ein kompaktes Overlay, das auf dem „Closing Location Value“ (CLV, dem Wert am Abschlussort) basiert und diese verborgenen Informationen sichtbar macht. Der Indikator misst, wo der Kurs innerhalb der Spanne von jeder Bar schließt, und stellt das Ergebnis als mittig verankerte „Minikerzen“, kleine, innere Kerzen, dar. Sowohl die Richtung als auch die Größe jeder Minikerze spiegeln den Druck innerhalb der Bar wider, sodass Händler erkennen können, ob Käufe oder Verkäufe dominierten und wie stark diese Dominanz war. Die Kerzen werden in neutrale, moderate und starke Druckzonen eingeteilt, wobei optionale Pfeile druckstarke Bars hervorheben und ereignisbasierte Alarme den Einstieg in starke Zonen oder Änderungen der CPI-Richtung signalisieren.

Durch das Hinzufügen dieser zusätzlichen Informationsebene helfen die Minikerzen von CPI dabei, Situationen zu erkennen, in denen die Kerzenfarbe allein unzureichend ist – z. B. eine Kerze, die leicht rot schließt, aber in der Nähe des oberen Endes ihrer Handelsspanne endet („rot-aber-bullisch“) – und unterscheiden auch zwischen Kerzen, die die gleiche Farbe haben, aber deutlich in der Druckstärke divergieren. Der Indikator ist ausschließlich für Analysezwecke gedacht und führt keine Trades aus. Er visualisiert nur das Kursverhalten und gibt keine Handelsempfehlungen.

In den folgenden Abschnitten wird die dem CPI-Rahmen zugrunde liegende Kerzenanatomie untersucht, die CLV-basierte Formel abgeleitet, die MQL5-Implementierung der Visualisierungs- und Warnlogik detailliert beschrieben und praktische Beispiele mit reproduzierbaren Testverfahren vorgestellt, sodass jeder das Tool in seinen eigenen Preis-Aktions-Workflows bewerten und anpassen kann.


Konzept und Theorie

Bevor der „Candle Pressure Index“ (CPI) und seine Berechnung vorgestellt werden, ist es hilfreich, die grundlegende Struktur einer Kerze zu erläutern. CPI baut direkt auf der Kerzenanatomie auf: Er verwendet die gesamte Bandbreite der Kerze und die Position des Schlusskurses, um abzuschätzen, ob der Markt die Preise in der Nähe des Hochs, in der Nähe des Tiefs oder irgendwo dazwischen akzeptiert.

Eine Kerze fasst alle Handelsaktivitäten über einen bestimmten Zeitraum in komprimierter Form zusammen. Die Farbe der Kerze zeigt an, ob der Schlusskurs über oder unter dem Eröffnungskurs lag, aber die Struktur der Kerze (Bereich, Körper und Dochte) liefert zusätzliche Informationen darüber, wohin sich der Kurs bewegte, wo er zurückgewiesen wurde und wo er sich schließlich niederließ. CPI konzentriert sich auf diese innere Struktur und nicht nur auf die Kerzenfarbe.

Auffrischung der Kerzenanatomie

Eine Kerze wird durch vier wichtige Preispunkte definiert:

  • Eröffnung (Open) – der Preis, zu dem die Kerze beginnt
  • Hoch (High) – der höchste gehandelte Preis während des Intervalls
  • Tief (Low) – der niedrigste gehandelte Preis während des Intervalls
  • Schlusskurs (Close) – der Preis, zu dem die Kerze endet

Aus diesen Werten leiten wir drei Strukturkomponenten ab:

Range

Die Range stellt den Gesamtabstand zwischen dem Hoch und dem Tief dar:

  • Range = Hoch – Tief

Sie definiert den gesamten Bereich, in dem Käufer und Verkäufer während der Kerze interagierten.

Body

Der Body ist der Abstand zwischen dem Öffnen und dem Schließen. Die Farbe der Kerze ergibt sich aus dieser Beziehung:

  • Schlusskurs über der Eröffnung – bullisch (grün)
  • Schlusskurs unter der Eröffnung – bärisch (rot)

Der Körper spiegelt das Ergebnis der Kerze wider, beschreibt aber nicht, wo der Abschluss innerhalb der gesamten Spanne stattfand.

Dochte (Schatten)

Der obere und der untere Docht (Wick) zeigen die abgelehnten Preise an:

  • Der obere Docht markiert Preise, die erreicht wurden, sich aber bis zum Handelsschluss nicht halten konnten.
  • Der untere Docht markiert Kurse, die erreicht wurden, sich aber bis zum Handelsschluss nicht halten konnten.

Dochte enthalten oft wichtige Informationen über Abstoßung und Absorption – Details, die die Kerzenfarbe allein nicht verrät.

Von der Kerzenstruktur zum CPI

Der Candle Pressure Index (CPI) ist ein normalisierter Wert im Bereich [-1, +1], der misst, wo eine Kerze innerhalb ihrer Hoch-Tief-Spanne schließt. Er zeigt bullischen Druck an, wenn der Schluss nahe dem Hoch liegt, und bärischen Druck, wenn der Schluss nahe dem Tief liegt. Die Kerzenfarbe zeigt zwar an, ob der Kurs über oder unter dem Eröffnungswert geschlossen hat, gibt aber keinen Aufschluss darüber, ob der Schlusskurs in der Nähe des Hochs, in der Nähe des Tiefs oder irgendwo dazwischen lag. Der „Candle Pressure Index“ (CPI) geht auf diese Einschränkung ein, indem er die Schlussposition innerhalb der Kerzenspanne misst.

Abschlussort in der Range

Konzeptionell:

  • Ein Schlusskurs in der Nähe des Hochs deutet auf anhaltenden Kaufdruck hin.
  • Ein Schlusskurs in der Nähe des Tiefs deutet auf anhaltenden Verkaufsdruck hin.
  • Ein Abschluss in der Nähe der Mitte deutet auf ein Marktgleichgewicht oder eine Absorption hin.

Zur Quantifizierung dieses Konzepts verwendet CPI die Formel des Closing Location Value (CLV):

CPI-Wertebereich

Diese Formel normalisiert das Ergebnis innerhalb einer festen Skala:

  • +1 – Schließen nahe des Hochs (maximaler Kaufdruck)
  • 0 – Schließen in der Mitte (ausgeglichener Druck)
  • -1 – Schließen nahe des Tiefs (maximaler Verkaufsdruck)

Die Normalisierung ermöglicht einen konsistenten Vergleich der VPI-Werte über verschiedene Instrumente und Zeiträume hinweg.

  • Grenzfall: Hoch = Tief

Wenn das Hoch gleich dem Tief ist, hat die Kerze keine Range. In solchen Fällen ist der VPI undefiniert und wird als neutral (0) behandelt. Dadurch wird eine Division durch Null vermieden und das Fehlen eines gerichteten Drucks angemessen berücksichtigt.

Praktische Auslegung (Szenarien)

Der CPI ist am aussagekräftigsten, wenn er auf das tatsächliche Kerzenverhalten angewendet wird. Die folgenden Szenarien veranschaulichen, wie CPI einen zusätzlichen Einblick bietet, der über das hinausgeht, was durch die Kerzenfarbe allein vermittelt wird.

Rote Kerze mit stark bullischem CPI („Rot-aber-bullisch“)

Eine Kerze kann leicht unter ihrem Eröffnungswert (rot) schließen, aber immer noch in der Nähe des oberen Endes ihres Bereichs enden. Dies deutet darauf hin, dass die Verkäufer die Kerze zwar für sich entscheiden konnten, die Käufer jedoch den größten Teil der Bewegung innerhalb der Bar dominierten. Der CPI fängt dies ein, indem er trotz der roten Kerze einen positiven, oft starken Wert liefert.

Grüne Kerze mit rückläufigem CPI („Grün-aber-bärisch“)

Eine Kerze kann über ihrem Eröffnungswert (grün) schließen, jedoch in der Nähe des unteren Teils ihres Bereichs enden. Dies deutet darauf hin, dass die Käufer zwar den Handelsschluss technisch absicherten, die Verkäufer jedoch während der gesamten Sitzung Druck ausübten. Der CPI spiegelt diese Schwäche durch einen niedrigen oder sogar negativen Wert wider, trotz der grünen Kerze.

Beispiel für einen neutralen CPI

Wenn der Preis in der Nähe des Mittelpunkts der Spanne schließt, nähert sich der VPI dem Nullpunkt. Dies spiegelt eine ausgewogene Beteiligung wider, bei der weder Käufer noch Verkäufer einen dominanten Druck ausübten, unabhängig von der Farbe der Kerze.

Warum das wichtig ist

  • Die traditionelle Kerzenanalyse betont das Ergebnis.
  • CPI setzt auf Druck und Dominanz.

Durch die Kombination von Kerzenanatomie und Schließungsort ermöglicht CPI eine Bewertung:

  • Richtung – wer dominierte die Sitzung
  • Stärke – wie stark sie dominieren


Design des Indikators

Der Indikator bietet eine kompakte CPI-Visualisierung auf dem Hauptchart, ohne die ursprünglichen Kurskerzen zu verändern. Der CPI wird pro Bar mit einer kleinen, kerzenähnlichen Markierung, optionalen Pfeilen für die starke Zone und farbcodierten Zonen für eine schnelle Interpretation angezeigt.

Regeln für die Visualisierung

  • Nur geschlossene Kerzen: Der VPI wird ausschließlich für Bars mit i ≥ 1 berechnet. Bar 0 (die sich gerade bildende Bar) wird ausgeschlossen, um instabile Werte und wiederholte Warnbedingungen zu vermeiden.
  • Verankerung an der Mitte: Jede Markierung befindet sich in der Mitte der Bar.

Diese Positionierung stellt sicher, dass der Marker visuell unabhängig vom Hoch- und Tiefpunkt der Bar bleibt.

  • Höhe proportional zu |CPI| (beschränkt): Die Höhe der Markierung nimmt mit dem absoluten Wert des CPI zu und wird innerhalb des Intervalls MinMarkerPoints, MaxMarkerPoints (in Punkten) begrenzt, um die Lesbarkeit über verschiedene Symbole und Volatilitätsregime hinweg zu gewährleisten.

Zonen und Farben

Zwei Schwellenwerte definieren fünf CPI-Zonen:

  • StrongThreshold (z. B. 0,60)
  • MildThreshold (z. B. 0,20)

Definierte Zonen:

  • Starkes Kaufen: CPI ≥ +StrongThreshold
  • Moderates Kaufen: +MildThreshold ≤ CPI < +StrongThreshold
  • Neutral: -MildThreshold < CPI < +MildThreshold
  • Moderates Verkaufen: -StrongThreshold < CPI ≤ -MildThreshold
  • Starkes Verkaufen: CPI ≤ -StrongThreshold

Jede Zone ist zur schnellen und intuitiven Erkennung mit einer eigenen Farbe versehen.

Strong Arrows (optional)

Wenn diese Option aktiviert ist, werden die Pfeile nur für Kerzen innerhalb starker Zonen gezeichnet:

Starker Kaufpfeil: unterhalb des Tiefs eingezeichnet.

  • Tief – OffsetPoints × Point

Starker Verkaufspfeil: über dem Hoch eingezeichnet.

  • Hoch + OffsetPunkte × Point

Der OffsetPoints-Wert stellt sicher, dass sich der Pfeil nicht mit der Preiskerze oder der Mini-Marke überschneidet.

Abbildung unten – Visualisierung der CPI-Minikerzen

Die CPI-Werte werden als kompakte, mittig verankerte Minikerzen auf jedem geschlossenen Bars angezeigt. Die Richtung der Markierung zeigt den Kauf- oder Verkaufsdruck an, die Höhe der Markierung spiegelt die Stärke des Drucks wider, und die Pfeile markieren starke VPI-Zonen. Die Farbe der Kerze und der Druck des CPI können sich unterscheiden, was die Dynamik innerhalb der Bar verdeutlicht, die aus dem Preis allein nicht ersichtlich ist.


Warnungen und Ereignislogik

Das Warnsystem basiert auf einem einfachen Prinzip: Benachrichtigung bei Veränderung und nicht bei Fortdauer. CPI-Werte können mehrere aufeinanderfolgende Bars lang in derselben Druckzone verbleiben, und die wiederholte Ausgabe von Warnmeldungen bei jeder Kerze führt zu Rauschen, ohne den praktischen Wert zu erhöhen. Deswegen werden Warnmeldungen nur erzeugt, wenn CPI zwischen definierten Zuständen wechselt, und nur bei geschlossenen Bars. Jedem geschlossenen Bars wird auf der Grundlage der konfigurierten Schwellenwerte ein diskreter CPI-Status zugewiesen: starkes Kaufen, moderates Kaufen, neutral, moderates und starkes Verkaufen. Anstatt auf rohe CPI-Werte zu reagieren, vergleicht die Warnlogik den aktuellen Zustand mit dem vorherigen Zustand und löst nur dann Ereignisse aus, wenn ein sinnvoller Übergang stattfindet.

Das wichtigste Alarmereignis ist der Eintritt in eine Zone mit starkem Druck. Dies ist der Fall, wenn der Verbraucherpreisindex von neutral oder moderat in ein starkes Kaufen oder starkes Verkaufen umschlägt. Da dies eine eindeutige Veränderung des Drucks im Nahbereich widerspiegelt, ist es die selektivste und typischerweise die informativste Warnung. Optionale Warnmeldungen sind für das Verlassen der Gefahrenzone und den Vorzeichenwechsel von CPI verfügbar. Das Verlassen einer starken Zone deutet auf einen nachlassenden Richtungsdruck hin, während ein Vorzeichenwechsel eine Änderung der Richtungsvorgabe erfasst, die innerhalb einer moderaten oder neutralen Zone auftreten kann. Da Vorzeichenwechsel häufiger vorkommen können, werden sie von den Warnmeldungen für die starke Zone getrennt und können auf Wunsch deaktiviert werden.

Um Doppelungen zu vermeiden, werden alle Ereignisse einmal pro neu geschlossenem Bar ausgewertet, sodass es höchstens einen Alarm pro Bar gibt. Die gleiche Ereignislogik wird auf alle Benachrichtigungskanäle angewendet, um ein einheitliches Verhalten unabhängig von der Übermittlungsmethode zu gewährleisten.


MQL5-Implementierung

In diesem Abschnitt wird beschrieben, wie das Konzept der CPI-Minikerzen in MetaTrader 5 implementiert ist, wobei der Schwerpunkt auf dem Rendering, dem Berechnungsablauf und der Handhabung von Alarmen liegt. Besonderer Wert wird auf deterministisches Verhalten, eine Logik, die sich nicht wiederholt, und visuelle Klarheit gelegt.

Rendering-Ansatz (Plots und Puffer)

Der Indikator wird direkt im Hauptfenster des Charts angezeigt und verwendet drei Plots, die jeweils eine bestimmte visuelle Funktion erfüllen. Der CPI wird mit kompakten, kerzenartigen Markern angezeigt, die den Preis überlagern, ohne die ursprünglichen Marktkerzen zu verändern. Dieses Design bewahrt die traditionelle Preisaktion und ergänzt sie mit Informationen über den Druck innerhalb der Bar.

Die primäre Visualisierung erfolgt durch die erste Darstellung, die den Zeichenmodus DRAW_COLOR_CANDLES verwendet, um CPI-Minikerzen darzustellen. Da dieser Modus eine kerzenartige Eingabe erfordert, wird die Darstellung durch fünf Puffer unterstützt: synthetische Werte für Open, High, Low und Close, die die Geometrie jedes CPI-Markers definieren, sowie einen Farbindexpuffer, der eine aus einer Farbpalette mit fünf vordefinierten Farben auswählt. Diese synthetischen OHLC-Werte werden nicht aus tatsächlichen Marktdaten abgeleitet, sondern aus der CPI-Berechnung konstruiert, indem der Marker auf den Kerzenmittelpunkt zentriert und seine Höhe entsprechend der Druckstärke skaliert wird. Der Farbindexpuffer ordnet jeden Marker einer Zone zu – starkes Kaufen, moderates Kaufen, neutral, moderates oder starkes Verkaufen –, wodurch sowohl die Richtung als auch die Intensität visuell dargestellt werden können.

Zwei zusätzliche Plots werden verwendet, um starke CPI-Ereignisse anzuzeigen, ohne die Minikerzenschicht zu überladen. Das zweite Plot ist ein DRAW_ARROW-Plot für stark steigende CPI-Bars, und das dritte Plot ist ein separates DRAW_ARROW-Plot für stark fallende Bars. Die getrennte Darstellung von Kauf- und Verkaufspfeilen ermöglicht eine unabhängige Gestaltung und stellt sicher, dass auf jede Bar nur der entsprechende Pfeil erscheint. Durch die Trennung von kontinuierlicher Druckvisualisierung (Minikerzen) und diskreten Ereignismarkern (Pfeile) bleibt die Rendering-Logik klar, deterministisch und visuell ausgewogen.

#property indicator_chart_window
#property indicator_plots 3
#property indicator_buffers 7

#property indicator_label1  "CPI MiniCandles"
#property indicator_type1   DRAW_COLOR_CANDLES
#property indicator_color1  clrForestGreen, clrSeaGreen, clrSilver, clrTomato, clrFireBrick
#property indicator_width1  2

#property indicator_label2  "CPI Strong Buy"
#property indicator_type2   DRAW_ARROW
#property indicator_color2  clrForestGreen

#property indicator_label3  "CPI Strong Sell"
#property indicator_type3   DRAW_ARROW
#property indicator_color3  clrFireBrick

double BufOpen[], BufHigh[], BufLow[], BufClose[], BufColorIndex[];
double BufBuyArrow[], BufSellArrow[];

Eingaben (visuelle Größenbestimmung, Zonen, Pfeile, Warnungen)

Die Nutzereingaben sind nach Funktionskategorien gruppiert, um eine intuitive Konfigurationsoberfläche zu erhalten und visuelle Belange von analytischer Logik zu trennen. Visuelle Parameter steuern die Skalierung und Beschränkungen der CPI-Minikerzen (in Punkten) und stellen sicher, dass die Marker bei verschiedenen Instrumenten und Volatilitätsregimen lesbar bleiben. Eine bereichsbasierte Rauschunterdrückung (InpMinRangePoints) unterdrückt die CPI-Berechnung bei Kerzen mit einer minimalen Range, bei denen der Intra-Bar-Druck wenig aussagekräftig ist. Dies trägt dazu bei, falsch-positive und minderwertige Signale zu reduzieren.

Zonenschwellenwerte definieren, wie CPI-Werte in moderate und starke Druckzustände eingeteilt werden, und bilden die Grundlage für die Farbzuweisung und die Erzeugung von Warnmeldungen. Pfeilmarkierungen und Warnmeldungen sind als optionale Funktionen implementiert. Sie können unabhängig voneinander aktiviert oder deaktiviert werden, sodass der Nutzer die visuelle Ausgabe und das Benachrichtigungsverhalten des Indikators anpassen kann, ohne die zugrunde liegende CPI-Berechnung zu verändern.

input double InpMarkerScale        = 0.25;
input int    InpMinMarkerPoints    = 2;
input int    InpMaxMarkerPoints    = 200;
input int    InpMinRangePoints     = 5;
input bool   InpHideNeutralMarkers = false;
input bool   InpShowLatestInfo     = true;

input double InpStrongThreshold    = 0.60;
input double InpMildThreshold      = 0.20;

input bool InpShowStrongArrows     = true;
input int  InpArrowOffsetPoints    = 10;
input int  InpArrowCodeBuy         = 233;
input int  InpArrowCodeSell        = 234;

input bool   InpEnableAlerts       = true;
input bool   InpAlertOnExit        = false;
input bool   InpAlertOnSignFlip    = true;
input bool   InpPopupAlert         = true;
input bool   InpSoundAlert         = false;
input string InpSoundFile          = "alert.wav";
input bool   InpPushAlert          = false;
input bool   InpEmailAlert         = false;

CPI-Formel und Hilfsprogramme

Der CPI wird anhand einer Normalisierung im Stil des CLV (Closing Location Value) berechnet, die misst, wo der Schlusskurs im Verhältnis zum gesamten Kerzenbereich liegt. Dies ergibt einen begrenzten Wert im Intervall [-1, +1] für alle Kerzen mit einem Bereich ungleich Null, sodass die Druckstärke über verschiedene Symbole und Zeiträume hinweg konsistent verglichen werden kann. In Fällen, in denen eine Kerze keine Range hat, d. h., wenn Hoch gleich Tief ist, wird der CPI-Wert als neutral (0,0) behandelt. Auf diese Weise wird sowohl eine Division durch Null vermieden als auch das Fehlen eines gerichteten Drucks korrekt wiedergegeben.

Zusätzlich zur CPI-Berechnung wird während des Renderings eine kleine Beschränkungsfunktion verwendet, um die Höhe der CPI-Minikerzen innerhalb der nutzerdefinierten Mindest- und Höchstwerte zu begrenzen. Dadurch wird sichergestellt, dass die Markierungen sichtbar bleiben, aber nicht visuell dominieren, sodass die Übersichtlichkeit des Charts auch bei unterschiedlichen Volatilitätsbedingungen erhalten bleibt.

double ClampVal(const double v, const double lo, const double hi)
{
   if(v < lo) return lo;
   if(v > hi) return hi;
   return v;
}

double CalcCPI(const double high, const double low, const double close)
{
   double range = high - low;
   if(range <= 0.0)
      return 0.0;
   return (2.0*close - high - low) / range;
}

Zonenklassifizierung und Farbkartierung

CPI-Minikerzen werden in fünf diskrete visuelle Zonen eingeteilt, um die Interpretation zu vereinfachen und gleichzeitig sowohl die Richtung als auch die Stärke des Innendrucks zu erhalten. Diese Zonen werden durch eine Enumeration implementiert, deren numerische Reihenfolge absichtlich an die Reihenfolge der in indicator_color1 angegebenen Farben angepasst ist. Diese Ausrichtung ist von entscheidender Bedeutung, da die Darstellung DRAW_COLOR_CANDLES die Farben nach Index und nicht nach Namen auswählt. Eine Hilfsfunktion, ColorFromCPI(), ordnet jeden berechneten CPI-Wert dem entsprechenden Palettenindex zu, basierend auf den konfigurierten Schwellenwerten für moderat (mild) und stark (strong). Dadurch wird sichergestellt, dass jede Minikerze in der richtigen Farbe dargestellt wird.

Parallel dazu wandelt die Funktion ZoneNameFromCPI() denselben CPI-Wert in eine für den Menschen lesbare Bezeichnung um, die für Informationsausgaben wie Status- oder Tooltip-Text auf dem Chart verwendet wird. Da sowohl die visuelle Einfärbung als auch die textliche Klassifizierung von derselben Logik abgeleitet werden, gewährleistet die Implementierung die Konsistenz zwischen dem, was auf dem Chart angezeigt wird, und dem, was dem Nutzer mitgeteilt wird.

enum CPIColorIndex
{
   IDX_STRONG_BUY = 0,
   IDX_MILD_BUY   = 1,
   IDX_NEUTRAL    = 2,
   IDX_MILD_SELL  = 3,
   IDX_STRONG_SELL= 4
};

int ColorFromCPI(const double cpi)
{
   double a = MathAbs(cpi);

   if(a < InpMildThreshold)
      return IDX_NEUTRAL;

   if(cpi >= 0.0)
   {
      if(a >= InpStrongThreshold) return IDX_STRONG_BUY;
      return IDX_MILD_BUY;
   }
   else
   {
      if(a >= InpStrongThreshold) return IDX_STRONG_SELL;
      return IDX_MILD_SELL;
   }
}

string ZoneNameFromCPI(const double cpi)
{
   double a = MathAbs(cpi);
   if(a < InpMildThreshold) return "NEUTRAL";
   if(cpi >= 0.0)
   {
      if(a >= InpStrongThreshold) return "STRONG BUY";
      return "MILD BUY";
   }
   else
   {
      if(a >= InpStrongThreshold) return "STRONG SELL";
      return "MILD SELL";
   }
}

Verlassen des starken Status (für transaktionsbasierte Warnmeldungen)

Für die Bearbeitung von Warnmeldungen werden die CPI-Werte weiter auf eine vereinfachte Darstellung des starken Zustands reduziert. Anstatt die vollständige Fünf-Zonen-Klassifizierung zu bewerten, ordnet der Code den CPI in drei diskrete Zustände ein:

  • +1 für starken Kaufdruck
  • -1 für starken Verkaufsdruck
  • 0 für alle nicht starken Bedingungen (moderat oder neutral)

Diese Abstraktion ermöglicht es der Warnlogik, sich ausschließlich auf bedeutsame Dominanzübergänge zu konzentrieren und geringfügige Schwankungen, die keine Benachrichtigung rechtfertigen, zu ignorieren. Durch den Vergleich des aktuellen starken Zustands mit dem vorherigen kann das System mit minimaler Verzweigungslogik Ein- und Ausgänge in der starken Zone erkennen. Dieser Ansatz verhindert auch wiederholte Warnmeldungen, wenn CPI über mehrere aufeinanderfolgende Kerzen hinweg im gleichen starken Zustand bleibt, und stellt sicher, dass Benachrichtigungen nur dann ausgelöst werden, wenn ein echter Übergang stattfindet.

int StrongStateFromCPI(const double cpi)
{
   if(cpi >=  InpStrongThreshold) return +1;
   if(cpi <= -InpStrongThreshold) return -1;
   return 0;
}

Alert Routing (Zustellungskanäle)

Alle Alarmereignisse – einschließlich des Eintritts in die starken Zone, des Austritts aus der starke Zone und des Vorzeichenwechsels von CPI – werden über eine zentrale Alarmverarbeitungsfunktion weitergeleitet. Dieses Design gewährleistet ein konsistentes Verhalten über alle unterstützten Benachrichtigungskanäle, einschließlich Terminal-Popups, akustischen Warnungen, Push-Benachrichtigungen und E-Mail. Jede Übermittlungsmethode wird über ein eigenes Eingabe-Flag gesteuert, sodass die Nutzer bestimmte Kanäle aktivieren oder deaktivieren können, ohne die zugrunde liegende Warnlogik zu ändern. Durch diese Trennung bleibt die Erkennung von Warnmeldungen deterministisch, während die Benachrichtigungseinstellungen flexibel sind.

void FireAlert(const string msg)
{
   if(!InpEnableAlerts) return;

   if(InpPopupAlert) Alert(msg);
   if(InpSoundAlert) PlaySound(InpSoundFile);
   if(InpPushAlert)  SendNotification(msg);
   if(InpEmailAlert) SendMail("CPI Alert", msg);
}

Initialisierung (OnInit): Pufferbindung, Pfeile, Zeitreihenmodus

Während der Initialisierung bindet die Funktion OnInit() alle Indikatorpuffer in der erforderlichen Reihenfolge an ihre jeweiligen Plots. Dazu gehören die Verknüpfung der synthetischen Puffer für Open, High, Low, Close und Farbindex mit dem DRAW_COLOR_CANDLES-Plot sowie die Verknüpfung von Pfeilpuffern mit ihren jeweiligen DRAW_ARROW-Plots. In diesem Stadium werden Wingdings-Pfeilcodes zugewiesen, und leere Werte werden so konfiguriert, dass Pfeile ausgeblendet bleiben, wenn sie nicht anwendbar sind. Alle Puffer werden explizit in den Zeitreihenmodus gesetzt, um sicherzustellen, dass der Index 0 der jüngsten Bar entspricht und korrekt mit den an OnCalculate() übergebenen Preisarrays ausgerichtet ist.

int OnInit()
{
   SetIndexBuffer(0, BufOpen,       INDICATOR_DATA);
   SetIndexBuffer(1, BufHigh,       INDICATOR_DATA);
   SetIndexBuffer(2, BufLow,        INDICATOR_DATA);
   SetIndexBuffer(3, BufClose,      INDICATOR_DATA);
   SetIndexBuffer(4, BufColorIndex, INDICATOR_COLOR_INDEX);

   PlotIndexSetInteger(0, PLOT_COLOR_INDEXES, 5);

   SetIndexBuffer(5, BufBuyArrow, INDICATOR_DATA);
   PlotIndexSetInteger(1, PLOT_ARROW, InpArrowCodeBuy);
   PlotIndexSetDouble(1, PLOT_EMPTY_VALUE, EMPTY_VALUE);

   SetIndexBuffer(6, BufSellArrow, INDICATOR_DATA);
   PlotIndexSetInteger(2, PLOT_ARROW, InpArrowCodeSell);
   PlotIndexSetDouble(2, PLOT_EMPTY_VALUE, EMPTY_VALUE);

   IndicatorSetString(INDICATOR_SHORTNAME, "CPI MiniCandles (CLV) + Strong Arrows");

   ArraySetAsSeries(BufOpen, true);
   ArraySetAsSeries(BufHigh, true);
   ArraySetAsSeries(BufLow, true);
   ArraySetAsSeries(BufClose, true);
   ArraySetAsSeries(BufColorIndex, true);
   ArraySetAsSeries(BufBuyArrow, true);
   ArraySetAsSeries(BufSellArrow, true);

   return INIT_SUCCEEDED;
}

Hauptberechnung (OnCalculate): Geschlossene Bars, Rauschunterdrückung, Konstruktion der Markierungen

Die Hauptberechnungsschleife arbeitet nur mit geschlossenen Kerzen und verarbeitet Bars mit einem Index i ≥ 1. Die sich bildende Kerze (Index 0) wird ausgeschlossen, um instabile Werte und ein erneutes Malen zu verhindern. Für jede verarbeitete Bar werden zunächst alle relevanten Puffer gelöscht, um Restdaten aus früheren Berechnungen zu vermeiden.

double point    = SymbolInfoDouble(_Symbol, SYMBOL_POINT);
double minMarker= InpMinMarkerPoints * point;
double maxMarker= InpMaxMarkerPoints * point;
double minRange = InpMinRangePoints  * point;

for(int i = rates_total - 1; i >= 1; --i)
{
   BufOpen[i] = BufHigh[i] = BufLow[i] = BufClose[i] = EMPTY_VALUE;
   BufColorIndex[i] = EMPTY_VALUE;
   BufBuyArrow[i]  = EMPTY_VALUE;
   BufSellArrow[i] = EMPTY_VALUE;

   double range = high[i] - low[i];

   double cpi = 0.0;
   if(range > 0.0 && range >= minRange)
      cpi = CalcCPI(high[i], low[i], close[i]);

   int colorIdx = ColorFromCPI(cpi);

   if(!(InpHideNeutralMarkers && colorIdx == IDX_NEUTRAL))
   {
      double mid = 0.5 * (high[i] + low[i]);

      double height = range * InpMarkerScale * MathAbs(cpi);
      height = ClampVal(height, minMarker, maxMarker);

      double o = mid;
      double c = (cpi >= 0.0 ? mid + height : mid - height);

      BufOpen[i]  = o;
      BufClose[i] = c;
      BufHigh[i]  = MathMax(o, c);
      BufLow[i]   = MathMin(o, c);
      BufColorIndex[i] = (double)colorIdx;
   }
}

CPI wird nur berechnet, wenn der Gesamtbereich der Kerze das konfigurierte Rauschunterdrückung überschreitet; andernfalls wird die Bar als neutral behandelt. Wenn CPI gültig ist, wird die Minikerzenmarkierung auf den Kerzenmittelpunkt zentriert. Seine Höhe ergibt sich aus der Reichweite der Kerze, skaliert durch den absoluten CPI-Wert und den nutzerdefinierten Skalierungsfaktor. Diese Höhe wird dann zwischen der minimalen und maximalen Größe der Markierung beschränkt, um eine einheitliche visuelle Skalierung zu gewährleisten. Falls konfiguriert, können neutrale Markierungen vollständig ausgeblendet werden, um die Übersichtlichkeit des Charts zu verringern.

Starke Pfeile (optionales Overlay)

Starke Pfeile werden nur gezeichnet, wenn die Funktion aktiviert ist und nur für Kerzen, die die Rauschunterdrückung passieren. Dadurch wird verhindert, dass Pfeile auf Petite-Kerzen erscheinen, bei denen der CPI zur Neutralität gezwungen wird. Starke bullische Ereignisse sind durch Pfeile gekennzeichnet, die unter dem Tiefpunkt der Kerze eingezeichnet sind, während starke bärische Ereignisse durch Pfeile gekennzeichnet sind, die über dem Hochpunkt der Kerze eingezeichnet sind. Um eine visuelle Überschneidung mit der Preiskerze oder der CPI-Minimarke zu vermeiden, wird ein punktbasierter Offset angewendet.

double arrowOff = InpArrowOffsetPoints * point;

if(InpShowStrongArrows && range >= minRange)
{
   if(cpi >= InpStrongThreshold)
      BufBuyArrow[i]  = low[i] - arrowOff;
   else if(cpi <= -InpStrongThreshold)
      BufSellArrow[i] = high[i] + arrowOff;
}

Ausblenden von Bars 0 (Formationskerze)

Um eine stabile und keine „repainting“ Ausgabe zu gewährleisten, wird die sich bildende Kerze (Index 0) sowohl für CPI-Minikerzen als auch für Pfeil-Plots explizit ausgeblendet. Durch diese Entscheidung wird sichergestellt, dass die visuelle Ausgabe genau auf die Alarmlogik abgestimmt ist, die ebenfalls ausschließlich bei geschlossenen Bars funktioniert. Infolgedessen spiegeln sowohl das Bildmaterial als auch die Warnmeldungen nur die endgültigen Daten wider.

BufOpen[0] = BufHigh[0] = BufLow[0] = BufClose[0] = EMPTY_VALUE;
BufColorIndex[0] = EMPTY_VALUE;
BufBuyArrow[0] = EMPTY_VALUE;
BufSellArrow[0] = EMPTY_VALUE;

Das Info-Panel der letzten Bar (optional)

Wenn er aktiviert ist, zeigt der Indikator ein kompaktes Informationsfeld auf dem Chart an, das den CPI-Wert der zuletzt geschlossenen Kerze (Bar 1), die entsprechende Zonenbezeichnung und die aktuelle Noise-Gate-Einstellung anzeigt. Dieses Panel ist in erster Linie für Tests und Überprüfungen gedacht und ermöglicht es dem Nutzer, das CPI-Verhalten zu bestätigen, ohne die internen Puffer zu untersuchen. Sie hat keinen Einfluss auf das Plotten, die Warnlogik oder die Leistung.

if(InpShowLatestInfo)
{
   double cpi1 = 0.0;
   double range1 = high[1] - low[1];
   if(range1 > 0.0 && range1 >= minRange)
      cpi1 = CalcCPI(high[1], low[1], close[1]);

   Comment(StringFormat("CPI (closed bar): %.3f | %s | MinRange=%d pts",
                        cpi1, ZoneNameFromCPI(cpi1), InpMinRangePoints));
}
else
{
   Comment("");
}

Warnungen: Neue Bar, starke Übergänge, optionales Verlassen und Vorzeichenwechsel

Alarme werden einmal pro neu geschlossener Bar unter Verwendung eines gespeicherten Zeitstempels (lastAlertBarTime) ausgewertet, um Doppelungen zu vermeiden. Ein Warnsignal für den Eintritt in eine starke Zone wird ausgelöst, wenn der aktuelle starke Zustand ungleich Null ist und sich vom zuvor gespeicherten starken Zustand unterscheidet. Optionale Ausstiegswarnungen werden ausgelöst, wenn der vorherige Zustand stark war und der aktuelle Zustand zu nicht stark zurückkehrt.

datetime lastAlertBarTime = 0;
int      lastStrongState  = 0;

if(InpEnableAlerts)
{
   datetime barTime = time[1];
   if(barTime != lastAlertBarTime)
   {
      double cpi1 = 0.0, cpi2 = 0.0;

      double r1 = high[1] - low[1];
      double r2 = high[2] - low[2];

      if(r1 > 0.0 && r1 >= minRange) cpi1 = CalcCPI(high[1], low[1], close[1]);
      if(r2 > 0.0 && r2 >= minRange) cpi2 = CalcCPI(high[2], low[2], close[2]);

      int strongState = StrongStateFromCPI(cpi1);

      if(strongState != 0 && strongState != lastStrongState)
      {
         string side = (strongState > 0 ? "STRONG BUY" : "STRONG SELL");
         FireAlert(StringFormat("%s %s | CPI=%.3f | TF=%s | %s",
                                _Symbol, side, cpi1,
                                EnumToString((ENUM_TIMEFRAMES)_Period),
                                TimeToString(barTime, TIME_DATE|TIME_MINUTES)));
      }
      else if(InpAlertOnExit && lastStrongState != 0 && strongState == 0)
      {
         FireAlert(StringFormat("%s EXIT STRONG | CPI=%.3f | TF=%s | %s",
                                _Symbol, cpi1,
                                EnumToString((ENUM_TIMEFRAMES)_Period),
                                TimeToString(barTime, TIME_DATE|TIME_MINUTES)));
      }

      if(InpAlertOnSignFlip)
      {
         if(r1 >= minRange && r2 >= minRange)
         {
            if((cpi2 < 0.0 && cpi1 > 0.0) || (cpi2 > 0.0 && cpi1 < 0.0))
               FireAlert(StringFormat("%s CPI SIGN FLIP | prev=%.3f now=%.3f | TF=%s | %s",
                                      _Symbol, cpi2, cpi1,
                                      EnumToString((ENUM_TIMEFRAMES)_Period),
                                      TimeToString(barTime, TIME_DATE|TIME_MINUTES)));
         }
      }

      lastStrongState  = strongState;
      lastAlertBarTime = barTime;
   }
}

Optionale Warnungen eines Vorzeichenwechsels werden erzeugt, wenn der CPI-Wert den Nullpunkt überschreitet, aber nur, wenn sowohl die aktuelle als auch die vorherige Kerze die Rauschunterdrückung passieren. Dadurch werden Störsignale vermieden, die durch Kerzen mit geringer Range verursacht werden und die Richtungsinterpretation verfälschen könnten.

Leistungshinweis (prev_calculated)

Der Einfachheit halber und um Artefakte durch veraltete Pufferdaten zu vermeiden, berechnet die aktuelle Implementierung bei jedem Tick alle geschlossenen Bars neu. Da die Berechnung pro Bar leicht ist, ist dieser Ansatz für die meisten praktischen Anwendungsfälle akzeptabel und verbessert die Robustheit während der Entwicklung und Prüfung.

// current approach (simple, stable):
for(int i = rates_total - 1; i >= 1; --i) { /* ... */ }

// optimized approach (conceptual):
// if(prev_calculated == 0) start = rates_total - 1; else start = 2;
// for(int i = start; i >= 1; --i) { /* ... */ }

Wenn eine Leistungsoptimierung notwendig wird, kann die Berechnungsschleife mit dem Parameter prev_calculated verfeinert werden, um nur die zuletzt geschlossenen Bars zu verarbeiten. Bei einer solchen Optimierung müssen die wichtigsten Regeln beibehalten werden: die Freigabe von Pufferplätzen für neu berechnete Bars, die Durchsetzung der Rauschunterdrückung und der Ausschluss der sich bildenden Kerze.


Tests

Um ein robustes und konsistentes Verhalten zu gewährleisten, sollten alle Tests in verschiedenen Handelsumgebungen durchgeführt werden. Insbesondere sollte der Indikator für mindestens zwei verschiedene Symboltypen – z. B. ein wichtiges Devisenpaar und ein Nicht-Deviseninstrument (z. B. ein Index oder ein Rohstoff) – und für mehrere Zeitrahmen (z. B. M5, M15, H1) bewertet werden. Das Testen unter verschiedenen Marktstrukturen und Zeitkompressionen ist unerlässlich, um zu validieren, dass die punktbasierte Größenbestimmung, die Rauschunterdrückung auf Basis der Range und die CPI-Schwellenwertlogik bei Instrumenten mit unterschiedlichen Volatilitätsprofilen, Preisskalen und Zahlenformaten zuverlässig funktionieren.

Ich habe den Indikator auf einem Live-Chart des MetaTrader 5 getestet, um zu überprüfen, ob sich die visuelle Ebene, das Informationspanel und das Warnsystem bei geschlossenen Kerzen konsistent verhalten. Die folgende Abbildung zeigt den Indikator für EURUSD, H1, mit der Standardeinstellung für die Rauschunterdrückung (MinRange = 5 pts).

Das Panel auf dem Chart bestätigt den korrekten Betrieb unter drei Aspekten in einer einzigen Ablesung:

CPI (geschlossene Bars): 0,767 | STRONG BUY | MinRange = 5 pts

Diese Ausgabe verifiziert das:

  1. Der CPI wird mit Bar 1 (der zuletzt geschlossenen Kerze) berechnet,
  2. Die Zonenklassifizierung funktioniert korrekt, mit einem CPI von 0,767, der der Zone STRONG BUY zugeordnet ist, und
  3. Die Einstellung für die Rauschunterdrückung ist aktiv und wird korrekt gemeldet, was bedeutet, dass die Berechnungen auf der Grundlage des Kerzenbereichs unterdrückt werden.

Auf der Registerkarte „Journal“ werden Warnungen gemäß den definierten Übergangsregeln ausgelöst. In diesem Test zeichnet das Protokoll einen Alarm sowohl für „STRONG BUY“ als auch für „CPI SIGN FLIP“ mit dem gleichen Zeitstempel des Endes der Bar auf. Dieses Verhalten ist zu erwarten, wenn der CPI gleichzeitig

  • in den stark positiven Bereich eintritt und
  • zwischen dem vorherigen und dem aktuellen Schlusskurs von negativ nach positiv wechselt.

Diese Ergebnisse zeigen, dass das Warnsystem des Indikators übergangsbasiert ist und einmal pro neu geschlossener Kerze ausgewertet wird, anstatt kontinuierlich auf jeden Tick zu reagieren. Die visuelle Ausgabe und die Warnmeldungen bleiben vollständig aufeinander abgestimmt, sodass ein deterministisches und nicht übermalendes Verhalten gewährleistet ist. Unten ist ein zusätzlicher Test des „Step-Index“ (H4) zu sehen, der CPI-Minikerzen mit wechselnden Intra-Bar-Druckzuständen zeigt. Die letzte geschlossene Bar meldet einen moderaten CPI-Verkauf in der Infotafel auf dem Chart, während die Pfeile der starken Zone Zeiträume mit dominantem Druck bei unveränderten Schwellenwerten und Einstellungen der Rauschunterdrückung hervorheben.




Schlussfolgerung

Der Candle Pressure Index (CPI) ist ein Instrument zur Analyse der Kursentwicklung, das den Kauf- und Verkaufsdruck innerhalb der Bar durch ein normalisiertes Modell der Schlussposition visualisiert. Durch die Kombination von strukturierter Zonenklassifizierung, Farbzuordnung und übergangsbasierten Alarmen liefert es eine nicht übermalende Darstellung des Marktdrucks, die eine Dynamik aufzeigt, die durch die Kerzenfarbe allein nicht sichtbar ist.

Die MetaTrader 5-Implementierung legt Wert auf deterministisches Verhalten durch strikte Auswertung geschlossener Bars, explizite Pufferverwaltung und eine klare Trennung zwischen Visualisierung und Alarmlogik. Der Indikator kann so konfiguriert werden, dass er sich über alle Instrumente und Zeitrahmen hinweg konsistent verhält. Diese Konstruktionsentscheidungen machen CPI zu einem robusten Werkzeug sowohl für die technische Analyse als auch für die pädagogische Demonstration von Intra-Bar-Druckkonzepten.

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

Beigefügte Dateien |
Letzte Kommentare | Zur Diskussion im Händlerforum (2)
Mfoka Gatsheni
Mfoka Gatsheni | 21 Jan. 2026 in 01:18
Werden die Pfeile bei offener Kerze geplottet?
Christian Benjamin
Christian Benjamin | 24 Jan. 2026 in 08:37
Mfoka Gatsheni #:
Werden die Pfeile bei offener Kerze eingezeichnet?
Nein, die Pfeile resultieren aus internen Druckberechnungen, die zum Kerzenschluss ausgewertet werden.
Klassische Strategien neu interpretieren (Teil 21): Entdeckung einer Ensemble-Strategie aus Bollinger-Bändern und RSI Klassische Strategien neu interpretieren (Teil 21): Entdeckung einer Ensemble-Strategie aus Bollinger-Bändern und RSI
Dieser Artikel befasst sich mit der Entwicklung einer algorithmischen Handelsstrategie für den EURUSD-Markt, die die Bollinger-Bänder und den Relative Strength Indicator (RSI) kombiniert. Die ersten regelbasierten Strategien lieferten zwar hochwertige Signale, litten aber unter einer geringen Handelsfrequenz und begrenzter Rentabilität. Mehrere Iterationen der Strategie wurden evaluiert, wobei sich herausstellte, dass unser Verständnis des Marktes unzureichend war, das Rauschen zunahm und die Leistung sich verschlechterte. Durch den angemessenen Einsatz statistischer Lernalgorithmen, die Verlagerung des Modellierungsziels auf technische Indikatoren, die Anwendung einer angemessenen Skalierung und die Kombination von maschinellen Lernprognosen mit klassischen Handelsregeln erzielte die endgültige Strategie eine deutlich verbesserte Rentabilität und Handelshäufigkeit bei gleichzeitig akzeptabler Signalqualität.
Einführung in MQL5 (Teil 36): Beherrschen der API und der Funktion WebRequest in MQL5 (X) Einführung in MQL5 (Teil 36): Beherrschen der API und der Funktion WebRequest in MQL5 (X)
Dieser Artikel stellt die grundlegenden Konzepte hinter HMAC-SHA256 und API-Signaturen in MQL5 vor und erklärt, wie Nachrichten und geheime Schlüssel kombiniert werden, um Anfragen sicher zu authentifizieren. Sie bildet die Grundlage für das Signieren von API-Aufrufen, ohne sensible Daten preiszugeben.
MQL5-Werkzeuge für den Handel (Teil 12): Erweiterung des Korrelationsmatrix-Dashboards um interaktive Funktionen MQL5-Werkzeuge für den Handel (Teil 12): Erweiterung des Korrelationsmatrix-Dashboards um interaktive Funktionen
In diesem Artikel erweitern wir das Dashboard für die Korrelationsmatrix in MQL5 um interaktive Funktionen wie das Ziehen des Panels, Minimieren/Maximieren, Hover-Effekte auf Schaltflächen und Zeitrahmen sowie die Behandlung von Mausereignissen für ein verbessertes Nutzungserlebnis. Wir ergänzen eine Sortierung der Symbole nach durchschnittlicher Korrelationsstärke in auf- und absteigender Reihenfolge, schalten zwischen der Matrixdarstellung der Korrelationen und den p-Werten um und integrieren einen Wechsel zwischen hellen und dunklen Farbschemen mit dynamischen Farbaktualisierungen.
Entwicklung eines Toolkits zur Preisaktionsanalyse (Teil 54): Filtern von Trends mit EMA und geglätteter Kursbewegung Entwicklung eines Toolkits zur Preisaktionsanalyse (Teil 54): Filtern von Trends mit EMA und geglätteter Kursbewegung
In diesem Artikel wird eine Methode untersucht, die Heikin-Ashi-Glättung mit EMA20-Hoch- und -Tiefgrenzen und einem EMA50-Trendfilter kombiniert, um die Klarheit und das Timing des Handels zu verbessern. Es wird aufgezeigt, wie diese Tools Händlern dabei helfen können, echte Impulse zu erkennen, Rauschen herauszufiltern und sich besser auf volatilen Märkten oder in Trends zurechtzufinden.