English Русский 日本語
preview
Vom Neuling zum Experten: Die Schatten der Kerzen enthüllen (Dochte)

Vom Neuling zum Experten: Die Schatten der Kerzen enthüllen (Dochte)

MetaTrader 5Beispiele |
20 0
Clemence Benjamin
Clemence Benjamin

Inhalt

  1. Einführung
  2. Implementierung – Verbesserung der Marktperioden-Synchronisierung für die Visualisierung der Dochte
  3. Tests
  4. Schlussfolgerung
  5. Wichtige Lektionen
  6. Anlagen



Einführung

Jede Kerze auf einem Chart stellt eine kleine, aber komplexe Geschichte des Marktverhaltens dar – eine dynamische Interaktion zwischen Käufern und Verkäufern, komprimiert in einem einzigen Balken. In unserer früheren Arbeit haben wir den Market Periods Synchronizer entwickelt, ein System zur Visualisierung von Strukturen mit höherem Zeitrahmen (HTF) in Charts mit niedrigerem Zeitrahmen. Im Rahmen dieses Projekts wurden die Körper der großen Kerzen erfolgreich isoliert und gefüllt, sodass Händler beobachten können, wie die Bewegungen der unteren Perioden gemeinsam diese größeren Balken bilden.

Bei dieser Erkundung ist uns jedoch etwas Bemerkenswertes aufgefallen. Sobald die Körper richtig visualisiert waren, zeigten sich in den verbleibenden ungefüllten Bereichen natürlich die Schatten oder Dochte – jene dünnen vertikalen Streifen, die markieren, wohin sich der Preis bewegte, bevor er zurückgewiesen wurde. Wir erkannten, dass wir uns zwar zunächst auf die Körper konzentrierten, diese unberührten Bereiche – die Lücken zwischen gefüllten und nicht gefüllten Regionen – aber im Stillen eine ganze Schicht von Marktinformationen enthielten.

Die Erkenntnis war subtil und doch tiefgreifend: Durch die Isolierung des Körpers hatten wir indirekt die Schatten abgebildet. Die Herausforderung und die Chance, die sich uns bietet, besteht nun darin, sie ganz bewusst zu studieren. Wenn wir diese Dochte dynamisch hervorheben und visuell unterscheiden könnten, könnten wir damit beginnen, ihre Struktur, ihr Verhalten und ihre Häufigkeit zu analysieren – und vielleicht sogar neue Intra-Docht-Muster oder Kursverhaltensweisen aufdecken, die Umkehrungen, Fortsetzungen und Liquiditätsereignisse beeinflussen.

Dieses neue Projekt stellt den nächsten Schritt dar – eine eingehendere Untersuchung der Schatten von Kerzen. Anstatt sie lediglich als visuelle Überbleibsel außerhalb des Körpers zu betrachten, behandeln wir sie nun als wertvolle Datenbereiche, die eine gezielte Untersuchung verdienen. Durch programmgesteuertes Hervorheben und Füllen dieser Regionen wollen wir die verborgenen Volatilitätsschichten aufdecken, die die oberen und unteren Extremwerte jeder Kerze definieren.

Stellen Sie sich vor, Sie könnten in Echtzeit visualisieren, wo der Markt zuvor den Preis abgelehnt hat – und jeden Docht nicht als nachträglichen Gedanken, sondern als ein Gebiet der Markterkundung sehen. Auf diese Weise verwandeln wir das, was einst visuelles Rauschen war, in sinnvolle Studienbereiche. Ziel ist es, Händlern und Entwicklern gleichermaßen die Möglichkeit zu geben, jeden Kerzen-Schatten als eine Mikroumgebung für die Entdeckung, Mustererkennung und Strategieentwicklung zu behandeln.

Dieser Ansatz baut auf den körperbezogenen Ausfüllungen auf, die wir zuvor entwickelt haben. So wie wir entdeckt haben, dass die Kerzenkörper Überzeugung und Schwung ausdrücken, erzählen die Schatten eine andere Seite der Geschichte – eine des Zögerns, der Erschöpfung und des Liquiditätsungleichgewichts. Zusammen bilden die gefüllten Körper und die hervorgehobenen Schatten einen ganzheitlicheren Rahmen, um zu verstehen, wie der Preis innerhalb und über Zeiträume hinweg atmet. Indem wir beides visualisieren, sehen wir nicht nur, wo der Preis akzeptiert wurde, sondern auch, wo er abgelehnt wurde – ein subtiler, aber wirkungsvoller Unterschied in der Marktstrukturanalyse.

In dieser Fortsetzung werden wir unser bestehendes Market Periods Synchronizer Control Utility um das Wick Visualization Utility erweitern und es mit schattenorientierten Analysefunktionen ausstatten. Anstatt nur die Körper im höheren Zeitrahmen zu füllen, identifiziert, isoliert und füllt das System nun die Dochtregionen – die oberen und unteren Extremwerte jeder Kerze – direkt auf Charts im unteren Zeitrahmen. Diese Elemente werden in Echtzeit aktualisiert, sodass wir beobachten können, wie sich Dochte im höheren Zeitrahmen dynamisch entwickeln, wenn sich neue Balken im niedrigeren Zeitrahmen bilden. Letztendlich ist dies nicht nur eine weitere technische Verbesserung – es ist eine offene Einladung zu erforschen, was sich in den Kerzen-Schatten verbirgt, zu experimentieren und andere zu inspirieren, die Grenzen der MQL5-basierten Marktvisualisierung zu erweitern.

Visualisierung einer Preisbewegung in einem H1 und schwach auf M1

Abb. 1. Visualisierung einer Preisbewegung von einem H1-Docht im M1-Chart

In der Abbildung zeigt A eine H1-Kerze mit einem ausgeprägten unteren Docht – eine prägnante visuelle Zusammenfassung eines tieferen Marktereignisses. Dieser einzelne vertikale Schatten steht für eine rasche Ablehnung niedrigerer Preise, bei denen zunächst die Verkäufer dominierten, bevor die Käufer die Kontrolle zurückgewannen. Durch den größeren Zeitrahmen wird diese Sequenz zwar auf ein visuelles Element komprimiert, doch in Wirklichkeit wird eine dynamische Geschichte von Liquiditätsschwemmen, Absorption und Mikroakkumulation dargestellt. Jeder Docht, so klein er auch erscheinen mag, enthält wertvolle Informationen über den Auftragsfluss, die Marktpsychologie und Bereiche, in denen institutionelle Aktivitäten stattgefunden haben könnten. Wenn man sie als bloßes Rauschen ignoriert, übersieht man eine wesentliche Komponente des Preisverhaltens und der Preisstruktur.

B vergrößert denselben H1-Docht durch ein M1-Linse und enthüllt die versteckte Anatomie hinter der Ablehnung. Was in A wie ein einzelner Ablehnungsschwanz aussah, entwickelt sich zu einem detaillierten Muster von Mikrounterstützungsformationen. In diesem Fall ist eine typische Abfolge zu beobachten: eine anfängliche Unterstützungszone, in der der Kurs seinen Rückgang stoppte, gefolgt von einer doppelten Bodenstruktur, die das Ablehnungsmomentum nach oben verstärkte. Auch wenn solche Muster bei verschiedenen Ablehnungen variieren können, so ist dieses doch ein Lehrbuchbeispiel dafür, wie Formationen im unteren Zeitrahmen zu einem Dochtverhalten im oberen Zeitrahmen beitragen. Das Studium dieser Übergänge ermöglicht es Händlern, die Mikrostruktur innerhalb des Balkens mit der Makrointerpretation von Kerzen zu verbinden und so die Lücke zwischen dem, was das Chart zusammenfasst, und dem, was tatsächlich darin passiert ist, zu schließen. 

In den folgenden Abschnitten werden wir die Struktur eines Kerzen wiederholen, um sicherzustellen, dass jeder Leser die zugrundeliegenden Konzepte verstehen und die Bedeutung der einzelnen Komponenten innerhalb der Preisaktionsanalyse schätzen kann.

Kerzen verstehen

Der Grundstein für die Kerzen-Charts wurde nicht von modernen Finanzfachleuten gelegt, sondern von einem japanischen Reishändler des 18. Jahrhunderts, Homma Munehisa. Seine Genialität bestand darin, dass er erkannte, dass der Markt nicht nur von Angebot und Nachfrage, sondern auch von der kollektiven Psychologie seiner Teilnehmer – Angst und Gier – bestimmt wurde. Aus Hommas revolutionären Methoden zur Aufzeichnung von Kursbewegungen entwickelte sich das heute verwendete Kerzen-System. Im Kern ist ein Kerzen eine visuelle Verdichtung dieses Kampfes, die aus zwei Hauptelementen besteht: dem eigentlichen Körper und den Dochten.

Der reale Körper stellt den Kernkonflikt zwischen Käufern und Verkäufern dar, indem er den Abstand zwischen dem Eröffnungs- und dem Schlusskurs der Periode abbildet. Im Allgemeinen bedeutet ein grüner Körper einen Aufwärtssieg (Schlusskurs höher als der Eröffnungskurs), während ein roter Körper einen Abwärtssieg (Schlusskurs niedriger als der Eröffnungskurs) anzeigt. Die Dochte, d. h. die dünnen Linien oben und unten, stellen die Spanne der Preiserforschung dar und dokumentieren das höchste Hoch und das niedrigste Tief. Der obere Docht zeigt an, wo der Preis von den Verkäufern abgelehnt wurde, und der untere Docht zeigt an, wo er von den Käufern abgelehnt wurde. Die vollständige Erzählung einer einzelnen Kerze gibt also nicht nur Aufschluss darüber, wer die Zeit gewonnen hat (der Körper), sondern auch über die Intensität des Konflikts, der an den Extremen ausgetragen wurde (die Dochte).

Merkmale einer Kerze

Abb. 2. Merkmale einer Kerze

Ja, natürlich. Hier ist die vollständige Tabelle mit allen wesentlichen Merkmalen eines Kerzenhalters.
CharakteristischBeschreibung und Bedeutung:
Der wirkliche KörperDer breite Teil einer Kerze. Er stellt den Hauptkampf zwischen Käufern und Verkäufern während des Zeitraums dar und zeigt die Spanne zwischen dem Eröffnungs- und dem Schlusskurs.
EröffnungspreisDer Preis zu Beginn des Zeitraums. Er bildet die Boden eines Aufwärtskörpers (grün/weiß) und den Deckel eines Abwärtskörpers (rot/schwarz).
SchlusskursDer Preis am Ende des Zeitraums. Er bildet den Deckel eines Aufwärtskörpers und den Boden eines Abwärtskörpers. Ihre Position im Verhältnis zur Eröffnung bestimmt die Farbe der Kerze und den „Gewinner“ der Periode.
Die Farbe des Körpers (Grün/Weiß)Aufwärtskerze. Bedeutet, dass der Schlusskurs höher war als der Eröffnungskurs, was auf eine Käuferkontrolle und einen Nettokaufdruck in diesem Zeitraum hindeutet.
Die Farbe des Körpers (Rot/Schwarz)Abwärtskerze. Bedeutet, dass der Schlusskurs niedriger war als der Eröffnungskurs, was auf die Kontrolle der Verkäufer und den Nettoverkaufsdruck in diesem Zeitraum hinweist.
Oberer Docht / SchattenDie dünne Linie, die sich vom oberen Rand des Korpus bis zum höchsten Preis der Periode erstreckt. Sie stellt eine Ablehnung höherer Preise dar und zeigt, wo die Verkäufer eingriffen und den Preis nach unten drückten.
Unterer Docht / SchattenDie dünne Linie, die sich vom unteren Rand des Korpus bis zum niedrigsten Preis der Periode erstreckt. Sie stellt eine Ablehnung niedrigerer Preise dar und zeigt, wo Käufer einsprangen und den Preis nach oben trieben.
Hoch (des Zeitraums)Der absolute Höchstkurs, der während des Zeitrahmens der Kerze gehandelt wurde. Es ist die Spitze des oberen Dochts und stellt den Höhepunkt des Kaufinteresses dar.
Tief (des Zeitraums)Der absolut niedrigste Preis, der während des Zeitrahmens der Kerze gehandelt wurde. Es ist der Endpunkt des unteren Dochtes und stellt die Spitze des Verkaufsinteresses dar.

Das Verständnis dieser Struktur ermöglicht es Händlern, wiederkehrende Muster zu erkennen, die potenzielle marktpsychologische Veränderungen signalisieren – ein direktes Erbe von Hommas ursprünglichen Erkenntnissen. Zu den üblichen Strukturen gehören Kerzen mit langem Körper für starke Trends, „Doji“-Kerzen mit minimalem Körper für Unentschlossenheit und Kerzen mit langen unteren Dochten (wie „Hammers“), die auf eine Ablehnung niedriger Preise hindeuten.

Die Bedeutung einer Struktur ist jedoch nie absolut, sie ist völlig kontextabhängig. Eine lange grüne Kerze am Ende eines Abwärtstrends ist ein starkes Signal einer Aufwärtsumkehr, aber die gleiche Kerze nach einem langen Aufwärtstrend könnte einen letzten Höhepunkt der Käufe signalisieren. Die wahre Kunst liegt also nicht im Auswendiglernen von Formen, sondern in der Interpretation dessen, was das Gleichgewicht von Körper und Dochten im Kontext der Position der Struktur im Horoskop über den ständigen Kampf zwischen Angst und Gier aussagt.

Heute liegt unser Hauptaugenmerk auf den Dochten – diesen subtilen, aber aussagekräftigen Indikatoren für die Ablehnung des Marktes und die versteckte Liquidität. Wir werden die Möglichkeiten von MQL5 nutzen, um das Konzept hinter dem Market Periods Synchronizer zu verbessern und es zu erweitern, um Dochtregionen zu isolieren und zu visualisieren. Diese Verbesserung wird es sowohl Enthusiasten als auch Analysten ermöglichen, das Tool in ihre Studien zu integrieren, sodass es einfacher wird, Marktstrukturen mit höherem Zeithorizont zu entschlüsseln und zu interpretieren.

Der Docht im Detail

Wir alle sind mit der Vorstellung vertraut, dass Kerzendochte – oder Schatten – Preisverwerfungen darstellen, die Zonen, in denen der Marktdruck dem vorherrschenden Trend vorübergehend widersteht oder ihn umkehrt. Doch nur wenige Händler oder Analysten nehmen sich die Zeit, diese Ereignisse auf die Strukturen im unteren Zeitrahmen herunterzubrechen, wo sich die wahre Geschichte entfaltet. Durch die Untersuchung der kleineren Zeitrahmen können wir beginnen, die interne Architektur dieser Dochte zu verstehen und die Mikromuster zu erkennen, die zusammen die sichtbare Ablehnung bilden, die auf den Kerzen der höheren Zeitrahmen zu sehen ist.

In dieser Studie ist es unser Ziel, diese Ablehnungszonen mit Hilfe von MQL5 programmatisch zu visualisieren und zu isolieren und so die Lücke zwischen Preisformationen auf höheren Zeitebenen und den zugrunde liegenden Mechanismen auf niedrigeren Zeitebenen zu schließen. Wenn wir eine einzelne Kerze mit höherem Zeitrahmen – z. B. einen H1-Balken – auf dem M1-Chart vergrößern, erkennen wir, dass bekannte Strukturen wie Doppelböden, Doppelspitzen, Kanäle und Dreiecke oft als Grundlage für diese Dochte dienen. Diese Formationen sind alles andere als zufällig, sie stellen lokalisierte Liquiditätsschlachten dar, Momente, in denen Kauf- und Verkaufsdruck aufeinandertreffen und der Markt seine nächste Richtungsänderung beschließt. Indem wir diese internen Formationen verstehen, gewinnen wir ein tieferes Verständnis dafür, wie Ablehnungen, Umkehrungen und Momentum-Pivots aus dem Schatten des Preises selbst hervorgehen.

Es ist wichtig zu wissen, dass nicht alle Ablehnungen gleich sind. Zwei H4-Pinbars können beispielsweise eine ähnliche äußere Form haben, sich aber in ihrer inneren Struktur völlig unterscheiden, wenn sie auf niedrigeren Zeitebenen betrachtet werden. Eine könnte ein sauberes Doppelbodenmuster aufweisen, während eine andere eine abrupte Konsolidierung oder einen Volatilitätsanstieg zeigen könnte. Jeder Docht sagt etwas anderes über die Marktstimmung, den Auftragsfluss und die Psychologie des Händlers aus.

Unser Ziel ist daher einfach, aber aufschlussreich: Wir wollen die Dochtzonen von Kerzen mit höherem Zeitrahmen direkt auf Charts mit niedrigerem Zeitrahmen hervorheben, um sie für eine detaillierte Analyse visuell hervorzuheben. Wir hoffen, dadurch neue Erkenntnisse über Marktverwerfungen zu gewinnen, den verborgenen Rhythmus von Liquiditätsverschiebungen zu verstehen und neue Formen des technischen Studiums anzuregen – vielleicht sogar neue Handelsstrategien, die auf einem tieferen Verständnis der Kerzenschatten aufbauen.

Mit all dem Wissen, das wir bis jetzt aufgebaut haben, ist es nun an der Zeit, in die Umsetzungsphase einzutreten. In der heutigen Sitzung werden wir einige wichtige Verbesserungen an unserer bestehenden Codebasis vornehmen und neue Funktionen einführen, die die analytische Tiefe des Tools erweitern. Im nächsten Abschnitt erfahren Sie, wie diese Upgrades die Dochtvisualisierung auf eine dynamischere und intuitivere Weise zum Leben erwecken.



Implementierung – Verbesserung der Marktperioden-Synchronisierung für die Visualisierung der Dochte

Schritt 1-Initialisierung und Einrichtung (UI + Laufzeitstatus)

Wir beginnen damit, dass wir die Eingaben zur Kompilierzeit in veränderbare Globals zur Laufzeit kopieren, damit das Dashboard Werte ändern kann, ohne den EA neu zu laden. Die Nutzeroberfläche ist auf einem halbtransparenten CCanvas-Bitmap-Label aufgebaut, das sich hinter interaktiven Objekten befindet. Um Namenskollisionen zu vermeiden und die Bereinigung präzise zu gestalten, verwendet jeder UI-Objektname ein Präfix pro Chart, MPS_UI_<chart_id>_. Die Leinwandbreite wird so eingestellt, dass die neuen Schaltflächen Minimieren und Beenden Platz finden: g_bg_w = 430. Die Schaltfläche Minimieren befindet sich bei x=340 (45px breit); Beenden bei x=385 (40px). Mausbewegungsereignisse sind aktiviert, sodass vertikale Schieberegler funktionieren, und EventSetTimer(g_RefreshSec) startet periodische Aktualisierungen, die durch den Aktualisierungsschieberegler gesteuert werden.

Warum dieses Design:

  • Veränderbare Laufzeitkopien ermöglichen sofortige UI-gesteuerte Änderungen,
  • Eindeutige Präfixe garantieren die Isolierung pro Instanz,
  • Die halbtransparente Leinwand bietet einen kompakten, lesbaren Container, während das Chart sichtbar bleibt, und
  • Timer + OnTick-Koordination minimiert unnötiges Neuzeichnen.

int OnInit()
  {
   main_chart_id = ChartID();

   // copy inputs -> runtime
   g_HigherTF   = InpHigherTF;
   g_Lookback   = MathMax(10, InpLookback);
   g_ColorMajor = InpColorMajor;
   g_WidthMajor = MathMax(1, InpWidthMajor);
   g_RefreshSec = MathMax(1, InpRefreshSec);
   // + g_ShowWicks = InpShowWicks; etc.

   // unique UI prefix per chart
   UI_PREFIX = StringFormat("MPS_UI_%d_", main_chart_id);
   lbl_title   = UI_PREFIX + "LBL_TITLE";
   btn_minimize= UI_PREFIX + "BTN_MIN";
   btn_quit    = UI_PREFIX + "BTN_QUIT";
   // ... other object names ...

   // background area coordinates and size
   g_bg_x = 6; g_bg_y = Y_OFFSET - 6;
   g_bg_w = 430;        // fits title + Minimize + Quit
   g_bg_h = 250;

   // create UI background and widgets
   CreateUIBackground();                         // draws semi-transparent canvas
   CreateLabel(lbl_title, 12, 4 + Y_OFFSET, "Market Period Synchronizer Control Utility", 12);
   ObjectSetInteger(main_chart_id, lbl_title, OBJPROP_COLOR, XRGB(230,230,230));

   // create minimize and quit buttons at requested positions
   CreateButton(btn_minimize, 340, 4 + Y_OFFSET, 45, 20, "Minimize");
   CreateButton(btn_quit,     385, 4 + Y_OFFSET, 40, 20, "Quit");

   // create other UI elements (TF selectors, sliders, color buttons...)
   CreateAllOtherUIObjects();

   // interactive support
   ChartSetInteger(main_chart_id, CHART_EVENT_MOUSE_MOVE, true);
   EventSetTimer(g_RefreshSec);

   RefreshLines();
   return(INIT_SUCCEEDED);
  }

Schritt 2 – Visualisierung der Dochtfüllung (Kernzeichnungslogik)

Wenn g_ShowWicks eingeschaltet ist, werden die oberen und unteren Dochtregionen jeder Higher-Timeframe-Kerze berechnet und als halbtransparente Rechtecke gezeichnet. Für jeden großen Balken berechnen wir body_top, = MathMax(open, close) und body_bot = MathMin(open, close). Wenn high > body_top, erstellen oder aktualisieren wir ein oberes Dochtrechteck mit dem Namen HTF_MAJ_W_U_<TF>_<time>. Ebenso ist das untere Dochtrechteck HTF_MAJ_W_L_<TF>_<time>. Alle Dochtobjekte werden auf OBJPROP_BACK = true und OBJPROP_SELECTABLE = false gesetzt, damit sie die Nutzeroberfläche nicht beeinträchtigen. Jedes erstellte Dochtobjekt wird an die keepNames[]-Liste angehängt, damit die Garbage Collection verwaiste Formen entfernt.

Warum dieses Design:

  • Durch das Ausfüllen der Dochtbereiche werden die Ablehnungs-/Liquiditätszonen visuell isoliert,
  • Alpha Blending macht Dochte visuell unauffällig, aber lesbar, und
  • Namensgebung und Aufbewahrungslisten gewährleisten konsistente Aktualisierungen und sauberes Entfernen.

// for each major bar (sorted_times/opens/closes prepared earlier)
double bar_high = sorted_highs[i];
double bar_low  = sorted_lows[i];
double body_top = MathMax(p_open, p_close);
double body_bot = MathMin(p_open, p_close);
uint wick_col   = ARGB(g_WickAlpha, 220,220,220);  // e.g. g_WickAlpha = 140

// upper wick
if(bar_high > body_top)
  {
   string wname_u = PREFIX_MAJ + "W_U_" + TFToString(g_HigherTF) + "_" + IntegerToString((int)t);
   if(ObjectFind(0, wname_u) == -1)
     ObjectCreate(0, wname_u, OBJ_RECTANGLE, 0, t, body_top, t + PeriodSeconds(g_HigherTF), bar_high);

   ObjectSetInteger(0, wname_u, OBJPROP_BGCOLOR, wick_col);
   ObjectSetInteger(0, wname_u, OBJPROP_COLOR,   wick_col);
   ObjectSetInteger(0, wname_u, OBJPROP_FILL,    true);
   ObjectSetInteger(0, wname_u, OBJPROP_BACK,    true);
   ObjectSetInteger(0, wname_u, OBJPROP_SELECTABLE, false);
   ObjectMove(0, wname_u, 0, t, body_top);
   ObjectMove(0, wname_u, 1, t + PeriodSeconds(g_HigherTF), bar_high);
   // add to keepNames[] so GC won't delete it
  }
else
  {
   // remove upper wick if it no longer exists
   ObjectDelete(0, wname_u);
  }

// lower wick similar logic...

Schritt 3 – Interaktive Steuerelemente: Kippschalter, Schieberegler, Minimieren und Beenden

Alle Interaktionen laufen über OnChartEvent. Ein Klick auf den Dochtschalter schaltet g_ShowWicks um und ruft sofort RefreshLines() auf, sodass die Nutzer die Ergebnisse in Echtzeit sehen. Schieberegler sind als vertikale Knöpfe implementiert, die über einer Spur platziert werden; durch Ziehen werden Laufzeitwerte aktualisiert (z. B. g_WidthMajor, g_RefreshSec). Minimieren und Beenden werden deterministisch gehandhabt:

Minimieren schaltet g_minimized um. Beim Minimieren wird die Höhe der Leinwand auf einen minimalen Streifen (≈30px) verkleinert und jedes UI-Objekt mit Ausnahme des Titels und der Schaltfläche Wiederherstellen (zuvor Minimieren) ausgeblendet, sodass das Chart frei zugänglich ist und der Status erhalten bleibt.

Quit ruft zuerst DeleteAllHTFLines() und dann ExpertRemove() auf, um das Programm sauber zu beenden.

Wichtige Sicherheitsvorschriften werden umgesetzt:

  • Dropdowns und das Ziehen von Schiebereglern sind deaktiviert, wenn g_minimized true ist.
  • Ein Klick außerhalb des TF-Dropdowns blendet es aus.
  • Das Ziehen des Schiebereglers verwendet CHARTEVENT_MOUSE_MOVE und klemmt den Knopf zwischen der oberen und unteren Spur ein.

void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam)
  {
   // Minimize / Restore
   if(id == CHARTEVENT_OBJECT_CLICK && sparam == btn_minimize)
     {
      g_minimized = !g_minimized;
      if(g_minimized) MinimizeUI(); else RestoreUI();
      return;
     }

   // Quit
   if(id == CHARTEVENT_OBJECT_CLICK && sparam == btn_quit)
     {
      DeleteAllHTFLines();      // remove all HTF_ objects
      ExpertRemove();           // exit EA
      return;
     }

   // Wicks toggle
   if(id == CHARTEVENT_OBJECT_CLICK && sparam == btn_toggle_wicks)
     {
      g_ShowWicks = !g_ShowWicks;
      ObjectSetString(main_chart_id, btn_toggle_wicks, OBJPROP_TEXT, g_ShowWicks ? "Wicks: ON" : "Wicks: OFF");
      RefreshLines();
      return;
     }

   // Slider knob click => set g_slider_drag/g_current_slider; mouse-move used to update value
   // ... slider drag handling omitted for brevity ...
  }

Hilfsaktionen für Minimieren/Wiederherstellen:

void MinimizeUI()
  {
   // Hide most UI objects and shrink canvas
   HideAllUIExceptTitleAndRestore();
   UpdateBackgroundHeight(30);
  }

void RestoreUI()
  {
   // Re-create/re-show UI objects and expand canvas
   UpdateBackgroundHeight(250);
   ShowAllUIObjects();
  }

Schritt 4 – Bereinigung und Deinitialisierung

Beim Deinit (oder wenn Quit angeklickt wird) führt der EA eine deterministische, vollständige Bereinigung durch:

  • EventKillTimer() stoppt periodische Timer-Rückrufe.
  • DeleteAllHTFLines() durchläuft ObjectsTotal() und löscht alle Objekte, deren Name das Präfix HTF_ enthält (vertikale Linien, Füllungen, offene/geschlossene Trendlinien, Dochtrechtecke und ihre Beschriftungen).
  • Alle mit dem UI_PREFIX erstellten UI-Objekte werden explizit durch Iteration eines names[]-Arrays gelöscht.
  • Alle Schieberegler-Objekte werden gelöscht.
  • Alle offenen Dropdowns werden ausgeblendet, und g_bgCanvas.Destroy() wird aufgerufen, um das Bitmap-Label zu entfernen.

Warum dies notwendig ist:

  • Stellt sicher, dass das Chart nach dem Entfernen unberührt bleibt (keine Geisterobjekte),
  • Verhindert, dass Timer-Objekte neu erstellen, nachdem der EA entfernt wurde,
  • Macht den EA sicher für wiederholtes Laden/Entladen.

void OnDeinit(const int reason)
  {
   EventKillTimer();

   // remove all HTF_* objects
   DeleteAllHTFLines();

   // explicit removal of UI names we created
   string names[] = { lbl_title, btn_major_tf, lbl_major_tf, btn_lookback_minus, lbl_lookback, btn_lookback_plus,
                      btn_toggle_openclose, btn_toggle_fill, btn_toggle_wicks, btn_major_col1, btn_major_col2,
                      btn_major_col3, btn_major_col4, btn_minor1_toggle, btn_minor1_tf, btn_minor2_toggle,
                      btn_minor2_tf, btn_clear_all, lbl_major_width, lbl_refresh_label, btn_minimize, btn_quit };
   for(int i=0;i<ArraySize(names);i++)
     if(StringLen(names[i])>0) ObjectDelete(main_chart_id, names[i]);

   // remove slider objects
   for(int s=0; s<SLIDER_COUNT; s++)
     {
      if(StringLen(g_slider_track_names[s])>0) ObjectDelete(main_chart_id, g_slider_track_names[s]);
      if(StringLen(g_slider_knob_names[s])>0)  ObjectDelete(main_chart_id, g_slider_knob_names[s]);
     }

   if(g_tf_dropdown_visible) HideTFDropdown();

   // destroy canvas bitmap
   g_bgCanvas.Destroy();
  }

Praktischer Nutzen und Hinweise für Entwickler nach den Erweiterungen:

Durch diese Erweiterung wird der Synchronizer von einem passiven Marker-Generator in ein interaktives Analyseprogramm umgewandelt:

  • Dochtfüllungen helfen dabei, Ablehnungszonen, Fallen und potenzielle Liquiditätscluster aufzudecken, indem sie die exakten Preisbereiche außerhalb des Kerzenkörpers hervorheben; Alpha-Blending bietet unmittelbaren Kontext, ohne die Preisbalken zu verdecken.
  • Minimieren bewahrt den Zustand der Nutzeroberfläche und reduziert gleichzeitig die Unübersichtlichkeit des Bildschirms – ideal für den Wechsel zwischen konzentriertem Lernen und ungehinderter Chart-Erstellung.
  • Quit bietet eine rückstandsfreie Beendigung mit einem Klick für saubere Multi-EA-Workflows.
  • Schieberegler und Farbschaltflächen machen die visuelle Abstimmung schnell und intuitiv – kein wiederholtes Aufrufen des Eingabedialogs.

Tipps für Entwickler:

  1. Behalten Sie alle Objektnamen unter einem einzigen vorhersehbaren Präfix: Dies vereinfacht Deinit und Debugging erheblich.
  2. Wenn Sie bei jedem Tick viele Objekte erstellen, sollten Sie immer ein keepNames[] beibehalten und einen einzigen abschließenden Sweep durchführen, um veraltete Objekte zu löschen – so wird ein Aufbau vermieden und die Charts bleiben reaktionsfähig.
  3. Um die Leistung zu verbessern, sollten Sie das Neuzeichnen vermeiden, wenn es nicht erforderlich ist: Koordinieren Sie die Erkennung neuer Balken bei OnTick mit dem EventSetTimer und rufen Sie RefreshLines() nur auf, wenn dies erforderlich ist (neue Haupt-/Nebenbalken oder Änderungen der Nutzeroberfläche).
  4. Machen Sie die Leinwand nicht auswählbar und UI-Objekte ganz vorne (OBJPROP_BACK = false), damit die Interaktion zuverlässig bleibt



Tests

Live-Chart-Bereitstellung

Der Einsatz des Market Periods Synchronizer EA auf einem Live-Chart des MetaTrader 5 ist sowohl einfach als auch hochgradig optimiert für die visuelle Echtzeitanalyse. Im Gegensatz zu herkömmlichen Strategieprüfungsumgebungen, die das dynamische Rendering von Objekten einschränken, ist dieses Tool für die direkte Interaktion mit dem Chart und das Eintauchen in den Markt konzipiert. Um zu beginnen, kompilieren Sie einfach den EA-Quellcode (am Ende dieses Artikels) in MetaEditor mit F7, wodurch die .ex5-Datei erzeugt wird. Ziehen Sie ihn dann aus dem Navigator-Panel auf den von Ihnen gewählten Chart, vorzugsweise einen niedrigeren Zeitrahmen wie M5 oder M15. Diese granularen Ansichten offenbaren am besten die inneren Dochtstrukturen in Kerzen mit höherem Zeitrahmen wie H1 oder D1 und ermöglichen eine detaillierte Beobachtung von Ablehnungen und Liquiditätsreaktionen.

Nach dem Anhängen bietet das Dialogfeld Eingaben die Flexibilität, die Visualisierung an Ihre Studienpräferenzen anzupassen. Stellen Sie InpHigherTF ein, um den primären Analysezeitrahmen zu definieren (z. B. H1), und passen Sie InpLookback zwischen 100 und 300 Kerzen an, um eine historische Grundlage zu erreichen, ohne Ihr Chart zu überladen. Um die Analyse der Dochte zu aktivieren, aktivieren Sie InpShowWicks = true und nehmen Sie eine Feineinstellung von InpWickAlpha vor (etwa 120), um ein glattes, halbtransparentes Erscheinungsbild zu erhalten, das sich harmonisch in die Chart-Daten einfügt. Obwohl der EA keine Handelslogik verwendet, gewährleistet die Aktivierung von AutoTrading die volle Reaktionsfähigkeit des Skripts, was Sie durch Umschalten der Schaltfläche „AutoTrading“ in der Symbolleiste bestätigen können.

Sobald das System initialisiert ist, konfiguriert es sich selbst – es zeichnet ständig alle relevanten Haupt- und Nebenzeitrahmenmarkierungen, füllt die Körper aus und jetzt auch die Zonen der Dochte, die jeweils dynamisch aktualisiert werden, wenn der Markt sich weiterentwickelt. Das interaktive Dashboard, das sich in der oberen linken Ecke befindet, ermöglicht den sofortigen Zugriff auf alle Bedienelemente, einschließlich der neuen Minimierungsoption für eine kompakte Anzeige und des Docht-Ein-/Ausschalters für visuelle Klarheit während der Analyse. Das OnTick()-Ereignis synchronisiert kontinuierlich alle Elemente mit den neuesten Marktdaten und sorgt so für reibungslose Live-Aktualisierungen ohne Unterbrechungen.

Dieser Live-Einsatz eignet sich hervorragend für Intraday-Händler und -Analysten: Man kann die Dochtbildung beobachten, während sie sich entfaltet, sie mit der Mikrostruktur auf niedrigeren Zeitrahmen korrelieren oder die Nebenperioden für den Zusammenfluss mehrerer Ebenen umschalten. Wenn der Fokus während der Handelsausführung benötigt wird, klappt die Minimierungsfunktion die Oberfläche zusammen, sodass das Chart vollständig sichtbar ist und nicht behindert wird.

Die Animation unten zeigt den EA in Live-Aktion im MetaTrader 5-Terminal – mit Echtzeit-Visualisierung, interaktiven Steuerelementen und Dochteffekten. Jede Komponente funktioniert genau wie vorgesehen, was den Erfolg der neuen Verbesserungen bestätigt. Diese solide Grundlage inspiriert uns bereits dazu, das Tool weiter auszubauen, indem wir tiefere Analysen und noch intuitivere Kontrollmechanismen integrieren.

Abb. 3. Testen der neuen Funktionen


Schlussfolgerung

Wie Live-Tests bestätigen, hat sich der Market Periods Synchronizer über die Grenzen eines statischen Indikators hinaus entwickelt – er dient nun als dynamisches Objektiv für die verborgenen Mechanismen der Preise und ermöglicht Händlern tiefere, intuitivere Markteinblicke. In einem Umfeld, in dem flüchtige Ablehnungen über Chancen oder Verluste entscheiden können, verwandeln die Live-Reaktionsfähigkeit und der nahtlose Betrieb dieses EAs Beobachtung in Präzision.

Diese Untersuchung ist besonders bedeutsam, da sie sich auf die Dochtpreisbewegung konzentriert – eine wichtige, aber oft übersehene Komponente der Marktstruktur. Durch die Visualisierung und Isolierung von Dochtregionen können Analysten nun untersuchen, wie sich der Kurs innerhalb dieser Ablehnungszonen verhält, und Liquiditätsfallen, Absorptionspunkte oder Umkehrspuren aufdecken, die das Rückgrat größerer Bewegungen bilden. Die Beobachtung dieser Reaktionen auf niedrigeren Zeitebenen, z. B. M5 innerhalb von H1- oder H4-Kerzen, bietet eine beispiellose Klarheit für das Verständnis des Zusammenspiels zwischen kurzfristiger Volatilität und langfristiger Struktur.

Ebenso beeindruckend ist die verbesserte Nutzeroberfläche mit Echtzeit-Interaktivität durch die neuen Steuerelemente Minimieren, Beenden und Docht ein/aus. Diese Ergänzungen verbessern die Nutzerfreundlichkeit, indem sie ein schnelles Umschalten, eine Entrümpelung des Arbeitsbereichs und eine Beendigung des Charts mit einem Mausklick ermöglichen, sodass das Chart vollkommen sauber bleibt. Das Werkzeug läuft jetzt reibungslos, bleibt auch unter Live-Bedingungen stabil und stellt sicher, dass jedes Objekt beim Entfernen automatisch gelöscht wird, was eine durchdachte Technik und eine professionelle Ausführung widerspiegelt.

Wichtige Lektionen

Wichtige LektionBeschreibung:
Verwenden Sie eindeutige Präfixe zur Identifizierung von Objekten.Weisen Sie allen vom EA erstellten Chart-Objekten konsistente Präfixe zu (z.B. „HTF_MAJ_“), die ein effizientes, gezieltes Löschen mittels StringFind() in Schleifen über ObjectsTotal() ermöglichen. Dies verhindert Benennungskonflikte mit anderen Indikatoren und gewährleistet eine gründliche Bereinigung bei Deinitialisierungs- oder Beendigungsoperationen, wie in DeleteAllHTFLines() gezeigt.
Implementierung von modularer UI-Erstellung und -ZerstörungKapseln Sie die Einrichtung von UI-Elementen in speziellen Funktionen wie CreateAllOtherUIObjects() und entsprechenden Löschroutinen, um dynamische Zustände wie die Minimierung der Nutzeroberfläche zu erleichtern. Diese Modularität unterstützt das nahtlose Umschalten zwischen erweiterten und eingeklappten Ansichten ohne redundanten Code, was die Lesbarkeit des Codes und die Wartung in interaktiven Dashboards verbessert.
Nutzen Sie ARGB für nicht-intrusive visuelle ÜberlagerungenNutzen Sie Alphatransparenz in ARGB-Farben für das Rendern von Dochtfüllungen und Hintergründen, um halbtransparente Überlagerungen zu ermöglichen, die Ablehnungszonen hervorheben, ohne die Kursentwicklung zu verdecken. Einstellbare Alphawerte (z. B. g_WickAlpha=120) sorgen für ein Gleichgewicht zwischen Sichtbarkeit und Klarheit, wie es in RefreshLines() für professionelle, überlagerte Chart-Verbesserungen integriert ist.
Optimieren der Ereignisbehandlung mit State GuardsIntegrieren Sie boolesche Flags (z.B. g_minimized) als „Aufpasser“ in OnChartEvent(), um Interaktionen wie Dropdowns oder Schieberegler nur in aktiven UI-Zuständen bedingungslos zu verarbeiten. Dies verhindert Fehler in eingeklappten Modi und optimiert die Nutzerabläufe, z. B. durch die Gating-TF-Dropdown-Sichtbarkeit für reaktionsschnelle, fehlerfreie Steuerelemente.
Umfassende Ressourcenbereinigung in OnDeinit sicherstellenSystematische Freigabe aller Ressourcen – Zeitgeber über EventKillTimer(), Objekte über explizite Löschungen und Schleifen und Leinwände über Destroy() – in OnDeinit(), wobei die Logik der Beenden-Schaltfläche mit DeleteAllHTFLines() gespiegelt wird. Auf diese Weise werden Speicherlecks und unübersichtliche Charts vermieden und die bewährten Praktiken von MetaTrader 5 für abtrennbare EAs eingehalten.

Anlagen

DateinameVersionBeschreibung
MarketPeriodsSynchronizerEA.mq51.01Der grundlegende Expert Advisor mit Multi-Timeframe-Perioden-Synchronisation, Docht-Visualisierung mit Alpha-Blended Fills, interaktivem Dashboard für Toggles/Slider und UI-Minimierungs-/Beendigungskontrollen für einen verbesserten Arbeitsablauf des Traders.

Zurück zum Inhalt

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

Der Algorithmus Central Force Optimization (CFO) Der Algorithmus Central Force Optimization (CFO)
Der Artikel stellt den von den Gesetzen der Schwerkraft inspirierten Algorithmus Central Force Optimization (CFO) vor. Es wird untersucht, wie die Prinzipien der physikalischen Schwerkraft Optimierungsprobleme lösen können, bei denen „schwerere“ Lösungen weniger erfolgreiche Gegenstücke anziehen.
Indikator für die Stärke eines Währungspaares in reinem MQL5 Indikator für die Stärke eines Währungspaares in reinem MQL5
Wir werden einen professionellen Indikator für die Analyse der Währungsstärke in MQL5 entwickeln. Diese Schritt-für-Schritt-Anleitung zeigt Ihnen, wie Sie ein leistungsstarkes Handels-Tool mit einem visuellen Dashboard für MetaTrader 5 entwickeln können. Sie werden lernen, wie Sie die Stärke von Währungspaaren über mehrere Zeitrahmen (H1, H4, D1) berechnen, dynamische Datenaktualisierungen implementieren und eine nutzerfreundliche Oberfläche erstellen können.
Vom Neuling zum Experten: Forex Markt Perioden Vom Neuling zum Experten: Forex Markt Perioden
Jede Marktperiode hat einen Anfang und ein Ende und schließt jeweils mit einem Preis, der die Stimmung definiert – ähnlich wie bei Kerzen. Anhand dieser Bezugspunkte können wir die vorherrschende Marktstimmung einschätzen und erkennen, ob Auf- oder Abwärtskräfte die Kontrolle haben. In dieser Diskussion machen wir einen wichtigen Schritt nach vorn, indem wir eine neue Funktion innerhalb des Market Periods Synchronizer entwickeln – eine Funktion, die Forex-Marktsitzungen visualisiert, um fundiertere Handelsentscheidungen zu unterstützen. Dieses Tool kann besonders hilfreich sein, um in Echtzeit festzustellen, welche Seite – Bullen oder Bären – die Sitzung dominiert. Erforschen wir dieses Konzept und entdecken wir die Erkenntnisse, die es bietet.
Neuronale Netze im Handel: Zweidimensionale Verbindungsraummodelle (letzter Teil) Neuronale Netze im Handel: Zweidimensionale Verbindungsraummodelle (letzter Teil)
Wir erforschen weiterhin den innovativen Chimera-Rahmen – ein zweidimensionales Zustandsraummodell, das neuronale Netzwerktechnologien zur Analyse mehrdimensionaler Zeitreihen nutzt. Diese Methode bietet eine hohe Vorhersagegenauigkeit bei geringen Rechenkosten.