Vom Neuling zum Experten: Animierte Nachrichten-Schlagzeile mit MQL5 (III) – Indicator Insights
Inhalt:
Einführung
Heute stellen wir einen neuen Indikator vor – eine regelbasierte Funktion auf dem Chart, die die in den vorangegangenen Folgen (I und II) vorgestellten Instrumente ergänzt. Falls Sie es noch nicht bemerkt haben, ist das Hauptziel klar: die Optimierung der MetaTrader 5-Terminalschnittstelle für einen kompakten und effizienten Zugriff auf wichtige Handelsressourcen – direkt im Chart.
Die meisten Oszillatoren werden traditionell in separaten Unterfenstern unterhalb des Haupt-Charts angezeigt, wodurch der Arbeitsbereich fragmentiert wird und wertvoller Pixelplatz verbraucht wird. Je mehr Indikatoren Sie verwenden, desto mehr wird Ihr Chart komprimiert, sodass Sie die Preisentwicklung nicht mehr klar erkennen können.Um dieses Problem zu lösen, werden wir diese Herausforderungen durch die Integration eines Indikators auf der Chart-Einsichtspur unter Verwendung der Klasse CCanvas vereinfachen. So können wir Indikatorwerte über die MQL5-API abrufen und verarbeiten und aussagekräftige Signale anzeigen, ohne die Oberfläche zu überfrachten. Ich habe ein visuelles Beispiel vorbereitet, das veranschaulicht, wie mehrere Indikator-Unterfenster die Ansicht des Haupt-Charts verkleinern.

Diese Abbildung zeigt, wie die Indikatorfenster das Chart beeinflussen.
Im nächsten Abschnitt werden wir das Konzept dieses Ansatzes erläutern, bevor wir uns mit der Umsetzung befassen.
Konzept
Unser Plan ist es, standardmäßig eine einzige Bildlaufleiste einzuführen, die Erkenntnisse aus vier wichtigen Oszillatoren anzeigt – Indikatoren, die Händlern wichtige Signale für ihre Entscheidungen liefern. Dieses kompakte Design reduziert die Unübersichtlichkeit des Charts und sorgt für einen sauberen, konzentrierten Blick. Nutzer, die mehr Details wünschen, können die Einblicke jedoch optional in separate Fahrspuren aufteilen, die jeweils einem bestimmten Indikator gewidmet sind.
Ein umfassendes Verständnis dieser Indikatoren ist unerlässlich, um zu verstehen, wie sie solide Handelsstrategien unterstützen. Am Ende dieses Setups verfügen Sie über Schlagzeilen, den Wirtschaftskalender und Echtzeit-Indikatoren – alles zusammengefasst in einer intelligenten Oberfläche direkt auf dem MetaTrader 5-Chart.
Mit Blick auf künftige Aktualisierungen denke ich auch über die Einführung einer Analyst Insights Lane nach – ein spezieller Bereich, in dem kuratierte Erkenntnisse aus professionellen Analystenpublikationen angezeigt werden könnten. Durch den Zugriff auf ihre APIs könnte diese Funktion Expertenkommentare und strategische Perspektiven direkt in das Chart einbringen und so eine leistungsstarke, entscheidungsbereite Anzeige für Händler schaffen.
Nehmen wir uns nun einen Moment Zeit, um sowohl für Anfänger als auch für erfahrene Händler zu erkunden, wie jeder der vier Oszillatoren, die wir integrieren werden, üblicherweise beim Handel verwendet wird und wie ihre kombinierten Erkenntnisse Ihre Entscheidungsfindung in Echtzeit erheblich verbessern können.
Verstehen von RSI, CCI, Stochastic und MACD im Handel:
Der RSI, der 1978 von J. Welles Wilder entwickelt wurde, ist ein Momentum-Oszillator, der die Geschwindigkeit und Veränderung von Kursbewegungen misst. Er wird in erster Linie verwendet, um überkaufte und überverkaufte Bedingungen sowie potenzielle Trendumkehrungen zu erkennen. Der RSI eignet sich besonders gut für Märkte, die sich in einer Bandbreite bewegen, in der die Kurse zwischen Unterstützungs- und Widerstandsniveaus schwanken.
Berechnung:
Der RSI wird in der Regel über einen Zeitraum von 14 Tagen berechnet, doch können Händler diesen Wert auch für kürzere oder längere Zeiträume anpassen. Die Formel lautet:

Dabei ist der RSI (Relative Strength Index) das Verhältnis zwischen dem durchschnittlichen Gewinn und dem durchschnittlichen Verlust im angegebenen Zeitraum. Der durchschnittliche Gewinn und Verlust wird auf der Grundlage der Preisänderungen während des Rückblickszeitraums berechnet.
Schlüsselniveaus und Interpretation:
Der RSI reicht von 0 bis 100, wobei der Mittelwert bei 50 liegt.
- Werte über 70 gelten als überkauft und deuten darauf hin, dass der Vermögenswert überbewertet sein könnte und eine Abwärtskorrektur bevorsteht.
- Werte unter 30 gelten als überverkauft, was darauf hindeutet, dass der Vermögenswert unterbewertet ist und ein Aufwärtstrend bevorsteht.
- Werte über 50 deuten im Allgemeinen auf ein Aufwärtsmomentum hin, während Werte unter 50 auf ein Abwärtsmomentum hindeuten.

Relative Strength Index
Handelsstrategien auf Basis des RSI:
- Überkauft/überverkauft-Signale: Händler achten häufig darauf, ob der RSI über 30 steigt, da dies ein potenzielles Kaufsignal ist, das anzeigt, dass der Vermögenswert den überverkauften Bereich verlässt. Umgekehrt kann ein Überschreiten der 70er-Marke ein Verkaufssignal sein, das auf überkaufte Bedingungen hinweist.
- Divergenz: Der RSI kann durch Divergenz potenzielle Umkehrungen signalisieren. Eine Abwärts-Divergenz tritt beispielsweise auf, wenn der Kurs ein neues Hoch erreicht, der RSI jedoch ein niedrigeres Hoch verzeichnet, was auf eine nachlassende Dynamik hindeutet. Eine Aufwärts-Divergenz tritt auf, wenn der Kurs einen neuen Tiefstand erreicht, der RSI jedoch einen höheren Tiefstand aufweist.
- Trendbestätigung: In einem Aufwärtstrend sollte der RSI im Allgemeinen über 50 liegen, während er in einem Abwärtstrend unter 50 bleiben sollte, was den Händlern hilft, die Richtung des Trends zu bestätigen.
- Falsche Umkehrpunkte: Wilder identifizierte „failure swings“ (falsche Umkehrpunkte) als starke Anzeichen für Marktumkehr, z. B. wenn der RSI nach Erreichen von 76 nicht über 70 steigt und dann unter 72 fällt, was eine potenzielle Umkehr signalisiert.
Anwendungsbeispiel:
Wenn der RSI über 30 steigt, nachdem er sich im überverkauften Bereich (unter 30) befunden hat, könnte dies eine Kaufgelegenheit darstellen, insbesondere wenn er von anderen Aufwärts-Indikatoren wie das Kreuzen gleitender Durchschnitte begleitet wird. Umgekehrt könnte der RSI, wenn er nach einem überkauften Zustand unter 70 fällt, eine Verkaufsmöglichkeit signalisieren.
CCI ist ein Momentum-Oszillator, der ursprünglich zur Erkennung zyklischer Schwankungen bei Rohstoffen entwickelt wurde, inzwischen aber in verschiedenen Anlageklassen, einschließlich Aktien und Währungen, eingesetzt wird. Er misst das aktuelle Kursniveau im Verhältnis zu einem durchschnittlichen Kursniveau über einen bestimmten Zeitraum und hilft Händlern, überkaufte/überverkaufte Bedingungen und Trendstärke zu erkennen. Sie wurde 1980 von Donald Lambert eingeführt.
Berechnung:
Der CCI wird in der Regel über einen Zeitrahmen von 20 Perioden berechnet, der jedoch angepasst werden kann. Die Formel lautet:

wobei:
Typical Price = (Hoch + Tief + Schluss) / 3SMA = Einfacher gleitender Durchschnitt des typischen Preises über den angegebenen Zeitraum
Mean Deviation = Durchschnitt der absoluten Abweichungen des typischen Kurses vom SMA
Der Faktor 0,015 wird verwendet, um die Ergebnisse zur besseren Lesbarkeit zu skalieren.
Schlüsselniveaus und Interpretation:
- Der CCI oszilliert um den Nullpunkt herum, wobei es keine Ober- oder Untergrenze gibt.
- Werte über +100 deuten auf überkaufte Bedingungen hin, was auf potenzielle Verkaufsmöglichkeiten hindeutet.
- Werte unter -100 deuten auf eine überverkaufte Situation hin und damit auf potenzielle Kaufgelegenheiten.
- Bei starken Trends kann der CCI +200 oder -200 überschreiten, was auf eine extreme Dynamik hinweist.

Commodity Channel Index
Wenn der Commodity Channel Index (CCI) unter -100 oder über +100 kreuzt, ist das nicht unbedingt ein Zeichen für eine unmittelbare Handelsgelegenheit. Oft ist eine Bestätigung durch andere Indikatoren oder eine Preisaktionsanalyse erforderlich, bevor ein Auftrag ausgeführt wird. Im obigen Beispiel beispielsweise sank der Kurs selbst nach dem Unterschreiten des CCI von -100 noch einige Punkte weiter, bevor er seine Richtung änderte.
Dieses Verhalten ist nicht nur beim CCI zu beobachten, sondern auch bei anderen Oszillatoren, wie z. B. dem Stochastik Oszillator, insbesondere im Bereich der vordefinierten Schwellenwerte. Diese Kreuz-Signale können zwar wertvoll sein, aber wenn man sich nur auf sie verlässt, kann das zu einem verfrühten Einstieg führen. Ein robusterer Ansatz besteht darin, Oszillatorsignale mit zusätzlichen technischen Bestätigungen zu kombinieren, um die Entscheidungsfindung zu stärken.
Handelsstrategien auf Basis des CCI:
- Überkauft/überverkauft-Signale: Ein CCI-Wert über +100 kann ein potenzielles Verkaufssignal sein, während ein Wert unter -100 ein Kaufsignal sein kann. Händler warten oft darauf, dass der CCI wieder unter +100 oder über -100 fällt, um das Signal zu bestätigen.
- Trendstärke: Eine anhaltende Bewegung über +100 deutet auf einen starken Aufwärtstrend hin, während eine Bewegung unter -100 auf einen starken Abwärtstrend hindeutet. Dies kann den Händlern helfen, länger im Trend zu bleiben.
- Divergenz: Ähnlich wie der RSI kann der CCI potenzielle Umkehrungen durch Divergenz signalisieren, z. B. wenn der Kurs neue Höchststände erreicht, während der CCI niedrigere Höchststände erreicht, was auf eine nachlassende Dynamik hindeutet.
- Kreuzungen: Einige Händler verwenden das Kreuzen der Nulllinie des CCI als Trendsignale, wobei Aufwärtskreuze auf ein Aufwärtsmomentum und Abwärtskreuze auf ein Abwärtsmomentum hinweisen.
Anwendungsbeispiel:
Wenn der CCI über +100 kreuzt, könnte dies ein Zeichen für einen starken Aufwärtstrend sein. Händler sollten jedoch auf eine Umkehr achten, wenn der CCI zu sinken beginnt und wieder unter +100 kreuzt. Ebenso könnte ein CCI unter -100 eine Kaufgelegenheit signalisieren, wenn er zu steigen beginnt und die Marke von -100 überschreitet.
Der Stochastik Oszillator ist ein momentumbasierter Indikator, der durch den Vergleich des Schlusskurses eines Wertpapiers mit seiner jüngsten Handelsspanne potenzielle Wendepunkte im Marktverhalten aufzeigen soll. Er wird oft auf ein 14-Perioden-Fenster eingestellt und ist besonders effektiv bei der Erkennung von überkauften und überverkauften Bedingungen. Durch die Konzentration auf die Preisänderungsrate zielt sie darauf ab, Trendumkehrungen zu signalisieren, bevor sie eintreten.
Dieses leistungsfähige Instrument wurde von George Lane in den 1950er Jahren eingeführt, und seine Grundsätze dienen Händlern auch heute noch als Leitfaden für die Suche nach frühzeitigen Hinweisen auf Veränderungen der Marktdynamik.
Berechnung:
Der Stochastik Oszillator besteht aus zwei Linien: %K (schnelle Linie) und %D (langsame Linie). Die %K-Linie wird wie folgt berechnet:

wobei:
Close = Aktueller SchlusskursiLowest Low= Tiefstwert im angegebenen Zeitraum
Highest High = Höchster Wert im angegebenen Zeitraum
Die %D-Linie ist ein gleitender Durchschnitt von %K, normalerweise ein einfacher gleitender 3-Perioden-Durchschnitt, um Schwankungen zu glätten.
Schlüsselniveaus und Interpretation:
- Der Stochastik Oszillator reicht von 0 bis 100.
- Werte über 80 gelten als überkauft und deuten auf potenzielle Verkaufsmöglichkeiten hin.
- Werte unter 20 gelten als überverkauft und deuten auf potenzielle Kaufgelegenheiten hin.
- Die %D-Linie dient als Signallinie, wobei die Überkreuzungen von %K und %D Handelssignale liefern.

Stochastik Oszillator
Handelsstrategien auf Basis der Stochastik:
- Überkauft/überverkauft-Signale: Händler achten auf einen %K-Wert von über 20 als potenzielles Kaufsignal, das anzeigt, dass sich der Vermögenswert aus dem überverkauften Bereich herausbewegt. Umgekehrt kann ein Überschreiten der 80er-Marke ein Verkaufssignal sein, das auf überkaufte Bedingungen hinweist.
- Kreuzungen: Ein Aufwärts-Signal tritt auf, wenn %K über %D kreuzt, insbesondere im überverkauften Bereich (unter 20). Ein Abwärts-Signal tritt auf, wenn %K unter %D kreuzt, insbesondere im überkauften Bereich (über 80).
- Divergenz: Die Stochastik kann durch Divergenz potenzielle Umkehrungen signalisieren, z. B. eine Aufwärtsdivergenz, wenn der Preis niedrigere Tiefststände erreicht, der %K jedoch höhere Tiefststände, was auf eine nachlassende Abwärtsdynamik hindeutet.
- Trendbestätigung: In einem Aufwärtstrend sollte der Stochastik im Allgemeinen über 50 bleiben, während er in einem Abwärtstrend unter 50 bleiben sollte, um die Trendrichtung zu bestätigen.
Anwendungsbeispiel:
Wenn %K über %D kreuzt, während beide unter 20 liegen, könnte dies ein starkes Kaufsignal sein, insbesondere wenn es von anderen Aufwärts-Signalen begleitet wird, wie z. B. einem Durchbruch über ein Widerstandsniveau. Umgekehrt könnte es ein Verkaufssignal sein, wenn %K unter %D kreuzt, während es über 80 liegt, was auf eine potenzielle Umkehr von überkauften Bedingungen hinweist.
Moving Average Convergence/Divergence (MACD)
Der MACD ist ein weit verbreiteter Trendfolgemomentum-Indikator, der kurzfristige und langfristige Preistrends vergleicht, indem er die Differenz zwischen zwei EMAs analysiert. Sie hilft dabei, Verschiebungen in der Marktdynamik, der Trendrichtung und potenzielle Einstiegs- oder Ausstiegspunkte zu erkennen, was sie zu einer wertvollen Komponente vieler technischer Handelssysteme macht.
Der MACD wurde von Gerald Appel in den späten 1970er Jahren entwickelt und ist nach wie vor eines der zuverlässigsten Instrumente für Händler, um Trendstärke und mögliche Umkehrungen zu erkennen.
Berechnung:
Der MACD wird berechnet, indem der 26-Perioden-EMA vom 12-Perioden-EMA subtrahiert wird:
![]()
Ein 9-Perioden-EMA der MACD-Linie wird dann als „Signallinie“ eingezeichnet. Die Differenz zwischen der MACD-Linie und der Signallinie wird häufig als Histogramm angezeigt, das die Stärke des Momentums visuell darstellt.
Schlüsselniveaus und Interpretation:
- Der MACD oszilliert um den Nullpunkt herum und hat weder eine obere noch eine untere Begrenzung.
- Ein positiver MACD-Wert weist auf ein Aufwärts-Momentum hin, während ein negativer Wert ein Abwärts- Momentum anzeigt.
- Das Kreuzen der MACD-Linie und der Signal-Linie liefert Handelssignale: aufwärts, wenn der MACD über die Signal-Linie kreuzt, abwärts, wenn er darunter liegt.
- Das Kreuzen der Nulllinie ist ebenfalls von Bedeutung: Das Überschreiten der Nulllinie deutet auf einen potenziellen Aufwärtstrend hin, das Unterschreiten auf einen potenziellen Abwärtstrend.

Gleitender Durchschnitt Konvergenz Divergenz (MACD)
Handelsstrategien auf der Grundlage des MACD:
- Kreuzungen: Händler kaufen, wenn die MACD-Linie oberhalb der Signallinie kreuzt, was ein Aufwärts-Momentum anzeigt, und verkaufen, wenn sie unterhalb kreuzt, was ein Abwärts-Momentum anzeigt.
- Null-Linien-Kreuzungen: Wenn der MACD über Null kreuzt, deutet dies auf einen potenziellen Aufwärtstrend hin, während ein Kreuzen unter Null auf einen Abwärtstrend hindeutet, was für die Trendbestätigung nützlich ist.
- Histogramm-Analyse: Die Höhe des Histogramms spiegelt die Stärke des Impulses wider. Ein breiter werdendes Histogramm deutet auf eine zunehmende Dynamik hin, während ein schmaler werdendes Histogramm auf eine nachlassende Dynamik hindeutet, die möglicherweise eine Trendwende signalisiert.
- Divergenz: Der MACD kann durch Divergenzen potenzielle Umkehrungen signalisieren, z. B. eine Aufwärts-Divergenz, wenn der Kurs tiefere Tiefststände erreicht, der MACD aber höhere Tiefststände verzeichnet, was auf eine nachlassende Abwärtsdynamik hindeutet.
Anwendungsbeispiel:
Wenn die MACD-Linie über die Signallinie kreuzt und das Histogramm breiter wird, könnte dies ein Kaufsignal sein, vor allem, wenn es von einem Durchbruch über ein wichtiges Widerstandsniveau begleitet wird. Wenn die MACD-Linie hingegen unter die Signallinie fällt und das Histogramm sich verengt, könnte dies ein Verkaufssignal sein, das auf eine mögliche Umkehrung hinweist.
| Indikator | Zweck | Schlüssel-Ebenen | Haupt-Signale | Beste Anwendung |
|---|---|---|---|---|
| RSI | Misst das Momentum und identifiziert überkaufte/überverkaufte Bedingungen | >70 (überkauft), <30 (überverkauft), 50 (Mittelwert) | Kreuzung über 30 (kaufen), Kreuzung unter 70 (verkaufen), Divergenzen, Ausfallschwankungen | Märkte in einer bestimmten Bandbreite |
| CCI | Identifiziert zyklische Schwankungen und Trendstärke | >+100 (überkauft), <-100 (überverkauft), Nulllinie | Kreuzung über +100 (verkaufen), Kreuzung unter -100 (kaufen), Divergenzen, Nulldurchgänge | Sich entwickelnde Märkte |
| Stochastik | Misst das Momentum und identifiziert potenzielle Umkehrungen | >80 (überkauft), <20 (überverkauft) | Kreuzen von %K/%D (kaufen, wenn %K über %D unter 20 kreuzt, verkaufen, wenn unter %D über 80), Divergenzen | Seitwärts gerichtete Märkte und Trendwende |
| MACD | Trendfolge- und Momentum-Indikator | Nulllinie, Signalleitungsübergänge | MACD-Linie kreuzt über der Signallinie (Kauf), unter der Signallinie (Verkauf), Nulldurchgänge, Histogrammänderungen | Sich entwickelnde Märkte |
Umsetzung
Eingebaute Indikatorwerte für das Symbol und den Zeitrahmen, die auf dem aktiven Chart angezeigt werden, können durch eine dreistufige Sequenz „Handle → Puffer → Freigeben“ erhalten werden. Zunächst wird ein Indikator-Handle erstellt, indem die entsprechende MQL5-Funktion – z. B. iRSI oder iMACD – aufgerufen wird, wobei explizite Symbol- und Zeitrahmenparameter weggelassen werden, damit der Kontext des Charts verwendet wird. Anschließend wird CopyBuffer mit diesem Handle aufgerufen, um die neuesten Werte aus einem oder mehreren der Ausgabepuffer des Indikators zu extrahieren. Schließlich wird IndicatorRelease aufgerufen, um den Handle und die zugehörigen Ressourcen freizugeben. Die Kapselung dieser Schritte in einer Hilfsroutine gewährleistet einen effizienten, bedarfsgerechten Abruf von RSI, MACD, Stochastik, CCI oder anderen Standardindikatoren, ohne dass zusätzliche Chartfenster geöffnet werden müssen.
Die folgenden Schritte skizzieren den Prozess der Integration der Funktion Indicator Insights in den News Headline EA und bieten eine praktische Demonstration der Arbeit mit integrierten Indikatoren unter Verwendung von MQL5.
Integration von Indikator-Insights in den EA
1. Nutzereingaben Erklärung
Indem Sie InpSeparateLanes und InpInsightSpeed zusammen mit Ihren anderen Eingaben anzeigen, können Sie dem Händler die Wahl lassen, ob er eine einzelne Scrollspur mit kombinierten Indikatoren sehen möchte.
input bool InpSeparateLanes = false; // combined vs separate insights input int InpInsightSpeed = 3; // scroll speed for insight text
2. Globals & Handles der Leinwände
Wir deklarieren sowohl die kombinierten als auch die einzelnen Leinwände (canvas) im Voraus. Die Animation wird durch die Offsets der Bildlaufleisten gesteuert. In MQL5 müssen Canvas-Handles global bestehen bleiben, damit sie über Timer-Callbacks hinweg überleben. Durch die Organisation dieser Handles zusammen mit anderen Statusvariablen (wie Chartbreite und Reload-Zeitstempel) halten wir alle Cross-Tick-Status an einem Ort.
//--- Globals --------------------------------------------- CCanvas combinedCanvas; // holds all four insights in one lane CCanvas rsiCanvas, stochCanvas, macdCanvas, cciCanvas; // separate lanes int offCombined, offRSI, offStoch, offMACD, offCCI;
3. Indikator Berechnungshilfen
Jede Hilfsfunktion folgt dem Muster „Handle → Puffer → Freigabe“, wodurch sichergestellt wird, dass jedes Indikator-Handle nur einmal pro Tick erstellt, der letzte Wert gelesen und die Systemressourcen dann sofort freigegeben werden. Die Zentralisierung der Formatierung an dieser Stelle hält die Hauptzeichenschleife sauber und performant. Die Kombination von vier Signalen zu einem einzigen String für den kombinierten Spurmodus vereinfacht die Rendering-Logik weiter.
//+------------------------------------------------------------------+ //| Compute indicator insights | //+------------------------------------------------------------------+ string ComputeRSIInsight() { int h=iRSI(NULL,PERIOD_CURRENT,14,PRICE_CLOSE); if(h==INVALID_HANDLE) return "["+Symbol()+"] RSI err"; double b[]; CopyBuffer(h,0,1,1,b); IndicatorRelease(h); double v=b[0]; string s=DoubleToString(v,1); string m=v<30?"Oversold("+s+")":v>70?"Overbought("+s+")":"Neutral("+s+")"; return "["+Symbol()+"] RSI:"+m; } string ComputeStochInsight() { int h=iStochastic(NULL,PERIOD_CURRENT,14,3,3,MODE_SMA,STO_LOWHIGH); if(h==INVALID_HANDLE) return "["+Symbol()+"] Stoch err"; double b[]; CopyBuffer(h,0,1,1,b); IndicatorRelease(h); double v=b[0]; string s=DoubleToString(v,1); string m=v<20?"Oversold("+s+")":v>80?"Overbought("+s+")":"Neutral("+s+")"; return "["+Symbol()+"] Stoch:"+m; } string ComputeMACDInsight() { int h=iMACD(NULL,PERIOD_CURRENT,12,26,9,PRICE_CLOSE); if(h==INVALID_HANDLE) return "["+Symbol()+"] MACD err"; double m[],g[]; CopyBuffer(h,0,1,1,m); CopyBuffer(h,1,1,1,g); IndicatorRelease(h); double d=m[0]-g[0]; string s=DoubleToString(d,2); string m2=d>0?"Bull("+s+")":d<0?"Bear("+s+")":"Neu(0)"; return "["+Symbol()+"] MACD:"+m2; } string ComputeCCIInsight() { int h=iCCI(NULL,PERIOD_CURRENT,14,PRICE_TYPICAL); if(h==INVALID_HANDLE) return "["+Symbol()+"] CCI err"; double b[]; CopyBuffer(h,0,1,1,b); IndicatorRelease(h); double v=b[0]; string s=DoubleToString(v,1); string m=v<-100?"Oversold("+s+")":v>100?"Overbought("+s+")":"Neutral("+s+")"; return "["+Symbol()+"] CCI:"+m; } string ComputeAllInsights() { return ComputeRSIInsight() + " | " + ComputeStochInsight() + " | " + ComputeMACDInsight() + " | " + ComputeCCIInsight(); }
4. Canvas-Erstellung in OnInit
In OnInit verkabeln wir unsere neuen Bahnen (lanes). Im Modus „Separate Lane“ werden vier Leinwände initialisiert, im Modus „Combined Lane“ nur eine mit der statischen Beschriftung „Indicator Insights:“. Durch den Aufruf einer ersten Aktualisierung wird sichergestellt, dass die Händler noch vor dem ersten Ticken des Timers den Kontext sehen – ein wichtiges Detail für die Nutzerfreundlichkeit beim Laden großer EAs.
int OnInit() { // … existing canvases for events & news … if(InpSeparateLanes) { rsiCanvas.CreateBitmapLabel("RsiC",0,0,canvW,lineH); stochCanvas.CreateBitmapLabel("StoC",0,0,canvW,lineH); macdCanvas.CreateBitmapLabel("MacC",0,0,canvW,lineH); cciCanvas.CreateBitmapLabel("CciC",0,0,canvW,lineH); // set transparency… } else { combinedCanvas.CreateBitmapLabel("AllC",0,0,canvW,lineH); combinedCanvas.TransparentLevelSet(120); // static label at x=5: “Indicator Insights:” combinedCanvas.FontSizeSet(-120); combinedCanvas.TextOut(5, (lineH-combinedCanvas.TextHeight("Indicator Insights:"))/2, "Indicator Insights:", XRGB(200,200,255), ALIGN_LEFT); combinedCanvas.Update(true); } // … remainder of OnInit … }
5. Bildlauflogik in OnTimer
Dies ist der Herzschlag des EA: Mit jedem Timer-Tick werden die Bildschirme neu positioniert, die Daten neu geladen, die Größe des Charts geändert und der Berechnungs- und Zeichnungszyklus für jede Spur – ob Ereignisse, Nachrichten oder Indikatoren – ausgeführt. Indem wir alle Aktualisierungsaufrufe am Ende bündeln, minimieren wir das Flackern und halten den Bildlauf über alle Ebenen hinweg perfekt synchronisiert. Eine Hilfsfunktion zum Einpacken von Offsets hält den Code DRY.
//+------------------------------------------------------------------+ //| OnTimer: redraw | //+------------------------------------------------------------------+ void OnTimer() { // reposition canvases SetCanvas("EvC",InpPositionTop,InpTopOffset); SetCanvas("NwC",InpPositionTop,InpTopOffset+3*lineH); if(InpSeparateLanes) { SetCanvas("RsiC",InpPositionTop,InpTopOffset+4*lineH); SetCanvas("StoC",InpPositionTop,InpTopOffset+5*lineH); SetCanvas("MacC",InpPositionTop,InpTopOffset+6*lineH); SetCanvas("CciC",InpPositionTop,InpTopOffset+7*lineH); } else { SetCanvas("AllC",InpPositionTop,InpTopOffset+4*lineH); } // refresh data ReloadEvents(); FetchAlphaVantageNews(); // resize if needed int wNew=(int)ChartGetInteger(0,CHART_WIDTH_IN_PIXELS); if(wNew!=canvW) { canvW=wNew; ObjectSetInteger(0,"EvC",OBJPROP_WIDTH,canvW); ObjectSetInteger(0,"NwC",OBJPROP_WIDTH,canvW); if(InpSeparateLanes) { ObjectSetInteger(0,"RsiC",OBJPROP_WIDTH,canvW); ObjectSetInteger(0,"StoC",OBJPROP_WIDTH,canvW); ObjectSetInteger(0,"MacC",OBJPROP_WIDTH,canvW); ObjectSetInteger(0,"CciC",OBJPROP_WIDTH,canvW); } else { ObjectSetInteger(0,"AllC",OBJPROP_WIDTH,canvW); } } // draw events DrawAll(); // draw news newsCanvas.Erase(ARGB(170,0,0,0)); string nt = totalNews>0?newsHeadlines[0]:placeholder; newsCanvas.TextOut(offNews,(lineH-newsCanvas.TextHeight(nt))/2, nt,XRGB(255,255,255),ALIGN_LEFT); offNews-=InpNewsSpeed; if(offNews+newsCanvas.TextWidth(nt)<-20) offNews=canvW; // draw insights if(InpSeparateLanes) { string t; t=ComputeRSIInsight(); rsiCanvas.Erase(ARGB(120,0,0,0)); rsiCanvas.TextOut(offRSI,(lineH-rsiCanvas.TextHeight(t))/2, t,XRGB(180,220,255),ALIGN_LEFT); offRSI-=InpInsightSpeed; if(offRSI+rsiCanvas.TextWidth(t)<-20) offRSI=canvW; t=ComputeStochInsight(); stochCanvas.Erase(ARGB(120,0,0,0)); stochCanvas.TextOut(offStoch,(lineH-stochCanvas.TextHeight(t))/2, t,XRGB(180,220,255),ALIGN_LEFT); offStoch-=InpInsightSpeed; if(offStoch+stochCanvas.TextWidth(t)<-20) offStoch=canvW; t=ComputeMACDInsight(); macdCanvas.Erase(ARGB(120,0,0,0)); macdCanvas.TextOut(offMACD,(lineH-macdCanvas.TextHeight(t))/2, t,XRGB(180,220,255),ALIGN_LEFT); offMACD-=InpInsightSpeed; if(offMACD+macdCanvas.TextWidth(t)<-20) offMACD=canvW; t=ComputeCCIInsight(); cciCanvas.Erase(ARGB(120,0,0,0)); cciCanvas.TextOut(offCCI,(lineH-cciCanvas.TextHeight(t))/2, t,XRGB(180,220,255),ALIGN_LEFT); offCCI-=InpInsightSpeed; if(offCCI+cciCanvas.TextWidth(t)<-20) offCCI=canvW; } else { combinedCanvas.Erase(ARGB(120,0,0,0)); string txt=ComputeAllInsights(); combinedCanvas.TextOut(offCombined,(lineH-combinedCanvas.TextHeight(txt))/2, txt,XRGB(180,220,255),ALIGN_LEFT); offCombined-=InpInsightSpeed; if(offCombined+combinedCanvas.TextWidth(txt)<100) offCombined=canvW; } // batch update eventsCanvas.Update(true); newsCanvas. Update(true); if(InpSeparateLanes) { rsiCanvas. Update(true); stochCanvas.Update(true); macdCanvas. Update(true); cciCanvas. Update(true); } else { combinedCanvas.Update(true); } }
6. Aufräumen bei OnDeinit
Ein ordnungsgemäßer Abbau verhindert verwaiste Bitmaps und verweilende Zeitgeber. Jedes CreateBitmapLabel in OnInit wird durch ein Destroy plus ObjectDelete in OnDeinit ergänzt, und der Timer wird beendet, um jegliche Rückrufe zu vermeiden. Das explizite Löschen von dynamischen Objekten (z. B. Ereignisinstanzen) rundet eine robuste Bereinigungsphase ab.
//+------------------------------------------------------------------+ //| OnDeinit: cleanup | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { EventKillTimer(); eventsCanvas.Destroy(); ObjectDelete(0,"EvC"); newsCanvas.Destroy(); ObjectDelete(0,"NwC"); if(InpSeparateLanes) { rsiCanvas.Destroy(); ObjectDelete(0,"RsiC"); stochCanvas.Destroy();ObjectDelete(0,"StoC"); macdCanvas.Destroy(); ObjectDelete(0,"MacC"); cciCanvas.Destroy(); ObjectDelete(0,"CciC"); } else { combinedCanvas.Destroy();ObjectDelete(0,"AllC"); } for(int i=0;i<ArraySize(highArr);i++) delete highArr[i]; for(int i=0;i<ArraySize(medArr);i++) delete medArr[i]; for(int i=0;i <ArraySize(lowArr);i++) delete lowArr[i]; ArrayResize(newsHeadlines,0); }
Indem wir die neuen Komponenten in geeigneter Weise in den bestehenden Code aus dem vorigen Artikel integriert haben, verfügen wir nun über eine aktualisierte Version unseres Programms, die Echtzeit-Indikatoren enthält. Im nächsten Abschnitt werden wir die Testergebnisse dieser neu hinzugefügten Funktionen vorstellen, gefolgt von einer Zusammenfassung der wichtigsten Erkenntnisse und Schlussfolgerungen aus dem Entwicklungsprozess.
Tests
In MetaTrader 5 können Sie den EA testen, indem Sie ihn aus dem Bereich „Expert Advisor“ im Navigator-Panel auf ein Chart ziehen. Ab der Version 1.04 enthält der News Headline EA nun integrierte Indikator-Einblicke. Die folgende Abbildung zeigt, wie Sie über die Eingabeeinstellungen des EA zwischen der standardmäßigen einspurigen Ansicht und der Ansicht mit getrennten Fahrspuren wechseln können. Bitte beachten Sie, dass der API-Schlüssel aus Sicherheitsgründen absichtlich leer gelassen wurde und vor der Verwendung manuell eingegeben werden sollte.

Testen der neuen Funktionen
Sobald der Alpha Vantage API-Schlüssel hinzugefügt wurde, werden die Schlagzeilen zusammen mit unseren neu integrierten Indikator-Einblicken angezeigt, wie unten dargestellt.

Der News Headline EA mit den Indikator-Einblicke
Ich habe den EA mit dem Strategy Tester getestet, und obwohl die Leinwand-Bahnen angezeigt wurden, erschienen sie ohne Daten. Dies liegt wahrscheinlich daran, dass die benötigten Informationen – wie Nachrichten und Indikatorwerte – in Echtzeit abgerufen werden müssen, was das Testgerät nicht vollständig unterstützt.
Schlussfolgerung
Um alles zusammenzufassen, haben wir unsere Idee erfolgreich zum Leben erweckt. Wir haben gezeigt, dass es möglich ist, ein integriertes On-Chart-Tool zu entwickeln, das wichtige Handelsinformationen – Wirtschaftskalender, Finanznachrichten und regelbasierte Indikatoren – auf einer kompakten, visuell zugänglichen Oberfläche bereitstellt.
Die Einbeziehung von Indikatoren ist für Händler besonders wertvoll, da sie einen unmittelbaren Kontext für die Marktbedingungen liefern und den Nutzern helfen, fundierte Entscheidungen zu treffen, ohne zwischen mehreren Indikatorfenstern oder Charts wechseln zu müssen. Dies verbessert die Effizienz und spart wertvollen Bildschirmplatz.
Aus der Entwicklungsperspektive haben wir unser Verständnis dafür vertieft, wie man mit Hilfe der MQL5-API Daten von den in MetaTrader 5 integrierten Indikatoren abruft und manipuliert. Indem wir die Flexibilität der CCanvas-Klasse nutzten, konnten wir diese Daten in einem visuell eindeutigen und optimierten Format darstellen und so die Nutzerfreundlichkeit verbessern. Dieses Projekt zeigte die Leistungsfähigkeit der programmatischen Schnittstellenanpassung in MQL5 und ebnete auch den Weg für künftige Erweiterungen – wie z. B. Analysteneinblicke oder nutzerdefinierte Indikatorintegrationen – die den Nutzen des Tools weiter erhöhen könnten.
Nachfolgend habe ich eine Übersichtstabelle erstellt, in der die wichtigsten Erkenntnisse aus dieser Diskussion zusammengefasst sind. Am Ende des Artikels finden Sie auch den vollständigen Quellcode. Sie sind herzlich eingeladen, sich an der Diskussion zu beteiligen, indem Sie Ihre Gedanken und Ihr Feedback in den Kommentaren mitteilen – Ihr Beitrag wird sehr geschätzt!
Wichtige Lektionen
| Lektion | Beschreibung |
|---|---|
| Trennung der Belange | Die Verwendung von unterschiedlichen Vordrucken für Ereignisse, Nachrichten und Indikatoren verbessert die Modularität des Codes und ermöglicht ein flexibles Layout und Styling. |
| Verwendung von CCanvas | Sie ermöglicht die reibungslose Darstellung von nutzerdefinierten Texten und Grafiken im Chart und bietet damit einzigartige Erweiterungen der Nutzeroberfläche, die über die Standardobjekte von MetaTrader 5 hinausgehen. |
| Logik der Bildlaufanimation | Die Verwaltung von Offset-Variablen hilft bei der Erstellung flüssiger, horizontal scrollender Textelemente – ideal für dynamische Anzeigen wie Newsfeeds und Indikatorzusammenfassungen. |
| Das DRY-Prinzip | Durch die Erstellung von Hilfsfunktionen wie SetCanvas bleibt der Code sauber, wiederverwendbar und leichter zu pflegen, da Wiederholungen vermieden werden. |
| Die API-Integration | Die Verwendung von WebRequest zum Abrufen externer Daten zeigt, wie MetaTrader 5 mit Diensten von Drittanbietern wie Finanznachrichtenanbietern erweitert werden kann. |
| Echtzeit-Dateneinschränkungen | Live-Daten wie Wirtschaftsereignisse und Marktnachrichten erfordern oft einen Echtzeit-Zugang, der in der Strategy Tester-Umgebung möglicherweise nicht möglich ist. |
| Eingebaute Indikatoren verwenden | Der Zugriff auf und die Interpretation von Puffern von Standardindikatoren wie RSI, MACD und CCI ermöglicht die automatische Generierung von Erkenntnissen direkt im Code. |
| Kompaktes UI-Design | Durch die Konsolidierung mehrerer Datenströme in einer einzigen blätterbaren Spur wird das Chart weniger unübersichtlich, während alle wichtigen Informationen an einer Stelle zur Verfügung stehen. |
| Dynamische Positionierung der Leinwände | Die Neupositionierung von Canvas-Objekten auf der Grundlage von Nutzereinstellungen und Chartabmessungen gewährleistet ein reaktionsschnelles und anpassungsfähiges Layout. |
| Versionskontrolle und Feature Tracking | Eindeutige Versionsnummern helfen dabei, Änderungen zu verfolgen, den Fortschritt zu dokumentieren und Aktualisierungen effektiv an Nutzer und Entwickler zu kommunizieren. |
Anlagen
| Datei | Version | Beschreibung |
|---|---|---|
| News Headline EA.mq5 | 1.04 | Expert Advisor, der die Ereignisse des Wirtschaftskalenders und die Schlagzeilen der Marktnachrichten in Echtzeit direkt auf dem Chart anzeigt, indem er das integrierte MQL5 Canvas und die Alpha Vantage API verwendet, sowie technische Einblicke in Indikatoren. |
Übersetzt aus dem Englischen von MetaQuotes Ltd.
Originalartikel: https://www.mql5.com/en/articles/18528
Warnung: Alle Rechte sind von MetaQuotes Ltd. vorbehalten. Kopieren oder Vervielfältigen untersagt.
Dieser Artikel wurde von einem Nutzer der Website verfasst und gibt dessen persönliche Meinung wieder. MetaQuotes Ltd übernimmt keine Verantwortung für die Richtigkeit der dargestellten Informationen oder für Folgen, die sich aus der Anwendung der beschriebenen Lösungen, Strategien oder Empfehlungen ergeben.
Selbstoptimierende Expert Advisors in MQL5 (Teil 8): Analyse mehrerer Strategien (2)
MQL5-Assistenz-Techniken, die Sie kennen sollten (Teil 71): Verwendung der Muster des MACD und des OBV
Senden von Nachrichten von MQL5 an Discord, Erstellen eines Discord-Bots für MetaTrader 5
Datenwissenschaft und ML (Teil 45): Forex Zeitreihenprognosen mit dem Modell PROPHET von Facebook
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.