Stratégie de trading quantitatif stop loss suiveur révolutionnaire en double séance à Londres et à New York

ORB EMA SL TP RRR 交易会话 追踪止损 价格突破 风险管理
Date de création: 2025-04-27 11:32:24 Dernière modification: 2025-04-27 11:32:24
Copier: 2 Nombre de clics: 334
2
Suivre
319
Abonnés

Stratégie de trading quantitatif stop loss suiveur révolutionnaire en double séance à Londres et à New York Stratégie de trading quantitatif stop loss suiveur révolutionnaire en double séance à Londres et à New York

Aperçu

La stratégie est basée sur un système de négociation de rupture basé sur la zone de prix de 15 minutes avant l’ouverture des heures de négociation de Londres et de New York. La stratégie capture la dynamique des prix au début de l’ouverture des deux principaux centres financiers et entre dans la direction correspondante des transactions lorsque les prix franchissent les hauts ou les bas formés dans les 15 premières minutes.

Principe de stratégie

Le mécanisme de fonctionnement de la stratégie s’articule autour de deux périodes clés: l’ouverture du marché de Londres (03h00-3h15) et l’ouverture du marché de New York (09h30-9h45). Le processus de travail de la stratégie est le suivant:

  1. Les hauts et les bas des 15 premières minutes de Londres et de New York sont enregistrés séparément, formant une “ gamme de prix “
  2. Lorsque la fourchette de prix est formée, la stratégie vérifie si la fourchette de prix répond aux exigences minimales (default 2 points)
  3. Si le prix franchit le sommet de la fourchette en descendant et que les conditions de filtrage EMA sont remplies (si elles sont activées), le trader ouvre une position plus élevée.
  4. Si le prix franchit le trou intermédiaire par le bas vers le haut et que les conditions de filtrage EMA sont remplies (si elles sont activées), la position est ouverte à zéro.
  5. Le stop loss est placé à une hauteur de tranche à l’extérieur de la frontière de la tranche de prix dans la direction opposée à la rupture
  6. Objectif d’arrêt est le rapport de retour sur risque (défaut 2.0) multiplié par la hauteur de la fourchette
  7. Par défaut, 8 unités de variation minimale, ajustées à mesure que le prix se déplace dans une direction favorable

La logique clé de la stratégie est de capturer les ruptures de direction des prix au début de la période de négociation, ce qui est généralement un signe de tendance qui peut se produire par la suite. En utilisant un mécanisme de suivi des arrêts de perte, la stratégie est capable de maintenir des transactions rentables tout en protégeant les bénéfices déjà réalisés.

Avantages stratégiques

Une analyse approfondie de la stratégie a révélé les avantages suivants:

  1. Opportunités de négociation en deux tempsEn regardant les ouvertures de Londres et de New York en même temps, la stratégie capte les fluctuations des deux principales périodes de négociation et augmente les opportunités de négociation.
  2. Suivi des mécanismes de coupeLes stops suivants permettent aux transactions rentables de continuer à se développer tout en protégeant les bénéfices, ce qui améliore considérablement le niveau de profit moyen par rapport aux stops fixes.
  3. Une parfaite maîtrise des risques: La stratégie utilise un paramètre de stop-loss dynamique basé sur la volatilité (la taille de la fourchette) pour rendre la gestion des risques plus adaptée aux conditions du marché.
  4. Personnalisation: L’utilisateur peut ajuster le ratio de rendement du risque, la taille de la marge minimale, le suivi du nombre de points d’arrêt et l’utilisation du filtre EMA pour s’adapter à différentes variétés de transactions et à ses préférences de risque personnelles.
  5. Filtrage des indicateurs techniquesLes conditions de filtrage des EMA de 5 minutes sont disponibles pour éviter les transactions à contre-courant et améliorer la qualité des transactions.
  6. Limiter le nombre de transactions par heureLes signaux de transaction intégrés à la stratégie garantissent qu’au plus une transaction est exécutée à chaque instant, évitant ainsi les coûts et les risques liés à la fréquence des transactions.

Risque stratégique

Malgré la bonne conception de la stratégie, les risques potentiels sont les suivants:

  1. Risque de fausse percée: le prix peut revenir en arrière immédiatement après une brèche brève de la frontière de la zone, ce qui entraîne un arrêt de la perte. Pour contrer ce risque, il est possible d’envisager d’ajouter un mécanisme de confirmation, comme demander au prix de rester un certain temps après la brèche ou d’atteindre une certaine amplitude avant d’ouvrir la position.
  2. Gestion des fondsStratégie: par défaut, le nombre de contrats à négocier est fixe, ce qui peut ne pas convenir à toutes les tailles de fonds. Il est recommandé d’ajuster la taille de la position en fonction de la taille du compte et de la tolérance au risque.
  3. Risques liés à l’optimisation des paramètres: les paramètres sur-optimisés peuvent entraîner une adéquation de la courbe qui ne fonctionnera pas bien dans le futur environnement de marché. Attention aux tests de robustesse des paramètres.
  4. Dépendance à l’environnement de marchéLa stratégie peut souvent déclencher des arrêts de perte dans des marchés instables et sans tendance évidente. Des conditions de filtrage de l’environnement du marché peuvent être envisagées.
  5. Problème de zone horaire: Le code utilise le fuseau horaire de New York, assurez-vous de l’utiliser en accord avec le fuseau horaire de la plateforme de trading, sinon cela peut entraîner un mauvais positionnement du signal de trading.
  6. L’influence des fêtes: Les jours de transactions spéciaux et les jours fériés peuvent affecter la performance de la stratégie, la stratégie ne contient pas de logique de filtrage des jours fériés.

Orientation de l’optimisation de la stratégie

Sur la base de l’analyse de la stratégie, voici quelques pistes d’optimisation possibles:

  1. Mechanisme de confirmation ajoutéIl peut être envisagé d’ajouter des conditions de confirmation supplémentaires après la rupture des prix, telles que la rupture de la quantité de transaction, le maintien de plusieurs lignes K de prix dans la direction de la rupture, etc., afin de réduire les pertes causées par une fausse rupture.
  2. Gestion dynamique des fondsAjuster la taille de la position en fonction de la volatilité du marché et de la dynamique de la taille du compte afin d’optimiser le rapport risque/rendement.
  3. Filtrage de l’environnement du marché: introduction d’indicateurs de volatilité ou d’intensité de tendance, suspension des transactions dans des conditions de marché qui ne conviennent pas à une stratégie de rupture.
  4. Confirmation de plusieurs périodes: la direction de la tendance associée à des périodes de temps plus longues, ne négociez que dans la direction qui correspond à la grande tendance.
  5. Optimisation du temps de jeuIl est possible d’envisager d’utiliser la reprise des prix à des points critiques de support/résistance plutôt que d’entrer directement au point de rupture pour obtenir un meilleur prix de revient.
  6. Ajouter un filtrage de temps: Analysez les performances historiques des différents jours et périodes de négociation et évitez les périodes de mauvais rendement.
  7. Analyse de la corrélation entre les différentes variétésConsidérez la corrélation entre les différentes variétés de transactions et évitez de détenir simultanément plusieurs positions hautement corrélatives.

Résumer

La stratégie de trading quantifiée de rupture d’arrêt de suivi des pertes entre les deux heures d’ouverture est un système de trading de rupture conçu pour les heures d’ouverture des deux centres financiers de Londres et de New York. En capturant le mouvement et la direction des prix au début de l’ouverture, combiné à un mécanisme de suivi des pertes, la stratégie est capable de maximiser le potentiel de profit tout en contrôlant les risques. Bien qu’il existe des risques tels que les fausses ruptures et la dépendance à l’environnement du marché, la stabilité et la rentabilité de la stratégie peuvent être encore améliorées grâce à des paramètres raisonnables et à des conditions de filtrage supplémentaires.

Code source de la stratégie
/*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)