Analyse von Kurs-Zeit-Lücken in MQL5 (Teil I): Entwicklung eines einfachen Indikators
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
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.
Eine alternative Log-datei mit der Verwendung der HTML und CSS
Untersuchung von Conformal Prediction bei Finanzzeitreihen
- 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.
Guten Tag! Beim Kompilieren treten Warnungen auf, ich habe einen Screenshot angehängt.
“ 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.