Entwicklung des Price Action Analysis Toolkit (Teil 47): Verfolgen von Forex-Sitzungen und Ausbrüchen in MetaTrader 5
Einführung
Der Devisenmarkt ist 24 Stunden am Tag in Betrieb und durchläuft ständig die großen Finanzzentren rund um den Globus. Jede Region bringt ihre eigenen Merkmale mit sich: In Asien beginnt der Tag in der Regel ruhig, Tokio gibt oft die erste richtige Richtung vor, London sorgt für hohe Umsätze und Volatilität, und New York trägt die Dynamik bis in die späten Stunden mit häufigen Umkehrungen oder Fortsetzungen. Wenn Händler erkennen, welche dieser Sitzungen gerade aktiv ist, können sie sich an die wechselnde Marktgeschwindigkeit, Volatilität und Liquidität anpassen.
Für neue Händler kann es verwirrend sein, den Überblick über diese Sitzungen zu behalten. Die Zeiten der Broker-Server weichen oft von den lokalen Zeitzonen ab, und die manuelle Berechnung der Sitzungsgrenzen kann zu Fehlern führen. Der All Sessions EA löst dieses Problem, indem er sich automatisch mit der Serverzeit des Brokers synchronisiert und genaue Session-Boxen für Asien, Tokio, London und New York direkt auf dem Chart anzeigt. Dadurch erhalten Anfänger ein klares visuelles Verständnis dafür, wie die globalen Märkte im Laufe des Tages die Kontrolle abgeben und wie sich das Kursverhalten beim Übergang von einer Sitzung zur nächsten ändert.
Über die einfache Visualisierung hinaus bietet der EA interaktive Funktionen wie Schaltflächen zum Ein- und Ausblenden von Sitzungen, ein Informationsfenster und einen Laufschrift-Ticker, der über Ereignisse in Echtzeit informiert. Darüber hinaus ist ein Ausbruchswarnsystem integriert, das den Nutzer benachrichtigt, wenn die aktuellen Kurse den Höchst- oder Tiefststand einer vorangegangenen Sitzung kreuzen – so können Händler Volatilitätsverschiebungen vorhersehen und mit größerer zeitlicher Genauigkeit handeln. Mit vollständiger Synchronisation, verbesserter Lesbarkeit und einem intuitiven Layout hebt die verbesserte Version nun auch alle vier globalen Sitzungen und einheitlich angeordnete H-L-O-C-Etiketten für eine klare, konsistente Referenz hervor.
In diesem Artikel erfahren Sie, wie Sie diese Funktionen Schritt für Schritt in MQL5 implementieren, von der Gestaltung der Schnittstelle bis zur Erstellung der Logik für die Echtzeitüberwachung und die Warnmeldungen.
Inhalt
- Einführung
- Gestaltung des Tools
- Aufbau der Schnittstelle
- Umsetzung der Logik
- Tests und Validierung
- Schlussfolgerung
Gestaltung des Tools
Vor der Erstellung des Expert Advisors ist es wichtig zu verstehen, was Handelssitzungen darstellen und warum sie für die Marktanalyse so wichtig sind. Der 24-Stunden-Devisenmarkt rotiert über vier Hauptumschlagplätze – Asien, Tokio, London und New York – mit jeweils unterschiedlichen Mustern von Liquidität und Volatilität. Historisch gesehen ist der asiatische Markt tendenziell ruhiger, Tokio markiert die erste Richtungswelle, London sorgt für starke Kursbewegungen, und New York beendet den Tag oft mit einem Trend oder einer Kehrtwendung. Da die Server der Broker in unterschiedlichen Zeitzonen arbeiten, kann die manuelle Identifizierung dieser Zeiträume auf einem Chart zu Fehlern führen, insbesondere bei neuen Händlern, die die Ortszeit mit der Marktzeit verwechseln könnten. Der EA für alle Sitzungen beseitigt diese Komplexität, indem er die Server-Uhr des Brokers als Referenz verwendet und sicherstellt, dass alle vier Sitzungen unabhängig von Zeitzonenunterschieden korrekt ausgerichtet sind. Sie gibt den Händlern eine praktische Echtzeitkarte der globalen Sitzungsaktivitäten an die Hand.
Zweck des EA
Dieser EA wurde entwickelt, um Sitzungsanalysen visuell, interaktiv und umsetzbar zu machen.
- Visualisieren der Marktzyklen: Er zeichnet automatisch schattierte Rechtecke für Sitzungen in Asien, Tokio, London und New York mit genauen Start- und Endzeiten.
- Vereinfachen der Interaktion: Er ermöglicht es den Nutzern, jede Sitzung über Schaltflächen auf dem Chart ein- oder auszuschalten, ohne durch die Indikatoreinstellungen zu navigieren.
- Wichtige Daten live überwachen: Er zeigt die Eröffnungs-, Höchst-, Tiefst- und Schlusskurse jeder Sitzung direkt im Chart an, indem er saubere, gleichmäßig verteilte Textbeschriftungen verwendet.
- Automatisch synchronisiert bleiben: Er arbeitet ausschließlich mit der Zeit des Broker-Servers, niemals mit der Computeruhr des Nutzers.
- Highlight Handelssignale: Er generiert sofortige Warnungen, wenn der aktuelle Kurs die Spanne der vorherigen Sitzung über- oder unterschreitet.
- Organisieren von Informationen: Er gibt schnelles visuelles Feedback durch ein Informationsfeld oben rechts und einen Laufschriftticker, der Ereignisse in Echtzeit meldet.
Interface- und Funktionsdesign
Genau wie bei einem Dashboard dient jedes Element im Chart einem klaren Zweck:
| Element | Typ | Zweck |
|---|---|---|
| Asia Taste | OBJ_BUTTON | Sichtbarkeit des Rechtecks für die Asiensitzung ein- und ausschalten |
| Tokyo Taste | OBJ_BUTTON | Sichtbarkeit des Rechtecks der Tokio-Sitzung ein- und ausschalten |
| London Taste | OBJ_BUTTON | Sichtbarkeit des Londoner Sitzungsrechtecks ein- und ausschalten |
| New York Taste | OBJ_BUTTON | Sichtbarkeit des New Yorker Sitzungsrechtecks umschalten |
| Informations-Panel | OBJ_RECTANGLE_LABEL + OBJ_LABEL | Zeigt an, welche Sitzungen derzeit aktiv sind und welchen Status sie haben |
| Ticker-Schlagzeile | OBJ_LABEL | Handelsaktualisierungen und Warnungen am unteren Rand des Charts durchblättern |
| Sitzungsrechtecke | OBJ_RECTANGLE | Farbcodierte Bereiche für die Handelszeiten der einzelnen Sitzungen |
| Sitzungskennzeichnung | OBJ_TEXT | Anzeige der H / L / O / C-Werte einmal pro Sitzung (nur aktueller Tag) |
Jedes Steuerelement wird programmatisch mit ObjectCreate() erstellt und dynamisch aktualisiert, wenn Händler interagieren oder die Zeit vergeht. Die Schnittstelle bleibt auch bei hoher Volatilität minimal und reaktionsschnell.
Visuelle Gestaltung
Klarheit und Abstände sind von grundlegender Bedeutung. In dieser Version wird der vertikale Abstand zwischen den Sitzungsbeschriftungen vergrößert, um gleiche Abstände beizubehalten, sodass der Text, der London markiert, von Tokio durch den gleichen visuellen Abstand getrennt ist wie Tokio von Asien. Dieser einheitliche Abstand verhindert Überschneidungen und gewährleistet die Lesbarkeit unabhängig vom Maßstab der Karte. Ein einheitliches Farbschema sorgt für eine weitere Differenzierung der Aktivitätszonen:
- Himmelblau – Asien
- Hellgrün – Tokio
- Hellrosa – London
- Gold – New York
Die Laufschrift erscheint am unteren Rand des Charts und verwendet die Eingabe TickerColor, um sich an die bevorzugte Chart-Palette des Händlers anzupassen. Ein kompaktes schwarzes Informationsfeld in der oberen rechten Ecke zeigt den aktuellen Sitzungsstatus in weißem Arial-Text an, der einen starken Kontrast bildet.
Funktionale Anforderungen
Die Logik ist modular und ereignisgesteuert:
| Logik | Beschreibung |
|---|---|
| Schaltfläche Interaktion | Nutzerklicks lösen OnChartEvent() aus, wodurch die Sitzungen sofort neu gezeichnet und das Panel aktualisiert wird. |
| Sitzungsberechnung | Der EA berechnet die Start- und Endzeit der Sitzung anhand der Brokerzeit, durchsucht die historischen Balken nach H/L/O/C-Werten und zeichnet die Rechtecke entsprechend. |
| Timer-Ereignisse | Jede Sekunde aktualisiert der EA die visuellen Elemente, scrollt den Ticker und prüft, ob eine Sitzung eröffnet, geschlossen oder durchbrochen wurde. |
| Ausbruchserkennung | Wenn der aktuelle Kurs den Extremwert der vorangegangenen Sitzung übersteigt, gibt der EA eine Warnmeldung auf dem Bildschirm und einen Signalton aus und veröffentlicht das Ereignis in der Ticker-Schlagzeile. |
| Ressourceneffizienz | Alle Grafiken basieren auf leichtgewichtigen OBJ_RECTANGLE- und OBJ_TEXT-Objekten (keine Indikatorpuffer), die die CPU-Auslastung niedrig halten. |
Logisches Kernkonzept
Das System folgt einer einfachen zyklischen Logik, die in der Maklerzeit verankert ist:| Etappen | Beschreibung |
|---|---|
| Initialisierungsphase | Erstellt Schaltflächen, ein Panel und einen Ticker; zeichnet sowohl den vorherigen als auch den aktuellen Handelstag. |
| Phase der Überwachung | Ein Ein-Sekunden-Timer prüft kontinuierlich die Öffnungs- und Schließungszeiten von Sitzungen in Bezug auf TimeCurrent() und verwaltet Warnmeldungen. |
| Aktualisierung der Visualisierung | Jede Minute werden die Sitzungen neu gezeichnet, um vollständig mit der Serverzeit synchronisiert zu bleiben. |
| Reaktion auf Interaktion | Jeder Tastendruck aktualisiert sofort die Sichtbarkeit und den Statustext. |
Durch dieses Design bleibt der Code modular, lesbar und erweiterbar, sodass wir später Funktionen wie die Sydney-Sitzung, Push-Benachrichtigungen oder statistische Durchschnittswerte hinzufügen können.
Aufbau der Schnittstelle
Eine funktionale Schnittstelle ist das Rückgrat eines jeden interaktiven EA. Anstatt sich auf Eingabeparameter zu verlassen, die im Einstellungsfenster verborgen sind, platziert der All Sessions EA alle kritischen Kontrollen direkt auf dem Chart. Händler können Sitzungen ein- oder ausschalten, Informationen sofort einsehen und Streaming-Updates verfolgen, ohne die Live-Analyse zu unterbrechen. In MetaTrader 5 werden grafische Komponenten mit Chart-Objekten wie OBJ_BUTTON, OBJ_LABEL und OBJ_RECTANGLE_LABEL erstellt. Jedes Element ist durch Position, Größe, Farbe und andere Eigenschaften definiert, die die Schnittstelle über alle Chartstile hinweg konsistent halten.
Layout-Konzept
Das Layout der Karte folgt einer praktischen visuellen Hierarchie:| Bereich | Elemente | Beschreibung |
|---|---|---|
| Oben links | Asien – Tokio – London – New York Umschalttasten, alle | Primäre Nutzerkontrollen. Jedes fungiert als unabhängiger Schalter für ihre Sitzungsbox. |
| Oben rechts | Informations-Panel | Schwarzes Rechteck, das den aktuellen Ein/Aus-Status für jede Sitzung anzeigt. |
| Im Hauptchart | Farbige Rechtecke + Textbeschriftungen | Sitzungszeitbereiche und H/L/O/C-Daten in gleichmäßigen Abständen, um Überschneidungen zu vermeiden. |
| Unten links | Laufende Ticker-Schlagzeilen | Live-Feed mit Warnungen und Aktualisierungen. |
Durch diese Positionierung bleiben die Preiskerzen in der Mitte, während die Elemente der Nutzeroberfläche ungenutzte Ränder einnehmen, wodurch die Übersichtlichkeit auch auf kleineren Bildschirmen gewährleistet ist.

Erstellen der Sitzungsschaltflächen
Jede Schaltfläche wird mit Hilfe einer Hilfsfunktion erstellt:
void CreateButton(string name,string text,int x,int y,color c) { ObjectCreate(0,name,OBJ_BUTTON,0,0,0); ObjectSetInteger(0,name,OBJPROP_CORNER,CORNER_LEFT_UPPER); ObjectSetInteger(0,name,OBJPROP_XDISTANCE,x); ObjectSetInteger(0,name,OBJPROP_YDISTANCE,y); ObjectSetInteger(0,name,OBJPROP_XSIZE,110); ObjectSetInteger(0,name,OBJPROP_YSIZE,20); ObjectSetInteger(0,name,OBJPROP_BGCOLOR,clrDimGray); ObjectSetInteger(0,name,OBJPROP_COLOR,c); ObjectSetInteger(0,name,OBJPROP_FONTSIZE,9); ObjectSetString (0,name,OBJPROP_TEXT,text); }
Durch diese Routine werden vier Knöpfe ordentlich in zwei Reihen angeordnet:
CreateButton("BTN_ASIA","Asia ON/OFF",10,20,clrSkyBlue); CreateButton("BTN_TOKYO","Tokyo ON/OFF",125,20,clrLightGreen); CreateButton("BTN_LONDON","London ON/OFF",240,20,clrLightPink); CreateButton("BTN_NEWYORK","New York ON/OFF",10,45,clrGold);
Jede Schaltfläche löst ein Ereignis aus, das von OnChartEvent() erfasst wird. Wenn Sie darauf klicken, wird der entsprechende Boolesche Wert (showAsia, showTokyo usw.) umgedreht, die sichtbaren Sitzungen werden neu gezeichnet, das Panel wird aktualisiert und in der Ticker-Überschrift wird eine Statusmeldung angezeigt. Dies ermöglicht den Händlern eine sofortige Kontrolle, ohne die Live-Aktualisierung zu unterbrechen.
Aufbau des Informationspanels
Das Informationsfeld auf der rechten Seite dient als Mini-Dashboard. Es besteht aus einem Hintergrundrechteck (OBJ_RECTANGLE_LABEL) und einer Textbeschriftung (OBJ_LABEL), die den Sichtbarkeitsstatus der einzelnen Sitzungen anzeigt:
ASIA : ON TOKYO : OFF LONDON : ON NEWYORK : OFFProgrammatisch ist es wie folgt aufgebaut:
ObjectCreate(0,"PANEL_BG",OBJ_RECTANGLE_LABEL,0,0,0); ObjectSetInteger(0,"PANEL_BG",OBJPROP_CORNER,CORNER_RIGHT_UPPER); ObjectSetInteger(0,"PANEL_BG",OBJPROP_XDISTANCE,360); ObjectSetInteger(0,"PANEL_BG",OBJPROP_YDISTANCE,20); ObjectSetInteger(0,"PANEL_BG",OBJPROP_XSIZE,360); ObjectSetInteger(0,"PANEL_BG",OBJPROP_YSIZE,110); ObjectSetInteger(0,"PANEL_BG",OBJPROP_BGCOLOR,clrBlack);
Die Aktualisierungsroutine UpdatePanel() aktualisiert den Inhalt jedes Mal, wenn sich der Zustand einer Schaltfläche ändert oder eine neue Zeichnung erfolgt. Wenn diese Informationen auf dem Bildschirm angezeigt werden, können Anfänger leichter erkennen, welche Sitzungen sie gerade sehen.
Erstellen der Tickerschlagzeilen
Der Ticker läuft in der linken unteren Ecke des Charts und zeigt Meldungen wie „London Session opened“ (London ist offen) oder „New York breaks above prior London high“ (New York durchbricht vorheriges London-Hoch) an. Es wird mit einem OBJ_LABEL-Objekt implementiert und durch sekündliches Ändern des Textes in OnTimer() gescrollt:
ObjectCreate(0,"TICKER_OBJ",OBJ_LABEL,0,0,0); ObjectSetInteger(0,"TICKER_OBJ",OBJPROP_CORNER,CORNER_LEFT_LOWER); ObjectSetInteger(0,"TICKER_OBJ",OBJPROP_XDISTANCE,10); ObjectSetInteger(0,"TICKER_OBJ",OBJPROP_YDISTANCE,18); ObjectSetInteger(0,"TICKER_OBJ",OBJPROP_COLOR,TickerColor);
Ein Ein-Sekunden-Timer bewegt die Textzeichen über den Streifen, wodurch ein sanfter Bildlaufeffekt entsteht, der professionelle News-Feeds imitiert.
Lesbarkeit und die Kontrolle der Abstände
Wenn mehrere Sitzungen zusammen angezeigt werden, kann es im oberen Bereich der Rechtecke zu Überschneidungen kommen. Um ein Durcheinander zu vermeiden, führt dieser EA einen dynamischen vertikalen Versatz für jedes Etikett mit der Formel ein:
double offsetY = (slot + 1) * _Point * 120;
Dieser Multiplikator für gleiche Abstände sorgt dafür, dass die Abstände zwischen Asien ↔ Tokio und Tokio ↔ London gleich bleiben und die visuelle Trennung bei allen Sitzungen identisch ist. Es skaliert automatisch mit der Symbolgenauigkeit (_Point), sodass die Etiketten auf jedem Instrument den relativen Abstand beibehalten.
Farbpalette und Auswahl der Schriftart
Jeder Sitzung wird ein bestimmter Farbton zugewiesen, der es den Händlern ermöglicht, die Marktaktivitäten sofort zu erkennen, ohne Legenden oder Tooltips zu Rate ziehen zu müssen. Die asiatische Sitzung erscheint in Himmelblau, was den ruhigen, frühen Teil des Handelstages repräsentiert, in dem die Kursbewegungen im Allgemeinen gemessen und stabil sind. Die Tokioter Sitzung ist hellgrün, um das Gefühl der Erneuerung einzufangen, wenn die Volatilität zu Beginn der japanischen Märkte zunimmt. Für London wurde die Farbe Hellrosa gewählt, um einen starken Kontrast zu den vorangegangenen Farbtönen zu schaffen und die Zeit der höchsten Handelsintensität zu markieren, wenn Europa auf den Plan tritt. Schließlich ist die New Yorker Sitzung in Gold eingezeichnet, was die Dynamik des späten Tages und den Übergang zu täglichen Schlusskursen an den globalen Märkten symbolisiert.
Die unterstützenden Textelemente folgen einer einheitlichen visuellen Sprache: Alle Sitzungsbeschriftungen haben ihre eigene Sitzungsfarbe, während der Informationstext auf dem Panel und dem Ticker eine klare weiße serifenlose Schriftart verwendet, um die Lesbarkeit vor dunklen Hintergründen zu gewährleisten. Schriftart und -größe sind bewusst moderat gehalten, damit die Nutzeroberfläche auch bei schnellen Marktbewegungen oder einem Wechsel des Chart-Hintergrunds gut sichtbar und unaufdringlich bleibt. Diese Kombination aus klarer Farbkodierung und sorgfältiger Typografie sorgt dafür, dass der EA in jedem Chart sowohl Klarheit als auch ästhetische Ausgewogenheit bewahrt.
Für den Text wird eine serifenlose Schriftart (Arial oder Systemstandard) in Weiß für die Tafeln und in Sitzungsfarbe für die Beschriftungen verwendet. Die Schrift ist so fett, dass sie sowohl auf hellem als auch auf dunklem Kartenhintergrund lesbar bleibt.
Zusammenstellung der Schnittstelle
Bei der Initialisierung (OnInit()) ruft der EA auf:
CreateButton(... four times …); CreatePanel(); CreateTicker(); DrawAll(); UpdatePanel(); UpdateTicker(Headline);
Diese Sequenz baut die komplette Schnittstelle auf, sobald der EA geladen ist. Von da an werden alle Aktualisierungen dynamisch durch den Timer und die Ereignisbehandlung gehandhabt, sodass der Händler nie manuell aktualisieren muss.
Umsetzung der Logik
Sobald die Schnittstelle eingerichtet ist, braucht der EA die Logik, mit der er denkt, reagiert und mit dem realen Markt synchronisiert bleibt. Ziel ist es, den Händlern zu ermöglichen, in Echtzeit zu beobachten, wie sich der globale Handelstag entwickelt – von Asien über Tokio und London bis nach New York – während der EA automatisch jede Sitzung zeichnet, Aktivitäten meldet und auf Ausbruchschancen aufmerksam macht. Dieser Abschnitt geht jeden Teil dieser Logik im Detail durch und zeigt die entsprechenden MQL5-Implementierungen.
Die Zeit in MetaTrader 5 verstehen
Alle Handelssitzungen drehen sich um die Zeit, und in MetaTrader kann Zeit mehrere Dinge bedeuten: lokale Computerzeit, UTC oder Serverzeit. Um absolute Genauigkeit zu gewährleisten, verwendet unser EA immer die Zeit des Broker-Servers, die mit TimeCurrent() abgerufen wird. Alle Berechnungen, vom Zeichnen von Fenstern bis zum Auslösen von Alarmen, beziehen sich auf diesen Wert, sodass die Sitzungen bei jedem Broker und in jeder Zeitzone korrekt ausgerichtet bleiben.
// Truncate to broker's midnight (00:00) datetime Day0(datetime t) { MqlDateTime mt; TimeToStruct(t, mt); mt.hour = mt.min = mt.sec = 0; return StructToTime(mt); }Wenn der Basistag bekannt ist, werden die Start- und Endzeiten der Sitzungen durch Konvertierung in einen menschenlesbaren Text der Zeit („07:00“ , „16:00“ ) in Minuten erstellt:
int ParseHM(string s) { int split = StringFind(s, ":"); if(split < 0) return 0; return 60 * (int)StringToInteger(StringSubstr(s, 0, split)) + (int)StringToInteger(StringSubstr(s, split + 1)); } datetime MakeTime(datetime base, string tstr) { return base + ParseHM(tstr) * 60; // add minutes to 00:00 }
Die Hochs und Tiefs einer jeden Sitzung finden
Sobald die Zeitfenster definiert sind, muss der EA die Eröffnungskurse, Hochs, Tiefs und Schlusskurse für diesen Bereich berechnen, damit er weiß, wo er die einzelnen Rechtecke zeichnen muss.
void MakeSession(datetime base, string s1, string s2, string pref, string name, color col, int order, double &outHi, double &outLo, double &outOp, double &outCl, bool labelIt) { int m1 = ParseHM(s1), m2 = ParseHM(s2); datetime t1 = base + m1 * 60, t2 = base + m2 * 60; if(t2 <= t1) t2 += 86400; // wrap around midnight if needed double hi = -DBL_MAX, lo = DBL_MAX, opn = 0, cls = 0; bool haveOpen = false; for(int i = 0; i < iBars(_Symbol, _Period); i++) { datetime bt = iTime(_Symbol, _Period, i); if(bt < t1) break; if(bt >= t1 && bt <= t2) { double bh = iHigh(_Symbol,_Period,i); double bl = iLow (_Symbol,_Period,i); if(bh > hi) hi = bh; if(bl < lo) lo = bl; if(!haveOpen){ opn = iOpen(_Symbol,_Period,i); haveOpen = true; } cls = iClose(_Symbol,_Period,i); } } if(hi > 0 && lo != DBL_MAX) { DrawSession(pref, name, col, t1, t2, hi, lo, opn, cls, order, labelIt); outHi = hi; outLo = lo; outOp = opn; outCl = cls; } }
So funktioniert es:
- Die Schleife durchsucht historische Kerzen nur innerhalb dieser Sitzung.
- In den Momenten, in dem er sich vor der Öffnungszeit befindet, stoppt er und spart so CPU-Zyklen.
- Die sich daraus ergebenden Werte dienen sowohl als Zeichenkoordinaten als auch als Bezugspunkte für künftige Ausbruchswarnungen.
Zeichnung der Sitzungen
Visuelle Klarheit wird durch die Funktion DrawSession() erreicht. Es wird ein halbtransparentes Rechteck erstellt, das sich vom Beginn bis zum Ende der Sitzung erstreckt und vertikal durch den berechneten Hochs und Tiefs begrenzt wird. Jedes Rechteck kann optional mit einem kleinen Text versehen werden, der H/L/O/C für diese Sitzung angibt.
void DrawSession(string pref, string name, color col, datetime t1, datetime t2, double hi, double lo, double opn, double cls, int slot, bool labelIt) { string box = pref + TimeToString(t1, TIME_DATE | TIME_MINUTES); SafeDelete(box); ObjectCreate(0, box, OBJ_RECTANGLE, 0, t1, hi, t2, lo); ObjectSetInteger(0, box, OBJPROP_COLOR, col); ObjectSetInteger(0, box, OBJPROP_BACK, true); ObjectSetInteger(0, box, OBJPROP_WIDTH, 1); if(labelIt) { string lbl = box + "_LBL"; string text = StringFormat("%s H %.5f L %.5f O %.5f C %.5f", name, hi, lo, opn, cls); DrawLabelNoOverlap(lbl, hi, slot, text, col); } }
Die Hilfsfunktion DrawLabelNoOverlap() positioniert den Text so, dass die Sitzungsbeschriftungen einen gleichmäßigen Abstand haben:
void DrawLabelNoOverlap(string id,double baseY,int slot,string text,color col) { datetime anchor = iTime(_Symbol,_Period,0); datetime offsetT = anchor - 4*PeriodSeconds(_Period); double offsetY = (slot+1) * _Point * 120; // uniform vertical spacing ObjectCreate(0, id, OBJ_TEXT, 0, offsetT, baseY + offsetY); ObjectSetInteger(0, id, OBJPROP_COLOR, col); ObjectSetInteger(0, id, OBJPROP_FONTSIZE, 8); ObjectSetString (0, id, OBJPROP_TEXT, text); }
Der Multiplikator 120 stellt sicher, dass die Bezeichnung für London in der gleichen Entfernung unter Tokio liegt wie Tokio unter Asien, sodass die Symmetrie auf der Preisskala jedes Instruments gewahrt bleibt.
Kontrolle des Lebenszyklus von Sitzungen
Anstatt jede Sekunde neu zu zeichnen (was Ressourcen verschwenden könnte), verwendet der EA einen intelligenten Aktualisierungsrhythmus. Ein Timer-Ereignis wird einmal pro Sekunde ausgelöst:
void OnTimer() { ScrollTicker(); // move the text ticker CheckSessionAlerts(); // detect openings & closings CheckBreakouts(); // look for price range breaks static int counter = 0; if(++counter >= 60) // refresh once per minute { DrawAll(); UpdatePanel(); counter = 0; } }
Jede Minute werden bestehende Rechtecke gelöscht (mittels DeletePrefix()) und neu erstellt, um mit der aktuellen Serverzeit synchron zu bleiben. Da alles ereignisgesteuert ist, nutzt der EA die CPU effizient, selbst wenn mehrere Charts geöffnet sind.
Erkennen von Sitzungseröffnungen und -beendigungen
Die Funktion CheckSessionAlerts() vergleicht die aktuelle Brokerzeit mit dem Zeitplan für das Öffnen/Schließen der einzelnen Sitzungen. Sobald eine Grenze überschritten wird, wird eine kurze Nachricht in den Ticker eingeblendet und optional ein akustischer Alarm ausgelöst.
void CheckSessionAlerts() { datetime now = TimeCurrent(), base = Day0(now); datetime asO = MakeTime(base, AsiaStart), asC = MakeTime(base, AsiaEnd); datetime lnO = MakeTime(base, LondonStart), lnC = MakeTime(base, LondonEnd); datetime nyO = MakeTime(base, NewYorkStart),nyC = MakeTime(base, NewYorkEnd); if(!openedAsia && now >= asO){ openedAsia = true; UpdateTicker("Asia session opened"); } if(!closedAsia && now >= asC){ closedAsia = true; UpdateTicker("Asia session closed"); } if(!openedLondon&& now >= lnO){ openedLondon= true; UpdateTicker("London session opened");} if(!closedLondon&& now >= lnC){ closedLondon= true; UpdateTicker("London session closed");} if(!openedNewYork&& now >= nyO){openedNewYork=true; UpdateTicker("New York session opened");} if(!closedNewYork&& now >= nyC){closedNewYork=true; UpdateTicker("New York session closed");} }
Zur Laufzeit erscheinen diese Meldungen nahtlos in der scrollenden Kopfzeile, sodass die Händler in Echtzeit über globale Marktveränderungen informiert werden.
Ausbruchserkennung
Über das Timing hinaus wollen Händler oft wissen, wann der Kurs die Grenzen der vorherigen Sitzung verlässt. Die Breakout-Engine von EA erfüllt genau diese Aufgabe.
void CheckBreakouts() { double bid = SymbolInfoDouble(_Symbol, SYMBOL_BID); // Example: New York breaking the prior London range if(prevLondonHigh > 0) { if(!newYorkBreakHighDone && bid > prevLondonHigh) { newYorkBreakHighDone = true; UpdateTicker("New York breaks above prior London high"); } if(!newYorkBreakLowDone && bid < prevLondonLow) { newYorkBreakLowDone = true; UpdateTicker("New York breaks below prior London low"); } } }
Jedes Flag (BreakHighDone, BreakLowDone) stellt sicher, dass ein Alarm nur einmal pro Richtung gesendet wird, sodass die Nachrichten auch bei anhaltenden Trends sauber und relevant bleiben.
Eine plötzliche Meldung wie „London breaks above prior Tokyo high“ (London bricht über das vorherige Tokio-Hoch) lässt Händler sofort darauf schließen, dass die Marktvolatilität zunimmt – ein hervorragendes Instrument für das Timing von Ausbruchs- oder Umkehrstrategien.
Umgang mit Nutzerinteraktion
Die Schnittstelle ist interaktiv. Immer wenn ein Händler auf eine Sitzungsschaltfläche klickt, sendet MetaTrader ein Chart-Ereignis, das von OnChartEvent() erfasst wird. Der EA reagiert, indem er einen Booleschen Wert umdreht, die betroffenen Rechtecke neu zeichnet und das Informationsfenster aktualisiert.
void OnChartEvent(const int id,const long &l,const double &d,const string &s) { if(id == CHARTEVENT_OBJECT_CLICK) { if(s == BTN_ASIA) { showAsia = !showAsia; DrawAll(); UpdatePanel(); UpdateTicker("Asia toggle changed"); } if(s == BTN_TOKYO) { showTokyo = !showTokyo; DrawAll(); UpdatePanel(); UpdateTicker("Tokyo toggle changed"); } if(s == BTN_LONDON) { showLondon = !showLondon; DrawAll(); UpdatePanel(); UpdateTicker("London toggle changed"); } if(s == BTN_NEWYORK) { showNewYork = !showNewYork; DrawAll(); UpdatePanel(); UpdateTicker("New York toggle changed"); } } }
Diese sofortige Reaktion unterstreicht das Konzept der Modularität – die Aktionen der Nutzeroberfläche sind vollständig von der analytischen Logik entkoppelt.
Initialisierung und Bereinigung
Zwei einfache Routinen bilden den Rahmen für den Lebenszyklus des EA:
int OnInit() { CreateButton(BTN_ASIA, "Asia ON/OFF", 10, 20, AsiaColor); CreateButton(BTN_TOKYO, "Tokyo ON/OFF", 125,20, TokyoColor); CreateButton(BTN_LONDON, "London ON/OFF", 240,20, LondonColor); CreateButton(BTN_NEWYORK,"New York ON/OFF",10,45, NewYorkColor); CreatePanel(); CreateTicker(); DrawAll(); UpdatePanel(); UpdateTicker(Headline); EventSetTimer(1); // start 1‑second timer return INIT_SUCCEEDED; } void OnDeinit(const int reason) { EventKillTimer(); // stop the timer DeletePrefix(PREF_ASIA); DeletePrefix(PREF_TOKYO); DeletePrefix(PREF_LONDON); DeletePrefix(PREF_NEWYORK); }
Beim Start baut sich der EA seine gesamte Oberfläche auf; beim Entfernen räumt er wieder vollständig auf, sodass keine verwaisten Rechtecke zurückbleiben.
Logikfluss in Aktion
Um den kontinuierlichen Prozess zu visualisieren:

Jede Stufe arbeitet unabhängig, kommuniziert jedoch über gemeinsame globale Daten, sodass ein stets aufmerksames, selbstkorrigierendes Werkzeug entsteht.
Kompilieren und Ausführen des EA
Sobald Sie den gesamten Code in den MetaEditor kopiert haben, speichern Sie es als
MQL5\Experts\All Sessions Toggle EA.mq5
dann drücken Sie auf Compile (F7) und fügen Sie den EA einem beliebigen Chart in MetaTrader 5 hinzu. Sobald das Chart geladen ist, sollte es sich sofort in ein interaktives Dashboard verwandeln: In der oberen linken Ecke erscheinen vier Schaltflächen, die die Sitzungen in Asien, Tokio, London und New York anzeigen; in der oberen rechten Ecke befindet sich ein elegantes schwarzes Informationsfeld, das anzeigt, welche Sitzungen gerade ein- oder ausgeschaltet sind; und am unteren Rand läuft eine Laufschrift, die Live-Statusmeldungen anzeigt. Im Hauptbereich des Charts decken farbkodierte Rechtecke den vorherigen und den aktuellen Handelstag ab, wobei jedes Rechteck mit seinen H-, L-, O- und C-Werten für einen schnellen Überblick gekennzeichnet ist. Wenn alles korrekt kompiliert wurde, bestätigt die Registerkarte Experten am unteren Rand des Terminals die erfolgreiche Initialisierung mit der Meldung „Sessions viewer running“.
Tests und Validierung
Bevor man ein Handelsinstrument freigibt oder eins einsetzt, muss man es gründlich testen. Bei diesem EA bestätigen die Tests, dass sich alle Komponenten – die grafischen, logischen und zeitbasierten – bei verschiedenen Brokern, Instrumenten und Zeitzonen konsistent verhalten. In diesem Abschnitt wird eine systematische Methode zur Validierung der Leistung und Zuverlässigkeit des EA beschrieben.

Das obige Chart zeigt den All Sessions EA, der auf dem Chart des Demo Accounts des Brokers Deriv (EURUSD H1) läuft. Bei diesem Test wurden alle vier Sitzungen – Asien, Tokio, London und New York – gleichzeitig aktiviert. Jedes Rechteck wird in der ihm zugewiesenen Farbe angezeigt: Himmelblau für Asien, Hellgrün für Tokio, Hellrosa für London und Gold für New York. In der oberen linken Ecke bestätigen die Schaltflächen („Asia ON/OFF“, „Tokyo ON/OFF“ usw.), dass die interaktive Schnittstelle in der Umgebung des MetaTrader 5 korrekt geladen wurde. Wenn Sie auf eine Schaltfläche klicken, wird die entsprechende Sitzungsbox sofort ausgeblendet oder neu gezeichnet, was zeigt, dass die Funktionen für die Ereignisbehandlung und das Neuzeichnen unter der Infrastruktur dieses Brokers voll ansprechbar sind. Die schwarze Informationstafel oben rechts zeigt genau den aktuellen Stand aller Sitzungen an:
- ASIA : ON TOKYO : ON LONDON : ON NEW YORK : ON
Dies bestätigt, dass die Routine UpdatePanel() das grafische Panel mit den booleschen Flags synchronisiert hat, die die Sichtbarkeit der Sitzung steuern. Darunter erscheint die aktive Ticker-Schlagzeile mit dem Text „Sessions viewer running – toggle button“ (Sitzungsbetrachter läuft – Schaltfläche umschalten), um zu überprüfen, ob das Ticker-Objekt richtig initialisiert wurde und ohne Überlappung weiterläuft. Innerhalb des Hauptpreisbereichs stimmen die farbigen Rechtecke perfekt mit den Kerzenzeitgrenzen im H1-Chart von Deriv überein, was zeigt, dass der EA die Serverzeit von Deriv über TimeCurrent() korrekt ausliest. Pro Sitzung wird nur ein H-L-O-C-Etikett angezeigt, was der Übersichtlichkeit halber der Designregel der Einzellabelanzeige entspricht. Die Werte neben den Titeln der einzelnen Sitzungen, z. B. NEW YORK H 1.16224“ und TOKYO H 1.16158 L 1.158xx“, bestätigen, dass der EA die OHLC-Daten genau aus dem Preis-Feed von Deriv abgerufen hat. Beim Wechsel zwischen den Symbolen (EURUSD, USDCHF, GBPUSD und USDJPY) wurde kein Flackern oder eine Leistungsverzögerung beobachtet, was darauf hindeutet, dass der Timer-Aktualisierungsmechanismus (1-Sekunden-Intervall) auf der Deriv-Plattform stabil funktioniert. Die CPU- und Speichernutzung blieb während der gesamten Sitzung minimal.
Insgesamt bestätigt dieser Test, dass:
- Der EA wird in der MetaTrader 5-Umgebung von Deriv perfekt ausgeführt und gerendert.
- Zeitliche Abstimmung und Sitzungsdauer entsprechen den weltweiten Standards.
- Interaktive Elemente – Schaltflächen, Bedienfeldaktualisierungen und Ticker – funktionieren reibungslos.
- Das Breakout-Alarmsystem wird genau dann ausgelöst, wenn der Kurs die Extremwerte der vorangegangenen Sitzung überschreitet.
Diese auf Deriv basierende Bewertung bestätigt, dass die Logik der Handelssitzung, die Zeichenroutinen und die Warnmechanismen stabil und brokergenau unter Echtzeit-Chartbedingungen sind.
Das folgende Gif zeigt die Warnmeldungen

Schlussfolgerung
Die Entwicklung des All Sessions EA zeigt, wie ein einfaches Konzept – die visuelle Einteilung des Handelstages in globale Marktsitzungen – zu einem raffinierten Analyseinstrument heranreifen kann. Ursprünglich als Hilfsmittel zur Ermittlung von Sitzungszeiten gedacht, hat sich das Projekt zu einem vollständigen, interaktiven System entwickelt, das sich nahtlos mit der Zeit des Broker-Servers synchronisiert, Live-Marktübergänge meldet und Händler bei bedeutsamen Kursausbrüchen alarmiert, sobald diese auftreten.
Durch seine Mischung aus farbcodierten Rechtecken, prägnanten Sitzungsbeschriftungen, Umschalttasten und einem Laufband verwandelt der EA den kontinuierlichen Rhythmus des Devisenmarktes in eine leicht lesbare Erzählung. So können Händler auf einen Blick erkennen, welche Region weltweit die Liquidität antreibt und wie sich die Volatilität von Asien über Tokio und London bis nach New York verschiebt. Die modulare, ereignisgesteuerte Struktur sorgt dafür, dass diese Darstellungen auf jedem Chart präzise und leichtgewichtig bleiben.
Für neue Händler dient der EA als pädagogischer Leitfaden, der zeigt, wie die Marktenergie im Laufe des Handelstages fließt. Für erfahrene Nutzer wird es zu einem kontextbildenden Overlay, das die Intraday-Planung vereinfacht, das Ausbruchsverhalten bestätigt und die Sitzungsanalyse vereinfacht.
In diesem Entwicklungszyklus wurde der EA gründlich in der Handelsumgebung von Deriv getestet, wo er in verschiedenen Charttypen und Zeitrahmen reibungslos funktionierte. Die Ergebnisse bestätigten die vollständige Synchronisierung mit der Serverzeit von Deriv, die stabile Darstellung von Objekten, das genaue Timing von Warnmeldungen und die konsistente Aktualisierung von H-L-O-C-Etiketten. Selbst im Dauerbetrieb zeigte der EA eine reaktionsschnelle Leistung und ein sauberes Grafikverhalten, was seine Effizienz auf den Live- und synthetischen Märkten von Deriv bestätigt. Da die zugrundeliegende Architektur modular aufgebaut ist, sind zukünftige Anpassungen einfach. Wir können sie leicht um Funktionen wie die Sydney-Sitzung, die Unterstützung von Push-Benachrichtigungen oder historische Sitzungsbereichsstatistiken erweitern, ohne die Kernlogik umzuschreiben.
Letztendlich ist der EA mehr als ein farbiges Overlay; er ist ein Lehr- und Analysebegleiter, der Händlern hilft, nicht nur zu verstehen, was die Kurse tun, sondern auch wann und warum sie sich bewegen. Indem sie die Ebbe und Flut jeder globalen Börsensitzung verfolgen, erhalten Händler, die die Deriv-Plattform – und alle künftig unterstützten Broker – nutzen, einen klaren, zeitbasierten Überblick über Volatilität und Liquidität. Mit Präzision, Klarheit und Einfachheit macht dieser EA den kontinuierlichen 24-Stunden-Markt zu einer strukturierten, visuell intuitiven Erfahrung – eine Sitzung nach der anderen.
Übersetzt aus dem Englischen von MetaQuotes Ltd.
Originalartikel: https://www.mql5.com/en/articles/19944
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.
Wiederverwendung von ungültig gemachten Orderblöcken als Mitigation Blocks (SMC)
MQL5-Handelswerkzeuge (Teil 9): Entwicklung eines Ersteinrichtungsassistenten für Expert Advisors mit scrollbarem Leitfaden
Eine alternative Log-datei mit der Verwendung der HTML und CSS
MQL5-Assistenten-Techniken, die Sie kennen sollten (Teil 83): Die Verwendung von Mustern des Stochastischen Oszillators und des FrAMA – Archetypen des Verhaltens
- 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.