English Русский Español Português
preview
Analyse von Kurs-Zeit-Lücken in MQL5 (Teil I): Entwicklung eines einfachen Indikators

Analyse von Kurs-Zeit-Lücken in MQL5 (Teil I): Entwicklung eines einfachen Indikators

MetaTrader 5Handelssysteme |
13 3
Yevgeniy Koshtenko
Yevgeniy Koshtenko

Im modernen algorithmischen Handel besteht eine der wichtigsten Aufgaben darin, die Präsenz bedeutender Marktteilnehmer zu erkennen. Institutionelle Anleger, Hedgefonds und Banken hinterlassen unverwechselbare „Fingerabdrücke“ ihrer Aktivitäten, die erfahrene Händler erkennen und für ihr Trading nutzen lernen können. Eines der interessantesten und am wenigsten erforschten Phänomene sind Zeitlücken – Zonen, die der Kurs so schnell durchläuft, dass nur ein Algorithmus sie zuverlässig erkennen kann.

In diesem Artikel befassen wir uns mit der Entwicklung eines einzigartigen Indikators für MetaTrader 5, der auf die automatische Erkennung und Analyse von Zeitlücken spezialisiert ist. Unsere Haupthypothese lautet, dass sich der Kurs bei hohen Handelsvolumina so schnell durch bestimmte Kurszonen bewegt, dass eine Zeitlücke entsteht – ein Zeitraum, in dem in dieser Zone praktisch keine Handelsaktivität stattfindet.


Theoretische Grundlagen von Zeitlücken

Wenn ein großer institutioneller Akteur beschließt, eine Position einzugehen, steht er vor einem grundlegenden Liquiditätsproblem. Um das erforderliche Volumen zu erreichen, ohne den Kurs wesentlich zu beeinflussen, wird die algorithmische Ausführung genutzt, wobei große Aufträge zeitlich gestreckt werden. Versteckte Liquidität wird auch über Eisberg-Orders und Dark Pools genutzt, und die Aktivitäten mehrerer Fonds werden häufig koordiniert, um den Markteintritt zu synchronisieren.

Das Ergebnis solcher Aktivitäten ist eine Situation, in der der Kurs sehr schnell eine bestimmte Zone durchläuft und dabei die verfügbare Liquidität nahezu vollständig ausschöpft. Danach bleibt die Zone lange Zeit praktisch „leer“, da die institutionellen Algorithmen ihre Aufgabe bereits erfüllt und ihre Aktivität auf andere Kursniveaus verlagert haben.

Die Analyse verschiedener Arten institutioneller Einflussnahme ermöglicht es uns, die Mechanismen der Entstehung von Zeitlücken besser zu verstehen:

Art des institutionellen Einflusses
Volumen
Ausführungsgeschwindigkeit
Dauer der Zeitlücke  Typische Reaktion beim Test
Hedgefonds mittlerer Größe
5 bis 20 Millionen US-Dollar
Schnell (2–5 Bars)
 8–15 Bars Starker Abpraller (75 %)
Pensionskassen
50 bis 200 Millionen US-Dollar
Langsam (10–20 Bars)
 20–40 Bars Moderater Abpraller (60 %)
Zentralbanken
über 500 Millionen US-Dollar
Sehr schnell (1–3 Bars)
 30–60 Bars Scharfer Abpraller (85 %)


Mathematisches Modell

Um Zeitlücken zu quantifizieren, haben wir einen volumenbasierten Wirkungskoeffizienten (VIC) entwickelt, der nach folgender Formel berechnet wird:

VIC = (V × ΔP × LF × SF) / (T²)

where:
V - volume of trades in the zone
ΔP - price change during passage
LF - liquidity factor
SF - session activity factor
T - execution time in bars

Die quadratische Zeitabhängigkeit spiegelt eine grundlegende Tatsache wider: Je schneller sich eine Kursbewegung bei hohem Handelsvolumen vollzieht, desto wahrscheinlicher ist es, dass ein großer institutioneller Akteur den Markt beeinflusst. Dieser mathematische Ansatz ermöglicht die automatische Identifizierung von Zonen mit ungewöhnlich hohen Transaktionsausführungsgeschwindigkeiten.


Indikatorarchitektur

Der Indikator „Volume Time Gap Analysis“ basiert auf einer modularen Architektur und umfasst ein Scan-Modul zur Identifizierung potenzieller Einflusszonen, eine Analyse-Engine zur Berechnung der Lückenmerkmale, ein Überwachungssystem zur Verfolgung aktiver Zonen sowie ein Visualisierungsmodul zur Darstellung der Ergebnisse in einem Chart.

Die Architektur basiert auf der Struktur „VolumeTimeGap“, die alle erforderlichen Zeitlückenmerkmale umfasst:

struct VolumeTimeGap
{
   datetime formation_time;           // Gap formation time
   double   price_low, price_high;    // Price zone boundaries
   double   volume_concentration;     // Concentration of volume-based impact
   double   institutional_footprint;  // Imprint of institutional impact
   double   memory_strength;          // Market memory strength
   double   liquidation_speed;        // Position liquidation speed
   int      test_count;               // Number of zone tests
   double   success_rate;             // Percentage of successful rebounds
   bool     is_active;                // Gap activity status
};

Diese Struktur umfasst sowohl statische Parameter, die zum Zeitpunkt der Lückenbildung festgelegt werden, als auch dynamische Merkmale, die bei jeder Interaktion des Kurses mit der Zone aktualisiert werden.


Algorithmus zur Erkennung von Zeitlücken

Das Aufspüren von Zeitlücken ist ein komplexer Ablauf von Schritten. Der erste Schritt besteht darin, ein adaptives Raster zu erstellen, das die aktuelle Kursspanne in Analysezonen unterteilt. Die Rasterdichte passt sich automatisch an die Volatilität des Instruments und die Tiefe der Analyse an.

In der zweiten Phase wird für jede Zone eine forensische Analyse durchgeführt, die eine detaillierte Untersuchung der Zeitintervalle umfasst, in denen sich der Kurs in der Zone befindet bzw. nicht dort befindet. Es werden die volumenbasierten Kennzahlen berechnet und die Geschwindigkeit des Eintritts in die Zone und des Austritts aus ihr ermittelt.

In der dritten Phase wird anhand strenger statistischer Kriterien geprüft, ob die vorliegenden Evidenzen ausreichen, um die Zone als Zeitlücke einzustufen.

void ScanForVolumeTimeGaps(int analysis_depth)
{
   double highs[], lows[], opens[], closes[], volumes[];
   datetime times[];
   
   if(!PrepareMarketData(highs, lows, opens, closes, volumes, times, analysis_depth))
       return;
       
   double price_range_max = highs[ArrayMaximum(highs)];
   double price_range_min = lows[ArrayMinimum(lows)];
   double total_range = price_range_max - price_range_min;
   
   int grid_density = CalculateOptimalGridDensity(total_range);
   double grid_step = total_range / grid_density;
   
   for(int level = 0; level < grid_density; level++)
   {
       double zone_center = price_range_min + (level * grid_step);
       double zone_width = grid_step * Price_Zone_Sensitivity;
       
       AnalyzeZoneForVolumeGaps(zone_center - zone_width/2, 
                               zone_center + zone_width/2,
                               highs, lows, opens, closes, volumes, times);
   }
}
Jeder potenzielle Bereich wird einer eingehenden Analyse unterzogen. ZoneForensics, eine spezialisierte Struktur, sammelt systematisch Belege für die Art des Kursverhaltens in der untersuchten Zone:
struct ZoneForensics
{
   int total_appearances;            // Total number of price occurrences in the zone
   int longest_absence;              // Longest period of absence
   double volume_burst_intensity;    // Volume spike intensity
   double exit_velocity;             // Zone exit velocity
   datetime first_contact;           // Time of first contact with the zone
   datetime last_contact;            // Last contact time
};

Der Analyseprozess umfasst die Untersuchung jeder historischen Bar, die Feststellung, ob sich der Kurs in der Zone befindet, die Messung der Intensität der Handelsaktivität bei jedem Kontakt und die Berechnung der Ein- und Austrittsgeschwindigkeit.


Kriterien für die Hinlänglichkeit der Beweise

Eine Zeitlücke entsteht nur, wenn die Kriterien für die ausreichende Evidenz eines Signals erfüllt sind. Das System überprüft die Mindestdauer, während der sich der Kurs nicht in der Zone befindet: die maximal zulässige Verweildauer, die Schwellenwerte für die volumenbasierte Auswirkung sowie die Geschwindigkeitsmerkmale.

bool IsEvidenceSufficientForGap(const ZoneForensics &evidence)
{
   if(evidence.longest_absence < Min_Gap_Bars) return false;
   if(evidence.total_appearances > Max_Time_In_Zone) return false;
   
   double volume_impact = CalculateVolumeImpactCoefficient(evidence);
   if(volume_impact < Volume_Impact_Threshold) return false;
   
   double velocity_score = evidence.exit_velocity / GetAverageMarketVelocity();
   if(velocity_score < VELOCITY_THRESHOLD) return false;
   
   double confidence_score = (volume_impact * 0.4) + 
                            (velocity_score * 0.3) + 
                            (evidence.longest_absence / Min_Gap_Bars * 0.3);
   
   return confidence_score > CONFIDENCE_THRESHOLD;
}

Die Gesamtbewertung von „confidence_score“ setzt sich aus drei wesentlichen Komponenten zusammen: der volumenbasierten Auswirkung, den Geschwindigkeitsmerkmalen und der Dauer der Zeitlücke. Erst wenn der Schwellenwert überschritten wird, wird eine neue Zeitlücke erzeugt.

Die zentrale Neuerung des Indikators ist die Berechnung des „institutionellen Fingerabdrucks“ – einer komplexen Kennzahl, die die Wahrscheinlichkeit der Beteiligung eines bedeutenden institutionellen Akteurs an der Entstehung einer Zone quantitativ bewertet. Die Berechnung basiert auf der Analyse von drei Komponenten: der zeitlichen Konzentration der Aktivität, der relativen Volumenintensität und den Geschwindigkeitsmerkmalen der Kursbewegung.

double CalculateInstitutionalFootprint(const ZoneForensics &evidence)
{
   double speed_component = (evidence.total_appearances > 0) ? 
       evidence.longest_absence / evidence.total_appearances : 0.0;
   
   double volume_component = evidence.volume_burst_intensity / GetAverageVolume(100);
   double velocity_component = evidence.exit_velocity / GetAverageMarketVelocity();
   
   return (speed_component * 0.4 + volume_component * 0.3 + velocity_component * 0.3);
}

Die zeitliche Komponente spiegelt den Grad der Konzentration der Handelsaktivitäten im Zeitverlauf wider: Je größer das Verhältnis zwischen Abwesenheits- und Anwesenheitszeitraum ist, desto höher ist die Wahrscheinlichkeit eines institutionellen Einflusses. Die Volumenkomponente normiert die Handelsintensität im Verhältnis zur durchschnittlichen Marktaktivität, während die Geschwindigkeitskomponente die Abweichung der Kursbewegungsgeschwindigkeit misst.

Jede Zeitlücke besitzt eine dynamische „Gedächtnisstärke“, die den Grad des Einflusses der Zone auf das aktuelle Kursverhalten widerspiegelt. Die Gedächtnisstärke verändert sich im Laufe der Zeit nach einer komplexen Formel, die sowohl den natürlichen Prozess des Vergessens historischer Ereignisse durch den Markt als auch zyklische Faktoren der Handelsaktivität berücksichtigt.

void UpdateGapMemoryStrength(VolumeTimeGap &gap)
{
   double time_elapsed_hours = (double)(TimeCurrent() - gap.formation_time) / 3600.0;
   double base_decay_rate = 0.05;
   
   double daily_cycle = MathCos(2.0 * M_PI * time_elapsed_hours / 24.0);
   double cycle_factor = 1.0 + 0.1 * daily_cycle;
   
   gap.memory_strength = gap.institutional_footprint * 
                        MathExp(-base_decay_rate * time_elapsed_hours) * 
                        cycle_factor;
}

Das exponentielle Abklingmodell bildet den natürlichen Prozess ab, bei dem der Einfluss historischer Ereignisse auf die aktuellen Kurse nachlässt. Die zyklische Komponente berücksichtigt die täglichen Schwankungen der Handelsaktivität und spiegelt wider, dass der Einfluss institutioneller Zonen je nach Zeitpunkt der Handelssitzung stärker oder schwächer ausfallen kann.

Ein wichtiger Bestandteil des Systems ist die automatische Erfassung des Zeitpunkts, zu dem die Zeitlücke „geschlossen“ oder „gefüllt“ wird. Dies geschieht, wenn der Kurs die Zone vollständig durchläuft, was zeigt, dass das institutionelle Interesse an diesem Niveau erschöpft ist.

bool IsGapBeingMitigated(double current_price, const VolumeTimeGap &gap)
{
   for(int i = 0; i < 5; i++)
   {
      double high = iHigh(_Symbol, PERIOD_CURRENT, i);
      double low = iLow(_Symbol, PERIOD_CURRENT, i);
      double open = iOpen(_Symbol, PERIOD_CURRENT, i);
      double close = iClose(_Symbol, PERIOD_CURRENT, i);
      
      if((high >= gap.price_high && low <= gap.price_low) ||
         (open >= gap.price_high && close <= gap.price_low) ||
         (open <= gap.price_low && close >= gap.price_high))
      {
         return true;
      }
   }
   return false;
}

Wird ein Lückenschluss festgestellt, ändert das System automatisch die visuelle Darstellung der Zone, versetzt sie in den Status „geschlossen“ und benachrichtigt den Händler über das Ende des Lebenszyklus dieser institutionellen Ebene.


Anpassung an die Besonderheiten verschiedener Instrumente

Deviseninstrumente zeichnen sich durch hohe Liquidität und relativ geringe Volatilität aus, weshalb der Wert für „Volume_Impact_Threshold“ auf einen Bereich von 1,5 bis 2,0 und der Wert für „Min_Gap_Bars“ auf 5 bis 10 Bars gesenkt werden sollte. Durch den kontinuierlichen Charakter des Devisenhandels sind Zeitlücken weniger ausgeprägt, dafür aber über die Zeit stabiler.

Die Börse mit ihrer Handelsstruktur und ihren Schlusszeiten schafft natürliche Voraussetzungen für die Entstehung von Zeitlücken. Zu den empfohlenen Einstellungen gehören ein Wert für „Volume_Impact_Threshold“ im Bereich von 2,0 bis 3,0 und ein Wert für „Min_Gap_Bars“ zwischen 8 und 15 Bars. Besondere Aufmerksamkeit sollte den Zeitlücken gewidmet werden, die während der Zeiträume von Unternehmensereignissen und der Finanzberichterstattung entstehen.

Die Kryptowährungsmärkte zeichnen sich durch extreme Volatilität und die Präsenz großer institutioneller Akteure aus. Aufgrund der hohen Geschwindigkeit der Kursbewegungen ist es daher erforderlich, den „Volume_Impact_Threshold“-Wert auf 2,5–4,0 anzuheben und gleichzeitig den „Min_Gap_Bars“-Wert auf 3–8 Bars zu senken.


Indikatorsignale

Zeitlücken bieten einzigartige Möglichkeiten zur Generierung hochwertiger Handelssignale. Das effektivste Signal ist ein Abpraller an der Grenze der Zeitlücke, wenn sich der Kurs dieser Zone nähert und Anzeichen einer Trendwende zeigt. Die Wahrscheinlichkeit eines erfolgreichen Abprallers steht in direktem Zusammenhang mit der Gedächtnisstärke der Zeitlücke und deren statistischen Werten aus früheren Tests.

Ein Signal zur Schließung einer Zeitlücke tritt auf, wenn der Kurs die Zone vollständig durchläuft, und kann genutzt werden, um auf eine Fortsetzung der Bewegungsrichtung zu setzen, sobald die Zeitlücke geschlossen ist. Von besonderem Interesse sind falsche Ausbruchssignale, bei denen ein erfolgloser Versuch, eine Zeitlücke zu schließen, zu einer starken Bewegung in die entgegengesetzte Richtung führt.

In meinem Fall haben sich Rebounds als am effizientesten erwiesen:

Dieser Indikator wurde auf dem Konto recht erfolgreich getestet:


Fazit und Ausblick

Der Indikator ermittelt Zonen institutioneller Aktivität mithilfe eines mathematischen Modells, einer Auswertung des Marktgedächtnisses und eines Benachrichtigungssystems. Er ergänzt die Signale anderer Methoden und trägt dazu bei, Risiken präziser zu steuern.

Der Indikator erweist sich als besonders effizient im Rahmen komplexer Handelssysteme, da er die Signale anderer technischer Analysemethoden ergänzt und verstärkt. Die Möglichkeit, die Qualität jedes einzelnen Handelssignals zu quantifizieren, ermöglicht differenzierte Ansätze beim Risikomanagement und bei der Positionierung.

Zu den Entwicklungsplänen gehören:

  • maschinelles Lernen zur Anpassung an bestimmte Instrumente;
  • neue Kennzahlen auf der Grundlage der Marktmikrostruktur;
  • Versionen für verschiedene Anlageklassen;
  • Analyse mehrerer Zeitrahmen zur Entwicklung mehrstufiger Strategien.

Die Anwendung der Mehrzeitrahmenanalyse ermöglicht es uns, hierarchische Strukturen von Zeitlücken zu erkennen, wenn große institutionelle Zonen in höheren Zeitrahmen viele kleinere Zeitlücken in niedrigeren Zeiträumen enthalten. Dies eröffnet neue Möglichkeiten für die Entwicklung mehrstufiger Handelsstrategien mit unterschiedlichen Zeithorizonten.


Übersetzt aus dem Russischen von MetaQuotes Ltd.
Originalartikel: https://www.mql5.com/ru/articles/18592

Beigefügte Dateien |
Letzte Kommentare | Zur Diskussion im Händlerforum (3)
Валерий Смирнов
Валерий Смирнов | 28 Juni 2025 in 08:14

Guten Tag! Beim Kompilieren treten Warnungen auf, ich habe einen Screenshot angehängt.

Mustafa Nail Sertoglu
Mustafa Nail Sertoglu | 3 Juni 2026 in 18:15
Danke für die Weitergabe deiner Ideen/Codes. „
“ hat dazu geführt, dass sich das MT5-Terminal aufgehängt hat und die Datenübertragung unterbrochen wurde; vielleicht ist mein PC für neuere Anwendungen zu alt.
Max Brown
Max Brown | 4 Juni 2026 in 08:39
Dieser Artikel ist wirklich spannend, und ich bin schon sehr gespannt, wie es mit der Serie weitergeht!
Die Übertragung der Trading-Signale in einem universalen Expert Advisor. Die Übertragung der Trading-Signale in einem universalen Expert Advisor.
In diesem Artikel wurden die verschiedenen Möglichkeiten beschrieben, um die Trading-Signale von einem Signalmodul des universalen EAs zum Steuermodul der Positionen und Orders zu übertragen. Es wurden die seriellen und parallelen Interfaces betrachtet.
Backtracking-Suchalgorithmus (BSA) Backtracking-Suchalgorithmus (BSA)
Was wäre, wenn sich ein Optimierungsalgorithmus an seine bisherigen Durchläufe erinnern und diese Erinnerungen nutzen könnte, um bessere Lösungen zu finden? Genau das macht die BSA – sie schafft einen Ausgleich zwischen dem Entdecken von Neuem und dem Zurückgreifen auf das Bewährte. In diesem Artikel lüften wir die Geheimnisse des Algorithmus. Eine einfache Idee, wenige Parameter und ein zuverlässiges Ergebnis.
Eine alternative Log-datei mit der Verwendung der HTML und CSS Eine alternative Log-datei mit der Verwendung der HTML und CSS
In diesem Artikel werden wir eine sehr einfache, aber leistungsfähige Bibliothek zur Erstellung der HTML-Dateien schreiben, dabei lernen wir auch, wie man eine ihre Darstellung einstellen kann (nach seinem Geschmack) und sehen wir, wie man es leicht in seinem Expert Advisor oder Skript hinzufügen oder verwenden kann.
Untersuchung von Conformal Prediction bei Finanzzeitreihen Untersuchung von Conformal Prediction bei Finanzzeitreihen
In diesem Artikel befassen wir uns mit konformen Vorhersagen und der MAPIE-Bibliothek, die diese implementiert. Dieser Ansatz gehört zu den modernsten im Bereich des maschinellen Lernens und ermöglicht es uns, uns auf das Risikomanagement für bestehende, vielfältige Modelle des maschinellen Lernens zu konzentrieren. Konforme Vorhersagen sind an sich kein Verfahren zur Erkennung von Mustern in Daten. Sie geben lediglich das Konfidenzniveau bestehender Modelle bei der Vorhersage konkreter Beispiele an und ermöglichen die Filterung zuverlässiger Vorhersagen.