und werden Sie Mitglied unserer Fangruppe
Veröffentliche einen Link auf das Skript, damit die anderen ihn auch nutzen können
Bewerten Sie es im Terminal MetaTrader 5
- Ansichten:
- 5
- Rating:
- Veröffentlicht:
-
Benötigen Sie einen Roboter oder Indikator, der auf diesem Code basiert? Bestellen Sie ihn im Freelance-Bereich Zum Freelance
Übersicht
Fast alles, was in MetaTrader integriert ist, orientiert sich am Kalender. Jede Minute, jede Stunde und jeden Tag schließt ein Balken, und Indikatoren sowie Expert Advisors erfassen den Markt anhand dieses festen Rasters. Doch der Markt weiß nicht, was eine Minute ist. Während einer Nachrichtenveröffentlichung können innerhalb einer Minute hundert bedeutende Kursbewegungen stattfinden, während eine Stunde in einer ruhigen Handelssitzung fast keine Informationen enthält. Bei der Erfassung anhand der Uhr wird beiden das gleiche Gewicht beigemessen.
Die „intrinsische Zeit“ ist die von der Olsen-Gruppe in Zürich formalisierte Alternative: Der Kurs soll entscheiden, wann Zeit vergeht. Man legt ein Schwellen-Delta fest. Die Uhr tickt nur, wenn sich der Kurs um das Delta von seinem letzten Extrempunkt weg bewegt – also eine Richtungsänderung stattfindet. Nachdem sich eine Änderung bestätigt hat, läuft der Kurs in der Regel noch eine Weile in die neue Richtung weiter, und diese Fortsetzung ist der Überschwinger. Der gesamte Kursverlauf wird zu einer abwechselnden Abfolge von Abschnitten mit Richtungswechsel und Überschwinger, die in den Arbeiten als „Küstenlinie“ bezeichnet wird. Eine turbulente Stunde und eine ruhige Stunde werden dann in derselben Einheit gemessen: Ereignissen.

Ein gezackter Kursverlauf, der bei einem festen Schwellenwert in Abschnitte mit Richtungswechsel (durchgezogene Linie) und Überschwingung (gestrichelte Linie) unterteilt wurde. Die Uhr der intrinsischen Zeit tickt nur bei den Ereignissen.
Dieser Expert Advisor ist eine reine MQL5-Portierung der Alpha Engine, des gegen den Trend handelnden „Coastline“-Traders, den Golub, Glattfelder und Olsen auf Basis dieser Uhr entwickelt haben. Er eröffnet eine Position gegen eine Kursbewegung bei einem intrinsischen Ereignis, stockt die Position beim nächsten Ereignis auf, wenn sich der Kurs weiterhin gegen ihn bewegt (Kaskadierung), und schließt die hinzugefügten Teile nacheinander mit Gewinn, sobald sich der Kurs umkehrt (Entkaskadierung). Da die Positionen stets nur in festen Schritten aufgestockt werden, handelt es sich nicht um ein Martingale. Der Entscheidungskern, die Log-Schwellenwert-Runner und der informationstheoretische Liquiditätsindikator sind eine Zeile-für-Zeile-Übersetzung des Referenz-Java-Codes der Autoren. Lediglich die Auftragsabwicklung wurde an das Terminal angepasst.

Ein Long-Agent kaskadiert (erweitert), wenn der Kurs durch aufeinanderfolgende intrinsische Ereignisse fällt, und de-kaskadiert (verkauft mit Gewinn), wenn sich der Kurs erholt.
Wie er handelt
Der EA führt das in der Studie beschriebene Ensemble aus: acht unabhängige Agenten, jeweils einen Long-Only- und einen Short-Only-Agenten bei jeder der vier Schwellenwerte 0,25 %, 0,5 %, 1 % und 1,5 %. Jeder Agent verwaltet seine Orders und Positionen über eine eigene Magic Number, sodass sich die Agenten niemals gegenseitig in ihre Trades einmischen.
Der gesamte Lebenszyklus läuft über Limit-Orders auf einem Hedging-Konto ab, wobei jeder Kaskadenschritt naturgemäß eine eigene Position darstellt. Ein Long-Agent hält eine einzelne Buy-Limit-Order, die auf dem nächsten nach unten gerichteten intrinsischen Ereignisniveau ruht, und jede Ausführung eröffnet eine Position mit einem Take-Profit genau um den Delta-Wert über dem Einstiegspreis. Dieser Take-Profit ist die „De-Kaskade“. Wenn der Kurs fällt, werden die Kauf-Limit-Aufträge nacheinander ausgeführt; wenn er sich erholt, werden sie durch die Take-Profits nacheinander abgebaut. Ein Short-Agent ist das Spiegelbild davon. Der ruhende Auftrag wird nur dann neu platziert, wenn sich etwas ändert (ein intrinsisches Ereignis, ein Tier-Wechsel oder eine Ausführung), sodass der EA nicht bei jedem Tick Aufträge generiert.
Zwei Schutzmechanismen verhindern, dass ein reiner Contrarian in einem Trend davonläuft. Der erste ist eine bestandsgesteuerte Asymmetrie: Jeder Agent rückt bei jedem Tick drei Läufer vor, und der aktuelle Bestand entscheidet, welcher davon die Orders steuert. Wenn sich der Bestand aufbaut, weitet sich die ungünstige Schwelle im Verhältnis zur günstigen aus, sodass der Agent zögert, Positionen aufzubauen, und bestrebt ist, diese zu reduzieren. Die zweite ist die fraktionierte Positionsgröße: Die hinzugefügte Einheit wird kleiner, je mehr sich der Bestand vergrößert.
| Bestand (Einheiten) | Aktiver Läufer | Ungünstiger : günstiger Schwellenwert | Hinzugefügte Einheit |
|---|---|---|---|
| unter 15 | Symmetrisch | 1 : 1 (Delta in beide Richtungen) | 1 |
| 15 bis 30 | Erste Schräglage | 2 : 1 (1,5 Delta gegenüber 0,75 Delta) | 1/2 |
| 30 und mehr | Zweite Schiefe | 4 : 1 (2 Delta gegenüber 0,5 Delta) | 1/4 |
Darüber hinaus wird der Wert durch den Liquiditätsindikator L skaliert, ein informationstheoretischer Maßstab dafür, wie normal die jüngste Kursentwicklung ist. Er behandelt jedes intrinsische Ereignis als Symbol, mittelt die Überraschung (Selbstinformation) der Ereignisfolge, standardisiert sie und bildet sie über die Normalverteilungsfunktion ab. L liegt nahe bei 1, wenn sich der Kurs wie ein normaler Markt verhält, und fällt gegen 0, wenn die Kursentwicklung ungewöhnlich einseitig ist. Der Zuschlag bleibt bei einem L-Wert von 0,5 oder mehr unverändert, wird zwischen 0,1 und 0,5 halbiert und unter 0,1 auf ein Zehntel reduziert. Der Indikator arbeitet mit einem eigenen, breiteren Überschreitungsschwellenwert, dem 2,525729-fachen von Delta – dem Wert, den die Studie wählt, um mit L normale von abnormalen Bewegungen so scharf wie möglich voneinander abzugrenzen.
Abstrakte Einheiten werden über den Input „InpLotPerUnit“ in Lots umgewandelt, und „InpMaxUnits“ begrenzt den Bestand jedes Agenten. Diese Obergrenze ist eine Risikokontrollmaßnahme, die in der Arbeit unberücksichtigt bleibt: Sobald sie erreicht ist, storniert der Agent seinen ruhenden Auftrag und fügt nichts mehr hinzu, während die offenen Take-Profits weiterhin aktiv bleiben.
Empfohlene Konfiguration
| Einstellung | Empfohlener Wert | Anmerkungen |
|---|---|---|
| Symbol | EURUSD | Das Entwicklungs- und Testinstrument, anhand dessen die Skalierungsgesetze der Studie verifiziert wurden. Die Schwellenwerte sind relativ (Prozent des Kurses), sodass andere liquide Devisenpaare ohne Neuskalierung funktionieren. |
| Zeitrahmen | Beliebig | Der EA wird Tick für Tick in intrinsischer Zeit gesteuert, sodass der Zeitrahmen des Charts keinen Einfluss auf seine Entscheidungen hat. |
| Kontotyp | Hedging | Erforderlich. Jeder Kaskadenschritt muss eine eigene Position darstellen; auf einem Netting-Konto gibt der EA daher gemäß seiner Konzeption eine Meldung aus und gibt den Wert INIT_FAILED zurück. |
| Tester-Modell | Jeder Tick basiert auf echten Ticks | Intrinsische Ereignisse werden anhand des Tick-Streams definiert, sodass bar-basierte Modelle sowohl die Ereignisse als auch die Limit-Ausführungen falsch darstellen. Der Tester übernimmt den Margin-Modus des Kontos, bei dem Sie angemeldet sind; melden Sie sich daher vor dem Testen bei einem Hedging-Konto an. |
| InpLotPerUnit | 0,02 (Standard), bis zu 0,4 | Bei einem Lot-Schritt von 0,01 bleiben die halben und viertel Einheiten sowie der Liquiditäts-Haircut nur dann als eigenständige Größen bestehen, wenn eine Einheit bei etwa 0,4 Lots liegt. Darunter werden die kleineren Aufstockungen auf das Mindestlot angehoben. Die Schwellenwert-Verzerrung ist in den Runners verankert und bleibt davon unberührt. |
Backtest-Ergebnisse
EURUSD, tickbasiert auf Basis realer Ticks, 2. Februar bis 31. Juli 2026, 10.000 Anfangseinlage auf einem Hedging-Konto, Standardwerte (InpLotPerUnit = 0,02, InpMaxUnits = 30) mit allen acht Agenten aktiviert. Die Schwellenwerte, Größenregeln und Take-Profits entsprechen denen des Papers und sind nicht auf dieses Symbol oder diesen Zeitraum abgestimmt.

Der Strategie-Tester-Bericht für den sechsmonatigen EURUSD-Lauf.
Der Lauf erzielte eine Rendite von +10,68 % bei einem Profitfaktor von 2,21 und einem maximalen Kapitalrückgang von 10,10 % über 318 Positionen. Hinter der Nettozahl verbergen sich zwei sehr unterschiedliche Ströme, und eine Aufschlüsselung nach der Art des Positionsabschlusses ist aufschlussreicher als die Gesamtsumme:
| Komponenten des Sechsmonatsergebnisses | Betrag |
|---|---|
| 294 Positionen, die bei ihrem Take-Profit geschlossen wurden | +1.934,14 |
| 24 Positionen, die vom Tester am Ende des Laufs geschlossen wurden | -823,55 |
| Provision bei Eröffnung der Positionen | -42,14 |
| Nettogewinn | +1.068,45 |
Beide Schlusssalden enthalten bereits den Swap, der sich auf -620,38 belief und damit weit über der Provision lag. Bei einem Modell, das eine Kaskade über Wochen hinweg halten kann, sind die Finanzierungskosten und nicht der Spread der dominierende Kostenfaktor. Die 24 Positionen, die der Tester geschlossen hat, sind Kaskaden, die sich nie erholt haben: Im Live-Handel wären sie noch offen.

Der Saldo (blau) steigt an, sobald Take-Profits ausgelöst werden. Das Eigenkapital (grün) trägt die offenen Kaskaden und gleicht sich erst mit dem Saldo aus, wenn der Tester sie am letzten Tag schließt.
Hierbei handelt es sich um ein Währungspaar über einen Zeitraum von sechs Monaten; es zeigt also einen Funktionsmechanismus und keine Performance-Schlagzeile. Jede Strategie, die Gewinner schließt und Verlierer hält, führt zu einem steigenden Saldo, weshalb die Eigenkapitalkurve und die erzwungenen Schließungen die Teile sind, die es zu untersuchen lohnt.
Eingabeparameter
| Parameter | Standard | Beschreibung |
|---|---|---|
| InpLotPerUnit | 0,02 | Lots pro abstrakter Einheit der Papiergröße. Erhöhen Sie diesen Wert in Richtung 0,4, um die Bruchgröße bei einem 0,01-Lot-Symbol exakt beizubehalten, oder senken Sie ihn, um mit kleineren Einheiten zu handeln. |
| InpMaxUnits | 30 | Bestandsobergrenze pro Agent in Einheiten. Sobald diese erreicht ist, werden keine neuen Positionen mehr eröffnet, und die offenen Take-Profit-Aufträge bleiben bestehen, um die Position abzuwickeln. Die tiefste Skew-Stufe greift erst ab 30 Einheiten, sodass sie bei der Standardobergrenze nie erreicht wird. |
| InpMagicBase | 990000 | Basis-Magic-Number. Die acht Agenten verwenden Werte von InpMagicBase bis InpMagicBase + 7; ändern Sie diesen Wert daher, falls ein anderer EA auf dem Konto diesen Bereich nutzt. |
| InpTradeLong | true | Die vier Long-Only-Agenten ausführen. |
| InpTradeShort | true | Führe die vier reinen Short-Agenten aus. Sind beide aktiviert, entspricht das Ensemble dem vollständig symmetrischen Aufbau der Studie. |
Verwendung der Klassen in Ihrem eigenen Code
Ein Agent ist eine eigenständige Klasse, CAeLiveTrader. Er weiß nichts über die anderen Agenten, sodass ein EA einen einzelnen Agenten, einen anderen Satz von Schwellenwerten oder mehrere Symbole ausführen kann, indem er so viele Instanzen erstellt, wie er benötigt:
#include <IntrinsicTime\AeLiveTrader.mqh> CAeLiveTrader agent; //--- in OnInit: ein Long-Only-Agent mit einem Delta von 0,5 %, 0,02 Lots pro Einheit, Obergrenze von 30 Einheiten agent.Init(_Symbol,990100,1,0.005,0.02,30.0); //--- in OnTick MqlTick t; if(SymbolInfoTick(_Symbol,t)) agent.OnTickUpdate(t.bid,t.ask,t.time); //--- in OnDeinit: Der offene Eintrag wird storniert, die Positionen behalten ihre Take-Profit-Werte bei agent.Shutdown();
Der „Intrinsic-Time“-Runner ist ebenfalls eigenständig einsetzbar. CAeRunner akzeptiert separate Aufwärts- und Abwärtsschwellenwerte im Logarithmus des Kurses, gibt bei jeder Kursnotierung einen Ereigniscode zurück (plus oder minus 1 bei einer Richtungsänderung, plus oder minus 2 bei einem Überschwingschritt, ansonsten 0) und kennt stets die genauen Kurse, bei denen die nächsten Ereignisse ausgelöst würden – was ihn zu einer natürlichen Quelle für Limit-Order-Niveaus für andere Strategien macht:
#include <IntrinsicTime\AeRunner.mqh> CAeRunner runner; runner.Init(0.005,0.005,0.005,0.005); // Delta nach oben/unten, Überschwingen nach oben/unten int ev=runner.Run(AeTick(t.bid,t.ask,t.time)); if(ev==AE_EVENT_DC_DOWN) Print("downturn confirmed, next level below: ",runner.ExpectedLowerIE());
Der Liquiditätsindikator CAeLocalLiquidity folgt demselben Muster: Initialisieren Sie ihn mit einem Schwellenwert, leiten Sie jede Kursnotierung über „Computation“ ein und lesen Sie den aktuellen Wert von L mit „Liq“ aus.
Einschränkungen
Wissenswertes, bevor man ihn an etwas anderes als ein Demokonto anbindet.
- Es gibt keinen Ausstieg aus der gesamten Position. Der Referenzhändler aus der Studie schließt die gesamte Position eines Agenten, sobald dessen Gesamtrendite – realisiert plus offen – Delta erreicht. Der Live-Agent bildet dies nicht nach. Eine Kaskade, die sich ungünstig entwickelt und sich nie wieder erholt, wird durch „InpMaxUnits“ gestoppt, aber nicht geschlossen, und ihre Take-Profits bleiben aktiv. Dies ist das größte Einzelrisiko im Design, und die erzwungene Schließung im obigen Backtest ist der Preis dafür.
- Swaps dominieren die Kosten. Kaskaden können wochenlang offen bleiben, sodass die Übernachtfinanzierung weitaus schwerer wiegt als Spreads oder Provisionen. Überprüfen Sie die Swap-Sätze Ihres Brokers auf beiden Seiten, bevor Sie den Test ausführen.
- Bei der vorgegebenen Lotgröße vereinfacht sich die Positionsgrößenbestimmung. Bei 0,02 Lots pro Einheit beträgt eine vollständige Aufstockung 0,02 Lots, und jede kleinere Aufstockung wird auf das Minimum von 0,01 Lots aufgerundet, sodass sich die Positionsgrößenleiter im Simulationsmodell auf zwei Stufen reduziert. Durch Anheben von „InpLotPerUnit“ in Richtung 0,4 wird sie wiederhergestellt, allerdings bei einer deutlich größeren Positionsgröße.
- Realisierter Gewinn ist kein Vorteil. Bei einem driftfreien Zufallsweg ist der realisierte Gewinn der Engine immer positiv, während ihr Gesamtgewinn im Erwartungswert null ist. Ein Währungspaar und ein Testfenster können in keiner Weise einen Vorteil belegen.
- Die Runner pausieren außerhalb der Handelssitzungen. Der EA kehrt vorzeitig aus „OnTick“ zurück, wenn die Sitzung des Symbols geschlossen wird, was das Journal übersichtlich hält und den Backtest beschleunigt. Dies ist nur bei einem Feed von Bedeutung, der auch während der Handelspause weiterhin Kurse liefert.
Dateistruktur
Ein Expert Advisor und vier Header. Die Header sind als <IntrinsicTime\...> enthalten, daher müssen sie sich in einem Unterordner „IntrinsicTime“ unter „Include“ befinden.
| Datei | Rolle | Beschreibung |
|---|---|---|
| Experts\IntrinsicTime\AlphaEngine.mq5 | Der EA | Erzwingt ein Hedging-Konto, bildet das Ensemble aus acht Agenten an den vier Schwellenwerten der Studie, schaltet sich entsprechend der Handelssitzung ein und steuert jeden Agenten mit dem aktuellsten Kurs. |
| Include\IntrinsicTime\AeLiveTrader.mqh | Live-Agent | CAeLiveTrader, ein Coastline-Agent, der echte Limit-Orders handelt: Auswahl des Runners nach Bestand, fraktionierte und liquiditätsbasierte Positionsgrößen, Lot-Normalisierung sowie der einzelne ruhende Einstieg mit seinem de-kaskadierten Take-Profit. |
| Include\IntrinsicTime\AeRunner.mqh | Intrinsic-Time-Runner | CAeRunner, der log-schwellenwertbasierte Richtungswechsel-Runner mit separaten Aufwärts- und Abwärtsschwellenwerten, der Richtungswechsel- und Überschreitungsereignisse sowie die Kursniveaus ausgibt, bei denen die nächsten Ereignisse ausgelöst würden. |
| Include\IntrinsicTime\AeLiquidity.mqh | Liquiditätsindikator | CAeLocalLiquidity, der informationstheoretische Indikator L, der jeden Zuwachs skaliert, mit eigenem Runner und der Normalverteilungsfunktion der Referenz. |
| Include\IntrinsicTime\AeTypes.mqh | Gemeinsame Typen | Die Bid/Ask-Tick-Struktur und die Codes für intrinsische Ereignisse, die der Runner, der Indikator und der Agent untereinander austauschen. |
Forschungsgrundlage
Die Implementierung folgt:
- Anton Golub, James B. Glattfelder und Richard B. Olsen, „The Alpha Engine: Designing an Automated Trading Algorithm“, 2017, SSRN 2951348.
- James B. Glattfelder, Alexandre Dupuis und Richard B. Olsen, „Patterns in high-frequency FX data: discovery of 12 empirical scaling laws“, Quantitative Finance, 2011.
- Die von den Autoren bereitgestellte Java-Implementierung, verfügbar auf GitHub. Die Portierung behält deren Eigenheiten bei, anstatt sie stillschweigend zu korrigieren.
Ein begleitender Artikel beschreibt die Erstellung des Richtungswechsel-Operators, reproduziert die Skalierungsgesetze anhand von 17,8 Millionen realen EURUSD-Ticks im Vergleich zu einem volatilitätsangepassten Zufallsweg, führt Klasse für Klasse durch die Portierung der Alpha Engine und testet deren Gewinnbehauptung für den Zufallsweg: „Intrinsic Time: Von den Skalierungsgesetzen des Richtungswechsels zur Alpha Engine“.
Übersetzt aus dem Englischen von MetaQuotes Ltd.
Originalpublikation: https://www.mql5.com/en/code/77871
Session Levels - Asia London New York High Low with Alerts
Zeichnet Hoch und Tief von bis zu 3 Handelssitzungen (Asien, London, New York) mit optionalen Ausbruchs-Alarmen ohne Repainting.
Repaint Inspector
Prüft, ob ein Indikator neu gezeichnet wird, anstatt der Angabe einfach zu vertrauen. Dabei werden die Puffer aller benutzerdefinierten Indikatoren bei bereits geschlossenen Kerzen erneut ausgelesen und jeder Wert gezählt, der sich ändert, erscheint oder verschwindet, wobei der früheste Zeitpunkt berücksichtigt wird, zu dem dies noch geschieht. Das Ergebnis wird pro Puffer in einem Chart-Panel angezeigt, jedes Ereignis wird in eine CSV-Datei geschrieben.
Mirror Hedge EA (Same terminal and account only)
Spiegelt Trades, die von einem anderen EA auf demselben Hedging-Konto eröffnet, geändert und geschlossen wurden, wobei die Auswahl anhand der Magic Number erfolgt. Standardmäßig kehrt das Programm die Richtung um (Kauf ↔ Verkauf, SL ↔ TP), sodass Sie das Gegenteil einer Strategie mit realen Spreads, Slippage und Ausführung im Forward-Test prüfen können.
Accelerator Oszillator (AC)
Der Acceleration/Deceleration Indikator (AC) misst die Beschleunigung und Verlangsamung des aktuellen Marktimpulses, der Kraft der Kursbewegung.