Entwicklung des Price Action Analysis Toolkit (Teil 49): Integration von Trend-, Momentum- und Volatilitätsindikatoren in ein MQL5-System
Inhalt
- Einführung
- Das Verständnis von Indikatoren
- Überblick über die Strategie
- MQL5-Implementierung
- Tests und Ergebnisse
- Schlussfolgerung
Einführung
Im Analyseprozess eines jeden Händlers spielen technische Indikatoren eine zentrale Rolle bei der Erkennung von Trends, der Einschätzung der Dynamik und dem Aufzeigen potenzieller Einstiegs- oder Ausstiegspunkte. In MetaTrader 5 bedeutet die Anwendung mehrerer Indikatoren auf ein einzelnes Chart jedoch oft, dass man wiederholt durch den Indikatorenbaum navigieren, jedes Tool suchen und manuell einen nach dem anderen anhängen muss. Während das für zwei oder drei Indikatoren noch überschaubar ist, wird es für eine vollständige Analyse mit mehreren Indikatoren schnell mühsam. Für neue Nutzer ist dies doppelt frustrierend, da sie sich merken müssen, in welchem Unterordner sich ein bestimmter Indikator befindet, und außerdem viel Zeit damit verschwenden, immer wieder nach denselben Indikatoren zu suchen. Jede Hinzufügung ist eine weitere Unterbrechung des Arbeitsablaufs, und man verliert leicht den Fokus auf die tatsächliche Marktinterpretation.
Das folgende Diagramm veranschaulicht, wie Sie in MetaTrader 5 navigieren, um verschiedene Indikatoren zu finden und darauf zuzugreifen.

In diesem Artikel wird ein MQL5 Expert Advisor vorgestellt, der diesen Prozess automatisiert und rationalisiert, indem er
- automatisch Schlüsselindikatoren direkt im Chart auflistet,
- einen einheitlichen Überblick über die wichtigsten technischen Messgrößen anbietet – unterteilt in Trend, Momentum und Volatilität.
- die Indikatorwerte in Echtzeit und Erzeugung einer kombinierten Verzerrung interpretiert: kaufen, verkaufen oder neutral.
- Richtungspfeile und Farbkodierung zur sofortigen visuellen Interpretation der vorherrschenden Marktstimmung präsentiert.
Das Dashboard wird fortlaufend aktualisiert, ohne dass mehrere Indikatorfenster geöffnet oder Chartvorlagen ausgetauscht werden müssen, sodass alle Analysen in einer übersichtlichen Ansicht dargestellt werden. Im Gegensatz zu herkömmlichen Ansätzen, die sich auf separate Unterfenster oder mehrere Indikatoranhänge stützen, integriert dieses System alle wesentlichen Analysekomponenten in einer einzigen, interaktiven Schnittstelle. Sie können die Profile umschalten, um sich nur auf trendbasierte Tools, Momentum-Oszillatoren oder Volatilitätsmesswerte zu konzentrieren – oder sie alle zusammen anzeigen. Mit den Steuerelementen Hide All und Show All können Sie das Chart mit einem einzigen Mausklick entschlacken und das vollständige Dashboard ebenso einfach wiederherstellen. Das Ergebnis ist ein Kontrollzentrum für die technische Analyse, in dem der Chart selbst zum Arbeitsbereich wird. Händler können in Sekundenschnelle von rohen Indikatordaten zu umsetzbaren Entscheidungen übergehen, ohne den Umweg über den Indikatoren-Ordner zu nehmen oder komplexe Setups manuell zu rekonstruieren. In den folgenden Abschnitten werden wir die einzelnen verwendeten Indikatoren, die Strategielogik hinter dem kombinierten Signal und die MQL5-Implementierung, die es live auf Ihrem Chart funktionieren lässt, untersuchen.
Das Verständnis von Indikatoren
Um sich ein zuverlässiges Bild von den Marktbedingungen zu machen, stützen sich Händler oft auf mehr als einen Typ technischer Indikatoren. Jeder Indikator bietet eine einzigartige Perspektive: Einige sind darauf ausgelegt, den vorherrschenden Trend zu verdeutlichen, andere die Geschwindigkeit und Stärke der Kursbewegung zu messen, und wieder andere dienen der Quantifizierung der Volatilität. Durch die Kombination dieser verschiedenen Perspektiven ist es möglich, eine umfassendere und zuverlässigere Marktanalyse zu erstellen, anstatt sich auf ein einziges Instrument zu verlassen. Im Multi Indicator Handler System wird diese Vielfalt an Inputs in drei Hauptgruppen organisiert: Trend, Momentum und Volatilität.
Trend-Indikatoren
Trendindikatoren sind die Grundlage der Richtungsanalyse. Sie geben Aufschluss darüber, ob sich der Markt generell nach oben, nach unten oder seitwärts bewegt, und bilden den primären Kontext für die meisten Handelsentscheidungen. In diesem System dient der EMA 50 als reaktionsschneller gleitender Durchschnitt für die mittelfristige Trenderkennung, während der EMA 200 als längerfristiger Bias-Filter fungiert – Kurse oberhalb des EMA 200 signalisieren eine steigende, Kurse unterhalb eine fallende Stimmung.

Ergänzt werden diese Durchschnittswerte durch den ADX 14, der die Stärke des aktuellen Trends unabhängig von dessen Richtung misst. Ein steigender ADX, insbesondere über dem häufig beobachteten Wert von 25, deutet in der Regel darauf hin, dass sich der Markt in einem starken Trend befindet.
Momentum-Indikatoren
Momentum-Indikatoren hingegen konzentrieren sich auf die Richtung, die Geschwindigkeit und die Stärke der Kursbewegung. Das System verwendet zwei RSI-Werte mit den Perioden 14 und 28, um überkaufte und überverkaufte Bedingungen über verschiedene Zeiträume zu erkennen. Der MACD (12,26,9) fügt eine Ebene der Crossover-basierten Momentum-Analyse hinzu, die sich aus der Beziehung zwischen zwei EMAs ergibt, während der Stochastik-Oszillator (5,3) den aktuellen Preis im Verhältnis zu seiner jüngsten Spanne misst und sehr empfindlich auf Wendepunkte reagiert. Der Indikator Momentum-14 drückt die Preisbeschleunigung in absoluten Zahlen aus, wobei Werte über 100 auf einen Aufwärtsdruck und Werte unter 100 auf einen Abwärtsdruck hinweisen.

Der CCI 20 erkennt Abweichungen von den statistischen Normen, die häufig auf Erschöpfungspunkte hinweisen, während der Williams %R 14 eine schnell reagierende überkaufte/überverkaufte Anzeige bietet, die der Stochastik ähnelt, jedoch auf einer anderen Skala. Zusammengenommen zeigen diese Momentum-Instrumente, wann sich ein Trend wahrscheinlich ausweiten oder umkehren wird.
Volatilitätsindikatoren
Die letzte Gruppe, die Volatilitätsindikatoren, konzentriert sich darauf, wie stark sich der Markt tatsächlich bewegt. ATR 14 misst die durchschnittliche tatsächliche Preisspanne über den festgelegten Zeitraum, wobei ein Anstieg der Spanne auf eine größere Spanne und einen aktiveren Markt hindeutet. Bollinger Bänder (20,2) umschließen einen gleitenden Durchschnitt mit oberen und unteren Bändern, die auf Standardabweichungen basieren, und erfassen visuell Perioden, in denen sich der Preis über seine typische Spanne hinaus ausdehnt – ein Verhalten, das häufig Umkehrungen oder Volatilitätsspitzen vorausgeht. Auch wenn Volatilitätsindikatoren nicht direkt die Richtung vorhersagen, liefern sie doch einen wichtigen Kontext für das Risikomanagement und das optimale Timing des Handels.
Durch die Gruppierung der Indikatoren nach ihrer analytischen Funktion bietet der Multi Indicator Handler zwei wesentliche Vorteile. Erstens können Händler zwischen Profilen wechseln, um sich nur auf trendbasierte Tools, Momentum-Oszillatoren oder Volatilitätsmessungen zu konzentrieren, je nachdem, welche Frage sie gerade beantworten müssen. Zweitens ermöglicht es eine gewichtete Entscheidungsfindung bei der Berechnung des kombinierten Bias: Trendindikatoren haben den größten Einfluss, Momentum spielt eine unterstützende Rolle, und Volatilität hat das geringste Gewicht. Dies spiegelt ihre praktische Bedeutung bei der Bestimmung von Richtungsvorgaben wider, während gleichzeitig der breitere Kontext der Marktdynamik berücksichtigt wird.
Im nächsten Abschnitt, Strategieübersicht, werden wir diese Indikatorgruppen mit der Abstimmungslogik des Systems verbinden. Sie werden sehen, wie die einzelnen Signale in eine einzige Empfehlung von KAUF, VERKAUF oder NEUTRAL umgewandelt werden und wie das interaktive Dashboard-Design diese Informationen sofort für die Entscheidungsfindung zugänglich macht.
Überblick über die Strategie
Nachdem die Indikatoren in Trend, Momentum und Volatilität gruppiert wurden, besteht der nächste Schritt darin, ihre individuellen Messwerte in ein einheitliches Handelssignal umzuwandeln. Der Multi Indicator Handler wendet ein strukturiertes Abstimmungssystem an, bei dem jeder Indikator seine eigene Tendenz – Kaufen, Verkaufen oder Neutral – auf der Grundlage vordefinierter Bedingungen erzeugt. Beispielsweise könnte ein steigender EMA-Anstieg ein Kaufvotum, ein fallender RSI unter 30 ein Kaufvotum und ein überkaufter Stochastik ein Verkaufsvotum darstellen. Jede dieser Stimmen wird entsprechend der Indikatorgruppe gewichtet: Trendindikatoren haben den größten Einfluss, was ihre grundlegende Rolle für die Marktrichtung widerspiegelt; Momentum-Indikatoren üben einen mäßigen Einfluss aus; und Volatilitätsindikatoren haben ein geringeres Gewicht, da sie eher kontextbezogene Informationen liefern als richtungsweisende Entscheidungen.
Das System aktualisiert diese Signale kontinuierlich in Echtzeit mit Hilfe der Ereignisbehandlung durch OnTimer. Dieser Ansatz bietet eine reibungslosere und leistungsfähigere Steuerung als die alleinige Verwendung von OnTick, die auf Märkten mit geringerer Volatilität inkonsistent sein kann. In jedem Aktualisierungszyklus wird der Puffer jedes Indikators gelesen – oft nur für den letzten Balken – und mit einer einfachen, auf die Rolle des jeweiligen Instruments zugeschnittenen Logik interpretiert. Sobald die gewichteten Signale der einzelnen Gruppen zusammengezählt sind, berechnet der EA die Gesamtverzerrung und gibt eine einzige Richtungsangabe aus: KAUFEN, VERKAUFEN oder NEUTRAL. Das Ergebnis wird auf dem Chart mit farbkodiertem Text angezeigt, sodass Händler die Marktstimmung auf einen Blick erkennen können, ohne mehrere Unterfenster durchsuchen zu müssen.
Ein wesentliches Konstruktionsmerkmal des Multi-Indikator-Handlers ist sein Profilwechselmechanismus. Händler können zwischen vier Profilmodi umschalten: ALL, das alle Indikatoren im Dashboard anzeigt; TREND, das nur trendbasierte Tools isoliert; MOMENTUM, das die Ansicht auf Oszillatoren und Momentum-Messungen beschränkt; und VOL, das sich auf Volatilitätsmetriken konzentriert. Diese Funktionalität ermöglicht es dem Händler, sich auf die Art der Analyse zu konzentrieren, die für seine Strategie zu einem bestimmten Zeitpunkt am wichtigsten ist. Beispielsweise könnte ein Händler vor dem Einstieg in einen Handel das Momentum-Profil auswählen, um sicherzustellen, dass das Setup genügend Kraft hat; während er einen offenen Handel verwaltet, könnte er das Trend-Profil aktiv lassen, um sicherzustellen, dass der Kerntrend intakt bleibt.
Zur Ergänzung der Profilumschaltung enthält der EA zwei wichtige Arbeitsbereichskontrollen: Hide All und Show All. Wenn Sie auf Hide All (alles ausblenden) klicken, werden alle Indikatorobjekte mit Ausnahme der beiden Steuerungsschaltflächen aus dem Chart entfernt, sodass Sie einen ungehinderten Blick auf das Preisgeschehen haben. Wenn Sie auf Show All (alles einblenden) klicken, wird das Dashboard für das aktive Profil vollständig neu aufgebaut, sodass eine voll funktionsfähige Analyseumgebung ohne manuelle Neukonfiguration wiederhergestellt wird. Diese dynamische Chartsteuerung verbessert die Übersichtlichkeit in Momenten hoher Volatilität und ermöglicht ein schnelles Umschalten zwischen der reinen Kursanzeige und der detaillierten Bestätigung durch mehrere Indikatoren.
Die Logik der Strategie ist absichtlich modular aufgebaut. Die Interpretation jedes Indikators ist innerhalb des Systems in sich geschlossen, d. h. Händler können problemlos neue Tools einfügen, Signalbedingungen anpassen oder Gewichtungen ändern, ohne die Kernfunktionen des Dashboards zu unterbrechen. Durch die Gruppenabstimmung wird sichergestellt, dass kein einzelner Ausreißer die Tendenz dominiert, und das Gesamtgewichtungsschema kann fein abgestimmt werden, um unterschiedlichen Risikotoleranzen oder Handelsstilen gerecht zu werden. Kurz gesagt, der Multi Indicator Handler wurde entwickelt, um Händler mit klaren, synthetischen Marktstimmungen zu versorgen und gleichzeitig maximale Flexibilität und Geschwindigkeit in Live-Umgebungen zu gewährleisten.

Im nächsten Abschnitt, der MQL5-Implementierung, wird erläutert, wie dieses Abstimmungssystem, die Profilsteuerung und die Chartschnittstelle kodiert sind – von der Entwurfslogik bis zu den tatsächlichen Funktionen, der Ereignisbehandlung und der Objekterstellung, die dieses Tool funktionieren lassen.
MQL5-Implementierung
Der Multi Indicator Handler Expert Advisor dient sowohl als analytische Engine als auch als visuelle Schnittstelle für den Handel mit Charts in MetaTrader 5. Sein Design ermöglicht es, Daten von mehreren technischen Indikatoren zu sammeln und zu interpretieren und diese Werte dann in einem interaktiven Dashboard direkt auf dem Chart anzuzeigen. Was ihn so effektiv macht, ist die Art und Weise, wie der Code seine Hauptaufgaben trennt: Datenerfassung, Signalinterpretation und grafische Darstellung.
Programmkopf und Eingabeparameter
Die Datei beginnt mit einer Kopfzeile, die Angaben zum Autor, die Versionsnummer, einen Urheberrechtshinweis und einen Link zu Ihrem MQL5-Profil enthält. Darunter befinden sich die #property-Direktiven, die Kompilierungsregeln und Metadaten vorgeben, die später im MetaTrader Navigator erscheinen. Es folgen zwei einfache, aber entscheidende Eingabevariablen. InpTF legt den Zeitrahmen für interne Berechnungen fest. Der Standardwert ist PERIOD_CURRENT, kann aber geändert werden, um Daten über mehrere Zeitrahmen hinweg zu analysieren, z. B. um Daten des 1-Stunden-Charts anzuzeigen und gleichzeitig die Logik von Tagesindikatoren anzuwenden. InpUpdateMs ist der Aktualisierungs-Timer, der in Millisekunden eingestellt wird; dadurch wird sichergestellt, dass das Dashboard in einem gleichmäßigen Rhythmus aktualisiert wird, unabhängig vom Tickvolumen des Marktes.
#property version "1.0" #property strict input ENUM_TIMEFRAMES InpTF = PERIOD_CURRENT; input int InpUpdateMs = 600; #define SIG_NEUTRAL 0 #define SIG_BUY 1 #define SIG_SELL -1
Um Analysesignale programmatisch darzustellen, werden die Konstanten SIG_BUY, SIG_SELL und SIG_NEUTRAL deklariert. Ihre ganzzahligen Werte werden später bei der Summierung und Gewichtung der Stimmen der einzelnen Indikatoren verwendet.
Profilmodi über Enumerationen
Eine Enum namens ProfilTyp definiert die vier Profilmodi für das Dashboard: ALL, TREND, MOMENTUM und VOL. Dies ermöglicht ein intuitives Umschalten zwischen den Modi während der Laufzeit. Eine globale Variable, aktuellesProfilenthält den derzeit sichtbaren Modus.
enum ProfileType { PROFILE_ALL, PROFILE_TREND, PROFILE_MOMENTUM, PROFILE_VOL }; ProfileType currentProfile = PROFILE_ALL; struct IndicatorSlot { string id; string name; int handle; int group; // 0=Trend,1=Momentum,2=Volatility string btnName; string lblName; };
Anstatt rohe Ganzzahlen für die Modi zu verwenden, sorgt die Enumeration dafür, dass der Code selbstdokumentierend bleibt. Durch das Lesen von PROFILE_TREND im Code erfährt ein Entwickler oder Händler sofort, welche Art von Indikatoren angezeigt wird.
IndicatorSlot Datenstruktur
Jeder Indikator wird durch einen IndikatorSlot Struktur dargestellt. Hier sind fünf wichtige Eigenschaften zusammengefasst:
- Eine interne Kennung, z. B. „EMA50“.
- Ein nutzerfreundlicher Name, wie EMA 50.
- Ein MQL5-Handle, das von Funktionen wie iMA oder iRSI zurückgegeben wird.
- Eine Gruppennummer, die die Kategorie Trend, Momentum oder Volatilität angibt.
- Objektnamen (btnName und lblName) für die mit dem Indikator verbundene Schaltfläche und Beschriftung.
Durch die Zusammenfassung in einer Struktur wird der High-Level-Code einfacher zu pflegen und zu erweitern. Auf diese Weise benötigen Sie keine separaten Arrays für jede Eigenschaft, sondern ein einziger Slot enthält alle zugehörigen Daten für einen bestimmten Indikator.
Globale Arrays für Werte und Signale
Neben der Struktur werden die Zustände der einzelnen Indikatoren in drei dynamischen Arrays festgehalten:
- values[]: letzter numerischer Wert aus den Puffern des Indikators.
- signals[]: interpretiertes Signal (+1 für Kaufen, -1 für Verkaufen, 0 für Neutral).
- histValues[50][10]: einfacher Verlauf, der die letzten 10 Messwerte für bis zu 50 Indikatoren speichert. Diese unterstützen die Mini-Trends „Sparkline“, die neben jeder Kennzeichnung gezeichnet werden.
IndicatorSlot slots[]; double values[]; int signals[]; double histValues[50][10];
Dieses Design bedeutet, dass jeder Slot mehrere zugehörige Datensätze hat, die unabhängig voneinander aktualisiert werden können, ohne die anderen zu stören.
Hilfsfunktionen
Die erste Hilfsfunktion des EA, ObjExists(), ist eine Sicherheitsfunktion, die prüft, ob ein Chartobjekt existiert, bevor es erstellt oder gelöscht wird. Wenn dies nicht der Fall ist, kann der Versuch, ein vorhandenes Objekt neu zu erstellen, zu visuellen Störungen führen oder Stile unerwartet überschreiben.
bool ObjExists(const string name) { return(ObjectFind(0,name)!=-1); }
Die zweite Hilfsfunktion, AddSlot(), übernimmt die Größenänderung des Arrays und die Initialisierung, die für das Hinzufügen von Indikatoren erforderlich ist. Es setzt die Standardsignalzustände auf neutral, löscht den Sparkline-Verlauf und weist konsistente Objektnamen mit einem Schaltflächen- und Beschriftungspräfix zu.
Zentralisierung der Erstellung von Indikatorhandles
Mit der Funktion CreateIndicators() legt der EA fest, welche Indikatoren aufgenommen werden sollen.
void CreateIndicators() { ArrayResize(slots,0); ArrayResize(values,0); ArrayResize(signals,0); // Trend AddSlot("EMA50","EMA 50", iMA(Symbol(),InpTF,50,0,MODE_EMA,PRICE_CLOSE),0); AddSlot("EMA200","EMA 200", iMA(Symbol(),InpTF,200,0,MODE_EMA,PRICE_CLOSE),0); AddSlot("ADX14","ADX 14", iADX(Symbol(),InpTF,14),0); // Momentum AddSlot("RSI14","RSI 14", iRSI(Symbol(),InpTF,14,PRICE_CLOSE),1); ... // Volatility AddSlot("ATR14","ATR 14", iATR(Symbol(),InpTF,14),2); AddSlot("BB20","Boll 20,2", iBands(Symbol(),InpTF,20,0,2.0,PRICE_CLOSE),2); }
Zunächst werden alle Arrays gelöscht, dann wird AddSlot() für jedes Werkzeug aufgerufen. Eingebaute MQL5-Funktionen wie iMA, iADX, iRSI, iMACD und andere erzeugen Indikator-Handles, d.h. numerische IDs, die den EA mit internen, in Puffern gespeicherten MetaTrader-Berechnungen verbinden.
void AddSlot(string id,string name,int handle,int group) { int n=ArraySize(slots); ArrayResize(slots,n+1); ArrayResize(values,n+1); ArrayResize(signals,n+1); slots[n].id=id; slots[n].name=name; slots[n].handle=handle; slots[n].group=group; slots[n].btnName="btn_"+id; slots[n].lblName="lbl_"+id; signals[n]=SIG_NEUTRAL; values[n]=0.0; for(int j=0;j<10;j++) histValues[n][j]=0.0; }
Die Indikatoren sind entsprechend ihrer analytischen Funktion numerisch gruppiert: Trend = 0, Momentum = 1, Volatilität = 2. Diese Gruppennummer ist später sowohl für die Filterung (Profilansicht) als auch für die Anwendung von Gewichtungen bei der Signalaggregation entscheidend.
Erstellen des Chartpanels
Die Funktion BuildPanel() überwacht das Zeichnen des Dashboards. Für jeden Steckplatz im aktiven Profil erstellt es
- Eine Schaltfläche, die den Namen des Indikators anzeigt.
- Ein Feld, das seinen Wert und seine Signalverzerrung anzeigt.
- Eine Sparkline, die eine Miniaturansicht der aktuellen Richtung zeigt.
Die Objekte werden vertikal mit einem Start-Y-Versatz und einem konstanten Abstand angeordnet. Am Ende der Liste wird ein „Overall“-Bias-Label gezeichnet, und oben rechts wird eine profileBtn zum Umschalten der Profile erstellt.
void BuildPanel(ProfileType filter) { int y=38, spacing=26; for(int i=0; i<ArraySize(slots); i++) { if(filter==PROFILE_ALL || slots[i].group==(int)filter) { ObjectCreate(0,slots[i].btnName,OBJ_BUTTON,0,0,0); ObjectSetString(0,slots[i].btnName,OBJPROP_TEXT,slots[i].name); ObjectCreate(0,slots[i].lblName,OBJ_LABEL,0,0,0); ObjectSetString(0,slots[i].lblName,OBJPROP_TEXT,"Val: -- Sig: NEUTRAL"); string spName="spark_"+slots[i].id; ObjectCreate(0,spName,OBJ_TREND,0,0,0); y += spacing; } } }
Die Verwendung von Chartobjekten wie OBJ_BUTTON und OBJ_LABEL bedeutet, dass die Nutzeroberfläche interaktiv sein kann, auf Klicks reagiert und übersichtlich gestaltet ist, ohne auf mehrere Indikatorfenster angewiesen zu sein.
Wiederaufbau des Dashboards
Wenn sich der Profilmodus ändert oder das Steuerelement Show All anzeigen gedrückt wird, wird ShowDashboard() ausgeführt. Zunächst werden alle Objekte mit Ausnahme der Schaltflächen Ausblenden und Anzeigen gelöscht. Es stellt dann sicher, dass diese beiden Schaltflächen vorhanden sind, indem es sie neu erstellt, falls sie nicht vorhanden sind. Wenn die Steuerelemente gesichert sind, wird BuildPanel() aufgerufen, um die Nutzeroberfläche des Indikators für das gewählte Profil neu zu füllen.
void ShowDashboard(ProfileType filter) { int total=ObjectsTotal(0,0,-1); for(int i=total-1;i>=0;i--) { string name=ObjectName(0,i); if(name!="btn_hide" && name!="btn_show") ObjectDelete(0,name); } // Ensure control buttons exist if(!ObjExists("btn_hide")) { /* create btn_hide */ } if(!ObjExists("btn_show")) { /* create btn_show */ } BuildPanel(filter); }
Dieses Muster schützt vor dem Verlust von Kernkontrollen in der Mitte der Sitzung und sorgt dafür, dass das Armaturenbrett sauber wiederhergestellt wird.
Signalauswertung pro Indikator
Die Funktion InterpretIndicator() ist die Funktion, mit der technische Anzeigen an Bedeutung gewinnen. Es verwendet die Handles der einzelnen Indikatoren, um Werte mit CopyBuffer() zu ziehen. Dann wendet es je nach Indikatorart logische Regeln an:
- EMA: Die Steigung zwischen den Balken entscheidet über die Kauf-/Verkaufsneigung.
- ADX: Ein Wert über 25 signalisiert einen Trend.
- RSI: Über 70 und fallend bedeutet verkaufen, unter 30 und steigend bedeutet kaufen.
- MACD: Über Null steht für Kaufen, unter Null für Verkaufen.
- Stochastic, Momentum, CCI und Williams %R verwenden jeweils ihre charakteristischen Schwellenwerte.
- ATR und Bollinger Bands liefern Informationen über die Volatilität, ohne die Richtung direkt zu beeinflussen.
void InterpretIndicator(int i) { double buf[]; signals[i]=SIG_NEUTRAL; if(slots[i].id=="EMA50"||slots[i].id=="EMA200") { if(CopyBuffer(slots[i].handle,0,0,2,buf)>=2) { double slope=buf[0]-buf[1]; if(slope>0) signals[i]=SIG_BUY; else if(slope<0) signals[i]=SIG_SELL; } } ... }
Die Signale werden entsprechend auf +1, -1 oder 0 gesetzt.
Aktualisieren der Werte und Zeichnen der Sparklines
In jedem Zyklus des Timers berechnet UpdateSlot() das Signal eines Indikators neu, verschiebt seine historischen Werte, aktualisiert den Text und die Farbe des Labels und ruft DrawSparkline() auf.
void UpdateSlot(int i) { InterpretIndicator(i); for(int j=9;j>0;j--) histValues[i][j]=histValues[i][j-1]; histValues[i][0]=values[i]; string sigText=(signals[i]==SIG_BUY?"BUY":signals[i]==SIG_SELL?"SELL":"NEUTRAL"); ObjectSetString(0,slots[i].lblName,OBJPROP_TEXT, StringFormat("Val: %.5g Sig: %s",values[i],sigText)); DrawSparkline(i); }
DrawSparkline() verwendet zwei Punkte, den jüngsten und den ältesten Wert, die in Zeitkoordinaten abgebildet werden, um eine einfache OBJ_TREND-Linie zu zeichnen. Auch wenn dies nur minimal ist, gibt es einen Überblick über die Richtung.
Berechnung der Gesamtverzerrung
ComputeOverall() durchläuft alle Werte, multipliziert jedes Signal mit seinem Gruppengewicht (Trend × 3, Momentum × 2, Volatilität × 1) und summiert die Ergebnisse. Das Vorzeichen dieser Summe entscheidet über die Gesamtausrichtung: positiv ist KAUFEN, negativ ist VERKAUFEN und null ist NEUTRAL.
int ComputeOverall() { int vote=0; for(int i=0;i<ArraySize(slots);i++) { int w=(slots[i].group==0?3:(slots[i].group==1?2:1)); vote+=signals[i]*w; } if(vote>0) return SIG_BUY; if(vote<0) return SIG_SELL; return SIG_NEUTRAL; }
DrawOverallSignal() aktualisiert den Beschriftungstext „Overall“ und wendet entsprechend Grün, Rot oder Grau an.
Profilumschaltung und Steuerung
NextProfile() durchläuft die Modi sequentiell und ruft jedes Mal ShowDashboard() auf. HideEverythingExceptButtons() löscht alles außer den Steuerelementen Hide und Show und bietet so eine übersichtliche Preisansicht auf Knopfdruck.
Lebenszyklusereignisse und zeitgesteuerte Aktualisierungen
In OnInit() werden Indikatoren erstellt, das anfängliche Dashboard wird aufgebaut und ein Millisekunden-Timer wird gestartet, um Aktualisierungen über OnTimer() durchzuführen.
int OnInit() { CreateIndicators(); ShowDashboard(currentProfile); EventSetMillisecondTimer((uint)MathMax(200,(int)InpUpdateMs)); return INIT_SUCCEEDED; }
OnDeinit() hält den Timer an und löscht alle Chartobjekte, um nach dem Entfernen aufzuräumen.
OnTimer: Die Aktualisierungsschleife
Diese Funktion wird jedes Mal ausgeführt, wenn der Timer tickt. Es aktualisiert alle zum aktiven Profil gehörenden Indikatoren, berechnet die Gesamtvorspannung neu und aktualisiert die Anzeige, wenn sich etwas ändert.
void OnTimer() { for(int i=0;i<ArraySize(slots);i++) if(currentProfile==PROFILE_ALL || slots[i].group==(int)currentProfile) UpdateSlot(i); int ov=ComputeOverall(); DrawOverallSignal(ov); }
Da es sich um ein zeitgesteuertes System handelt, werden die Aktualisierungen auch ohne eingehende Ticks regelmäßig durchgeführt, was eine gleichbleibende Reaktionsfähigkeit gewährleistet.
Reagieren auf Nutzer-Aktionen
OnChartEvent() wartet auf Klicks. Durch Anklicken der Profilschaltfläche wird NextProfile() aufgerufen. Das Anklicken von Hide All ruft HideEverythingExceptButtons() auf; Show All baut das Dashboard über ShowDashboard(currentProfile) wieder auf.
void OnChartEvent(..., const string &sparam) { if(sparam=="profileBtn") NextProfile(); if(sparam=="btn_hide") HideEverythingExceptButtons(); if(sparam=="btn_show") ShowDashboard(currentProfile); }
OnTick: Reserviert für zukünftige Verwendung
OnTick() ist derzeit leer und könnte später erweitert werden, um automatisierte Handelsroutinen auf der Grundlage des berechneten Bias hinzuzufügen – zum Beispiel das Eröffnen von Positionen, wenn die Gesamteinschätzung auf KAUFEN umschaltet, und das Schließen von Positionen, wenn sie auf NEUTRAL oder VERKAUFEN umschaltet.
Durch die Trennung der Aufgaben – Erstellung, Interpretation, Aufbau der Nutzeroberfläche und Aktualisierung – bleibt der EA übersichtlich, anpassungsfähig und effizient. Es ist einfach, Indikatoren hinzuzufügen, Gewichtungen zu ändern oder das Layout neu zu gestalten, ohne die grundlegende Logik umzuschreiben.
Tests und Ergebnisse
Nachdem Sie den Multi Indicator Handler kompiliert und an ein beliebiges Chart in MetaTrader 5 angehängt haben, wird die Schnittstelle sofort geladen und fügt sich nahtlos in die Chartumgebung ein. In der oberen linken Ecke befinden sich zwei kleine Schaltflächen mit der Aufschrift Hide All und Show All, die einen schnellen Zugriff auf die Sichtbarkeit des Dashboards ermöglichen, während sich oben rechts eine Profilauswahl mit der Aufschrift Profil befindet: ALL ermöglicht den Wechsel zwischen verschiedenen Indikatorgruppen für eine gezielte Analyse. Direkt unter diesen Steuerelementen werden in einem übersichtlichen, vertikal ausgerichteten Dashboard alle konfigurierten Indikatoren aufgelistet, wobei für jeden Indikator der Name, der numerische Echtzeitwert und das interpretierte Signal angezeigt werden – so lässt sich klar erkennen, ob die Bedingung eine Kauf-, Verkaufs- oder neutrale Tendenz begünstigt.

Visuelles Verhalten
Jeder Indikator wird automatisch gemäß dem ausgewählten Zeitrahmen und dem durch InpUpdateMs festgelegten Zeitintervall aktualisiert. Die Farbe ändert sich sofort: Grün bedeutet eine Tendenz zum Kauf, rot eine Tendenz zum Verkauf und grau einen neutralen Wert. Jeder Indikator zeigt auch eine winzige funkenförmige Trendlinie auf der rechten Seite, die auf subtile Weise anzeigt, ob die Werte in letzter Zeit gestiegen oder gefallen sind. Im Laufe der Zeit können Sie sehen, wie die Momentum-Indikatoren zwischen rot und grün wechseln, während die langsamer laufenden Trendindikatoren stabil bleiben und die tatsächliche Marktstabilität widerspiegeln.
Ein Beispiel für den Aktualisierungsprozess innerhalb von OnTimer() sieht wie folgt aus:
for(int i=0;i<ArraySize(slots);i++) { if(currentProfile==PROFILE_ALL || slots[i].group==(int)currentProfile) UpdateSlot(i); }
Selbst bei konstanter Bewegung bleibt diese Schleife visuell flüssig, was zeigt, dass der EA Aktualisierungen effizient verarbeitet, ohne dass Objekte einfrieren oder flackern.
Profilwechsel in Aktion
Durch Klicken auf die Schaltfläche Profil werden die Modi ALL, TREND, MOMENTUM und VOL durchlaufen. Das Dashboard wird sofort neu aufgebaut und zeigt nur die für diese Kategorie relevanten Indikatoren an. Dies ist besonders hilfreich, wenn Sie die Analyseansicht wechseln: Bei der Trenderkundung können Sie TREND wählen und die Ausgabe auf gleitende Durchschnitte und ADX beschränken; bei der Beobachtung des potenziellen Einstiegszeitpunkts können Sie MOMENTUM wählen, um RSI-, MACD- und Stochastik-Werte zu sehen.
Intern ist die Logik für dieses Verhalten einfach:
void NextProfile() {
int tmp=(int)currentProfile;
tmp++;
if(tmp>3) tmp=0;
currentProfile=(ProfileType)tmp;
ShowDashboard(currentProfile);
}Diese Funktion sorgt mit einem einzigen Klick für sanfte zyklische Übergänge über alle Profile hinweg.
Steuerelemente ausblenden und anzeigen
Wenn Sie auf die Schaltfläche Hide All klicken, wird das Dashboard ausgeblendet, und es bleiben nur die beiden Schaltflächen sichtbar. Dadurch wird das Chart vollständig entschärft, was für die Überprüfung der rohen Preisaktion oder das manuelle Zeichnen von Trendlinien nützlich ist. Wenn Sie auf Show All drücken, wird das gesamte Dashboard sofort wieder an denselben Stellen und in denselben Farben angezeigt, die es zuvor hatte.
void HideEverythingExceptButtons() {
int total=ObjectsTotal(0,0,-1);
for(int i=total-1;i>=0;i--) {
string name=ObjectName(0,i);
if(name!="btn_hide" && name!="btn_show")
ObjectDelete(0,name);
}
}Dieser Mechanismus funktioniert auch nach einem Profilwechsel oder einer Aktualisierung der Charts, was beweist, dass die Objektverwaltungslogik des Systems robust ist.
Gesamtdynamik des Signals
Im unteren Teil des Dashboards spiegelt das Label „Overall“ kontinuierlich die kombinierte Marktausrichtung wider. Wenn sich die Farben der einzelnen Indikatoren ändern, kann sich dieses Etikett entsprechend rot oder grün färben und den Händlern eine prägnante Interpretation von Dutzenden von Messwerten anzeigen. Das hier verwendete Gewichtungsschema – Trend × 3, Momentum × 2, Volatilität × 1 – führt zu realistischen Ergebnissen: Ein starker Trend behält seine Dominanz, auch wenn die kurzfristigen Oszillatoren vorübergehend nicht übereinstimmen. In der Praxis stimmt die Ausgabe des EA oft mit der Intuition erfahrener Händler überein: Wenn beide EMAs aufwärts tendieren und der ADX hoch ist, wird das Gesamtlabel grün, selbst wenn der RSI schwankt.
Die Differenzierung der Signalberechnung ist innerhalb von ComputeOverall() einfach:
int w=(slots[i].group==0?3:(slots[i].group==1?2:1)); vote += signals[i]*w;
Tests über verschiedene Symbole und Zeitrahmen hinweg; diese Gewichtung führt zu stabilen, vertrauenswürdigen kombinierten Signalen ohne übermäßige Empfindlichkeit.

Leistung und Reaktionsfähigkeit
Die timerbasierte Aktualisierungsstruktur bedeutet, dass der EA reibungslos läuft, egal ob die Ticks schnell oder langsam eintreffen. Die CPU-Belastung bleibt auch bei schnellen Aktualisierungsraten wie 300 ms gering, da nur die im aktuellen Profil sichtbaren Indikatoren verarbeitet werden und nicht alle gleichzeitig. Diese selektive Fortschreibung kann in der Hauptschleife bestätigt werden:
if(currentProfile==PROFILE_ALL || slots[i].group==(int)currentProfile) UpdateSlot(i);
In der Praxis verbessert der Multi Indicator Handler den Arbeitsablauf erheblich. Mit dem konsolidierten Dashboard benötigen Sie nicht mehr mehrere Chartvorlagen: Statt einer Vorlage für gleitende Durchschnitte und einer weiteren für Oszillatoren zeigt ein einziger Chart alle Signale im Zusammenhang an.

Bei der Analyse eines potenziellen Handels gibt der Wechsel von Momentum zu Trend eine sofortige Bestätigung, ob die Bedingungen mit Ihrer Strategie übereinstimmen. Wenn Sie während der Live-Beobachtung auf Hide All drücken, wird der Bildschirm für das manuelle Zeichnen oder den Preisfokus freigegeben. Wenn Sie dann auf Show All drücken, wird die analytische Ansicht kurzzeitig wiederhergestellt.
Schlussfolgerung
Die Entwicklung des Multi Indicator Handler Expert Advisor begann mit einem einfachen, aber hartnäckigen Problem in der Handelsanalyse: die effiziente Verwaltung mehrerer Indikatoren in MetaTrader 5. Der herkömmliche Arbeitsablauf – das manuelle Hinzufügen jedes Tools zu einem Chart aus verschiedenen Unterordnern, das Jonglieren mit mehreren Chartvorlagen und das Scannen separater Indikatorfenster – ist fehleranfällig, zeitaufwändig und in schnelllebigen Marktsituationen geistig anstrengend.
Durch die Entwicklung eines EA, der alle ausgewählten Indikatoren in einem einzigen, interaktiven Dashboard zusammenfasst, haben wir jeden dieser Schmerzpunkte methodisch angegangen. Das Ergebnis ist ein Tool, das nicht nur rohe Indikatordaten anzeigt, sondern diese Daten in umsetzbare Kauf-, Verkaufs- oder neutrale Signale interpretiert, ein logisches Gewichtungssystem für die Aggregation anwendet und die Ergebnisse in einem übersichtlichen visuellen Layout präsentiert, das Händler nach Belieben bearbeiten können.
Abschließende Überlegungen
Die technische Analyse bleibt ein Eckpfeiler des diskretionären und halbautomatischen Handels. Je straffer, zugänglicher und kohärenter der Analyseprozess ist, desto schneller und präziser können Handelsentscheidungen getroffen werden. Der Multi Indicator Handler überbrückt die Lücke zwischen der Ausgabe von Rohindikatoren und der handelsfreundlichen Darstellung und bietet ein einheitliches Kontrollzentrum für die Chartanalyse in MetaTrader 5. Ob als Hilfsmittel für den Live-Handel oder als Programmiervorlage für die Erstellung individueller Dashboards – die Kombination aus klarem Design, logischer Signalgewichtung und nutzerzentrierten Steuerelementen macht es zu einem Modell, das es wert ist, studiert, nachgebaut und weiterentwickelt zu werden.
Für MQL5-Entwickler ist es ein Beispiel dafür, wie durchdachte Strukturierung und Aufmerksamkeit für Schnittstellendetails robuste Werkzeuge hervorbringen können, die unter realen Marktbedingungen zuverlässig funktionieren. Für Händler zeigt es, wie Technologie die komplexe Aufgabe vereinfachen kann, mehrere Marktsignale zu einer einzigen klaren Richtung zusammenzufassen. Wenn Sie der Aufschlüsselung von der Einführung über das Verständnis der Indikatoren, den Strategieüberblick, die Implementierung, die Ergebnisse und jetzt diese Schlussfolgerung folgen, können Sie den EA sofort auf Ihren eigenen Charts ausführen und genau verstehen, wie er funktioniert – und damit eine Tür öffnen, um ihn für Ihre Strategien und Arbeitsabläufe anzupassen.
Übersetzt aus dem Englischen von MetaQuotes Ltd.
Originalartikel: https://www.mql5.com/en/articles/20168
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.
Die Übertragung der Trading-Signale in einem universalen Expert Advisor.
Risk-Based Trade Placement EA mit On-Chart UI (Part 1): Gestaltung der Nutzeroberfläche
Eine alternative Log-datei mit der Verwendung der HTML und CSS
Automatisieren von Handelsstrategien in MQL5 (Teil 38): Versteckter RSI-Divergenzhandel mit Steigungswinkel-Filtern
- 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.