Durchbruch bei der Trailing-Stop-Loss-Quantitative-Trading-Strategie in London und New York

ORB EMA SL TP RRR 交易会话 追踪止损 价格突破 风险管理
Erstellungsdatum: 2025-04-27 11:32:24 zuletzt geändert: 2025-04-27 11:32:24
Kopie: 2 Klicks: 334
2
konzentrieren Sie sich auf
319
Anhänger

Durchbruch bei der Trailing-Stop-Loss-Quantitative-Trading-Strategie in London und New York Durchbruch bei der Trailing-Stop-Loss-Quantitative-Trading-Strategie in London und New York

Überblick

Die Strategie basiert auf dem 15-minütigen Preisspanne vor dem Auftakt der Londoner und New Yorker Handelszeit. Die Strategie erfasst die Preisbewegung zu Beginn der Auftaktphase in den beiden wichtigsten Finanzzentren und tritt in die entsprechende Richtung ein, wenn der Preis in den ersten 15 Minuten einen Höchststand oder ein Tiefpunkt erreicht. Die Kernmerkmale der Strategie sind die Verwendung eines Stop-Loss-Tracking-Mechanismus, der es ermöglicht, die Gewinne zu schützen und gleichzeitig zu wachsen.

Strategieprinzip

Die Strategie arbeitet in zwei Schlüsselfristen: in der Londoner Marktöffnung (3:00-3:15 Uhr New Yorker Zeit) und in der New Yorker Marktöffnung (9:30-9:45 Uhr New Yorker Zeit). Die Strategie arbeitet wie folgt:

  1. Die 15-minütigen Höchst- und Tiefstpreise in London und New York wurden getrennt aufgezeichnet und bilden eine “Preisspanne”.
  2. Wenn ein Preisbereich gebildet wird, überprüft die Strategie, ob die Größe des Bereichs die Mindestanforderungen erfüllt (Voreinstellungswert 2 Punkte)
  3. Wenn der Preis den Bereichshöchstwert von unten durchbricht und die EMA-Filterbedingungen erfüllt werden (wenn aktiviert), wird eine Position aufgenommen.
  4. Wenn der Preis den Bereichstief von oben nach unten durchbricht und die EMA-Filterbedingungen (falls aktiviert) erfüllt werden, wird die Position aufgelöst.
  5. Stop-Loss-Einstellungen außerhalb der Grenze des Preisbereichs in der entgegengesetzten Richtung des Durchbruchs
  6. Stop-Loss-Ziel als RR (Standard 2.0) multipliziert mit der Bandbreitenhöhe
  7. Setzen Sie gleichzeitig einen Tracking-Stopp, der die 8 kleinste Veränderungseinheit als Default anzeigt und sich anpasst, wenn sich der Preis in eine günstige Richtung bewegt

Die Schlüssellogik der Strategie besteht darin, einen Kursdurchbruch zu Beginn der Handelsphase zu erfassen, der in der Regel ein Hinweis auf mögliche nachfolgende Trendbewegungen ist. Durch den Einsatz eines Stop-Loss-Systems kann die Strategie einen profitablen Handel fortsetzen, während sie bereits profitable Geschäfte schützt.

Strategische Vorteile

Nach eingehender Analyse hat die Strategie folgende Vorteile:

  1. Doppel-Zeit-TraditionsmöglichkeitenDurch die gleichzeitige Betrachtung der Londoner und New Yorker Börsenöffnungen ist die Strategie in der Lage, die Schwankungen der beiden Haupthandelszeiten zu erfassen und die Handelsmöglichkeiten zu erhöhen.
  2. Verfolgung von Stop-Loss-MechanismenIm Gegensatz zu festen Stop-Losses können Stop-Loss-Tracking-Systeme die Entwicklung von profitablen Geschäften ermöglichen und gleichzeitig die durchschnittlichen Gewinnsätze erhöhen.
  3. Perfekte RisikokontrolleDie Strategie nutzt dynamische Stop-Loss-Einstellungen basierend auf der Volatilität (die Größe der Bandbreite), um das Risikomanagement besser auf die Marktbedingungen abzustimmen.
  4. Stärkere AnpassungsfähigkeitDer Benutzer kann die Risikobetragquote, die Größe des Mindestbereichs, die Verfolgung der Stop-Loss-Punkte und die Verwendung von EMA-Filtern anpassen, um sich an verschiedene Handelsarten und persönliche Risikopräferenzen anzupassen.
  5. Filter für technische KennzahlenOptionelle 5-minütige EMA-Filterbedingungen helfen, Rückschlüsse zu vermeiden und die Qualität des Handels zu verbessern.
  6. Eine Transaktion pro ZeitrahmenStrategie-eingebettete Handelszeichen sorgen dafür, dass nicht mehr als ein Handel pro Periode ausgeführt wird, um die Kosten und Risiken zu vermeiden, die mit dem häufigen Handel verbunden sind.

Strategisches Risiko

Obwohl die Strategie so konzipiert ist, gibt es folgende potenzielle Risiken:

  1. Falsche DurchbruchgefahrDer Preis kann nach einem kurzen Durchbruch der Zonengrenze sofort zurückfallen, was zu einem Stop-Loss-Ausgang führt. Gegen diese Gefahr kann ein zusätzlicher Bestätigungsmechanismus in Betracht gezogen werden, der beispielsweise verlangt, dass der Preis nach dem Durchbruch eine bestimmte Zeit hält oder eine bestimmte Größe erreicht, um eine Position zu eröffnen.
  2. FinanzierungsproblemeStrategie: Die Standardstrategie ist der Handel mit einer festen Anzahl von Kontrakten, die möglicherweise nicht für alle Kapitalstufen geeignet sind. Es wird empfohlen, die Positionsgröße an die Kontogröße und die Risikobereitschaft anzupassen.
  3. Risiken der ParameteroptimierungÜberoptimierte Parameter können zu einer Kurvenanpassung führen, die in einem zukünftigen Marktumfeld nicht gut abschneidet. Auf die Stabilitätstests der Parameter sollte geachtet werden.
  4. Abhängigkeit vom MarktumfeldDie Strategie kann häufig zu Stop-Losses führen, wenn die Marktlage unsicher ist und keine Trends zu erkennen sind. Es kann in Betracht gezogen werden, die Umgebungsfilterbedingungen zu erhöhen.
  5. Probleme mit der ZeitzoneDer Code verwendet die New York-Zeitzone, die mit der Zeitzone der Handelsplattform übereinstimmt. Andernfalls kann es zu einer Fehlstellung des Handelssignals kommen.
  6. Auswirkungen der FeiertageDie Strategie enthält keine Urlaubs-Filterlogik.

Richtung der Strategieoptimierung

Auf der Grundlage der Strategieanalyse können folgende Optimierungsmöglichkeiten ermittelt werden:

  1. Erweiterte BestätigungsmechanismenEs kann in Betracht gezogen werden, zusätzliche Bestätigungsbedingungen nach dem Preisbruch hinzuzufügen, wie z. B. das Durchbrechen der Transaktionsmenge, die Beibehaltung von mehreren K-Linien in der Richtung des Durchbruchs, um den Verlust durch falsche Durchbrechungen zu verringern.
  2. Dynamische KapitalverwaltungDie Größe der Positionen wird dynamisch an die Marktvolatilität und die Größe der Konten angepasst, um die Rendite-Risiko-Relation zu optimieren.
  3. Marktumfeld-FilterEinführung von Volatilitäts- oder Trendstärke-Indikatoren und Aussetzung des Handels in einem Marktumfeld, das nicht für eine Durchbruchstrategie geeignet ist.
  4. Bestätigung mehrerer ZeiträumeDer Trend wird in die Richtung eines längeren Zeitraums kombiniert und nur in der Richtung gehandelt, die mit dem großen Trend übereinstimmt
  5. Optimierte EinstiegszeitEs ist möglich, dass Sie bei einem Preisrückschlag zu einem kritischen Support-/Widerstandspunkt eingreifen, anstatt direkt bei einem Durchbruch zu gehen, um einen besseren Kostenpreis zu erhalten.
  6. Filterzeit erhöhenAnalysieren Sie die historische Performance für verschiedene Tage und Zeiträume und vermeiden Sie schlechte Zeiten.
  7. Mehrsprachige KorrelationsanalyseBerücksichtigen Sie die Korrelationen zwischen den verschiedenen Handelsarten und vermeiden Sie es, mehrere Positionen mit hoher Korrelation gleichzeitig zu halten.

Zusammenfassen

Die Strategie ist für die Öffnungszeiten der beiden großen Finanzzentren in London und New York entwickelt worden. Durch die Erfassung der Kursbewegungen und -richtung zu Beginn der Öffnung in Kombination mit einem Stop-Tracking-Mechanismus kann die Strategie das Gewinnpotenzial maximieren, während die Risiken kontrolliert werden. Obwohl Risiken wie Falschbrüche und Marktumgebungsabhängigkeit vorhanden sind, können die Stabilität und die Ertragsfähigkeit der Strategie durch angemessene Parameter-Einstellungen und zusätzliche Filterbedingungen weiter verbessert werden.

Strategiequellcode
/*backtest
start: 2024-04-27 00:00:00
end: 2025-04-25 08:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"SOL_USDT"}]
*/

//@version=6
strategy("ORB-LD-NY-Trail Strategy", overlay=true,
     default_qty_type=strategy.fixed, default_qty_value=1,
     calc_on_order_fills=true, calc_on_every_tick=true)

// =========================
// USER INPUTS
// =========================
riskReward      = input.float(2.0, "Risk-Reward Ratio", minval=1.0)
minBoxSize      = input.float(2.0, "Minimum Box Size (points)")
trailStopTicks  = input.int(8, "Trailing Stop (ticks)", minval=1)
useEmaFilter    = input.bool(false, "Use 5-min EMA Filter?")

tickSize        = syminfo.mintick         // auto-detect min tick for symbol
trailStopOffset = trailStopTicks * tickSize
emaSource       = request.security(syminfo.tickerid, "5", ta.ema(close, 200))  // 5-min chart EMA

// =========================
// SESSION TIMES
// =========================
londonStart = timestamp("America/New_York", year, month, dayofmonth, 3, 0)
londonEnd   = timestamp("America/New_York", year, month, dayofmonth, 3, 15)
nyStart     = timestamp("America/New_York", year, month, dayofmonth, 9, 30)
nyEnd       = timestamp("America/New_York", year, month, dayofmonth, 9, 45)

inLondon = time >= londonStart and time <= londonEnd
inNY     = time >= nyStart and time <= nyEnd

// =========================
// ONE TRADE PER SESSION FLAGS
// =========================
var bool londonTraded = false
var bool nyTraded     = false

// =========================
// LONDON BOX
// =========================
var float londonHigh    = na
var float londonLow     = na
var float londonBoxHigh = na
var float londonBoxLow  = na

if inLondon
    if na(londonHigh)
        londonBoxHigh := na
        londonBoxLow  := na
        londonTraded  := false
    londonHigh := na(londonHigh) ? high : math.max(londonHigh, high)
    londonLow  := na(londonLow)  ? low  : math.min(londonLow,  low)

if not inLondon and na(londonBoxHigh) and not na(londonHigh) and not na(londonLow)
    londonBoxHigh := londonHigh
    londonBoxLow  := londonLow
    londonHigh    := na
    londonLow     := na

if time > londonEnd and not na(londonBoxHigh) and not londonTraded
    boxRange = londonBoxHigh - londonBoxLow
    if boxRange >= minBoxSize
        // Standard SL/TP logic
        longSL  = londonBoxHigh - boxRange
        longTP  = londonBoxHigh + boxRange * riskReward
        shortSL = londonBoxLow  + boxRange
        shortTP = londonBoxLow  - boxRange * riskReward

        // === LONDON LONG ===
        condLong1 = close[1] <= londonBoxHigh
        condLong2 = close > londonBoxHigh
        condLong3 = (not useEmaFilter) or (close > emaSource)

        if condLong1 and condLong2 and condLong3
            strategy.entry("London Long", strategy.long)
            strategy.exit("Exit London Long", from_entry="London Long",
                          stop=longSL, limit=longTP,
                          trail_points=trailStopOffset)
            londonTraded := true

        // === LONDON SHORT ===
        condShort1 = close[1] >= londonBoxLow
        condShort2 = close < londonBoxLow
        condShort3 = (not useEmaFilter) or (close < emaSource)

        if not londonTraded and condShort1 and condShort2 and condShort3
            strategy.entry("London Short", strategy.short)
            strategy.exit("Exit London Short", from_entry="London Short",
                          stop=shortSL, limit=shortTP,
                          trail_points=trailStopOffset)
            londonTraded := true

// =========================
// NY BOX
// =========================
var float nyHigh    = na
var float nyLow     = na
var float nyBoxHigh = na
var float nyBoxLow  = na

if inNY
    if na(nyHigh)
        nyBoxHigh := na
        nyBoxLow  := na
        nyTraded  := false
    nyHigh := na(nyHigh) ? high : math.max(nyHigh, high)
    nyLow  := na(nyLow)  ? low  : math.min(nyLow,  low)

if not inNY and na(nyBoxHigh) and not na(nyHigh) and not na(nyLow)
    nyBoxHigh := nyHigh
    nyBoxLow  := nyLow
    nyHigh    := na
    nyLow     := na

if time > nyEnd and not na(nyBoxHigh) and not nyTraded
    boxRange = nyBoxHigh - nyBoxLow
    if boxRange >= minBoxSize
        longSL  = nyBoxHigh - boxRange
        longTP  = nyBoxHigh + boxRange * riskReward
        shortSL = nyBoxLow  + boxRange
        shortTP = nyBoxLow  - boxRange * riskReward

        // === NY LONG ===
        condNYLong1 = close[1] <= nyBoxHigh
        condNYLong2 = close > nyBoxHigh
        condNYLong3 = (not useEmaFilter) or (close > emaSource)

        if condNYLong1 and condNYLong2 and condNYLong3
            strategy.entry("NY Long", strategy.long)
            strategy.exit("Exit NY Long", from_entry="NY Long",
                          stop=longSL, limit=longTP,
                          trail_points=trailStopOffset)
            nyTraded := true

        // === NY SHORT ===
        condNYShort1 = close[1] >= nyBoxLow
        condNYShort2 = close < nyBoxLow
        condNYShort3 = (not useEmaFilter) or (close < emaSource)

        if not nyTraded and condNYShort1 and condNYShort2 and condNYShort3
            strategy.entry("NY Short", strategy.short)
            strategy.exit("Exit NY Short", from_entry="NY Short",
                          stop=shortSL, limit=shortTP,
                          trail_points=trailStopOffset)
            nyTraded := true

// Visual session background
bgcolor(inLondon ? color.new(color.fuchsia, 85) : na)
bgcolor(inNY     ? color.new(color.green,   85) : na)