Stratégie de trading quantitative avancée : système d'exécution automatisé basé sur la dynamique intraday et la gestion des risques

DOJI SL TP ATR momentum
Date de création: 2025-02-21 14:25:50 Dernière modification: 2025-02-27 16:57:06
Copier: 2 Nombre de clics: 446
2
Suivre
319
Abonnés

Stratégie de trading quantitative avancée : système d’exécution automatisé basé sur la dynamique intraday et la gestion des risques Stratégie de trading quantitative avancée : système d’exécution automatisé basé sur la dynamique intraday et la gestion des risques

Aperçu

Il s’agit d’une stratégie de trading entièrement automatisée, basée sur la dynamique de la journée, combinée à une gestion rigoureuse des risques et à un système de gestion de position précis. La stratégie fonctionne principalement pendant les heures de négociation à Londres, pour rechercher des opportunités de trading en identifiant les changements de dynamique du marché et en éliminant les Doji, tout en appliquant des règles de blocage quotidiennes pour contrôler les risques.

Principe de stratégie

La logique centrale de la stratégie repose sur plusieurs composants clés: tout d’abord, le temps de négociation est limité à l’heure de Londres (à l’exclusion des heures 0 et 19), afin d’assurer une fluidité suffisante du marché. Les signaux d’entrée sont basés sur la dynamique des prix.

Avantages stratégiques

  1. Gestion complète des risques: incluant des stop-loss fixes, des règles de stop-loss quotidiennes et une gestion dynamique des positions
  2. Adaptabilité: la taille des transactions est automatiquement ajustée en fonction des intérêts du compte et s’adapte aux différentes tailles de fonds
  3. La garantie de liquidité: les transactions sont strictement limitées aux heures de négociation à Londres pour éviter les risques de faible liquidité.
  4. Filtrage des faux signaux: réduire les pertes de faux-breaks en éliminant les formes de Doji et les signaux en continu
  5. Logique d’exécution claire: les conditions d’entrée et de sortie sont claires, faciles à surveiller et à optimiser

Risque stratégique

  1. Risque de fluctuation du marché: le stop-loss fixe peut ne pas être suffisamment flexible pendant les périodes de forte volatilité
  2. Risque de glissement des prix: un risque de glissement plus important en cas de fluctuation rapide du marché
  3. La dépendance à la tendance: la stratégie peut produire plus de faux signaux dans un marché en crise
  4. Sensitivité des paramètres: les paramètres de stop-loss ont un impact sur la performance de la stratégie Les solutions comprennent: l’adoption d’un mécanisme de stop-loss dynamique, l’ajout d’un filtre de volatilité du marché, l’introduction d’indicateurs de confirmation de tendance, etc.

Orientation de l’optimisation de la stratégie

  1. Introduction d’un mécanisme d’arrêt adaptatif: modification dynamique du périmètre d’arrêt en fonction de l’ATR ou de la volatilité
  2. Augmentation du filtrage des conditions de marché: ajout d’indicateurs de force de tendance, augmentation du temps de tenue des positions lorsque la tendance est claire
  3. Optimisation du mécanisme de confirmation du signal: amélioration de la fiabilité du signal en combinant le trafic et d’autres indicateurs techniques
  4. Amélioration de la gestion des fonds: mise en place d’un système de gestion des risques composé et envisagement d’un retrait des contrôles
  5. Augmentation de l’analyse de la micro-structure du marché: intégration des données de flux de commandes pour une meilleure précision d’entrée

Résumer

La stratégie construit un cadre de négociation complet en combinant des percées dynamiques, une gestion rigoureuse des risques et un système d’exécution automatisé. Les principaux avantages de la stratégie résident dans son système complet de contrôle des risques et sa conception auto-adaptative, mais elle nécessite encore des optimisations en termes d’identification des environnements de marché et de filtrage des signaux. Grâce à l’amélioration continue et à l’optimisation des paramètres, la stratégie devrait maintenir une performance stable dans différents environnements de marché.

Code source de la stratégie
/*backtest
start: 2025-01-21 00:00:00
end: 2025-02-08 00:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Binance","currency":"ETH_USDT"}]
*/

//@version=6
strategy("Trading Strategy for XAUUSD (Gold) – Automated Execution Plan", overlay=true, initial_capital=10000, currency=currency.USD)

//────────────────────────────
// 1. RISK MANAGEMENT & POSITION SIZING
//────────────────────────────
// Configurable inputs for Stop Loss and Take Profit
sl = input.float(title="Stop Loss ($)", defval=5, step=0.1)
tp = input.float(title="Take Profit ($)", defval=15, step=0.1)

// Volume: 0.01 lots per $100 of equity → lotSize = equity / 10000
lotSize = strategy.equity / strategy.initial_capital

//────────────────────────────
// 2. TRADING HOURS (London Time)
//────────────────────────────
// Get the current bar's timestamp in London time.
londonTime   = time(timeframe.period, "", "Europe/London")
londonHour   = hour(londonTime)
tradingAllowed = (londonHour != 0) and (londonHour < 19)

//────────────────────────────
// 3. DOJI CANDLE DEFINITION
//────────────────────────────
// A candle is considered a doji if the sum of its upper and lower shadows is greater than its body.
upperShadow = high - math.max(open, close)
lowerShadow = math.min(open, close) - low
bodySize    = math.abs(close - open)
isDoji      = (upperShadow + lowerShadow) > bodySize

//────────────────────────────
// 4. ENTRY CONDITIONS
//────────────────────────────
// Buy Signal:
//   • Current candle’s high > previous candle’s high.
//   • Current candle’s low is not below previous candle’s low.
//   • Bullish candle (close > open) and not a doji.
//   • Skip if previous candle already qualified.
buyRaw    = (high > high[1]) and (low >= low[1]) and (close > open) and (not isDoji)
buySignal = buyRaw and not (buyRaw[1] ? true : false)

// Sell Signal:
//   • Current candle’s low < previous candle’s low.
//   • Current candle’s high is not above previous candle’s high.
//   • Bearish candle (close < open) and not a doji.
//   • Skip if previous candle already qualified.
sellRaw    = (low < low[1]) and (high <= high[1]) and (close < open) and (not isDoji)
sellSignal = sellRaw and not (sellRaw[1] ? true : false)

//────────────────────────────
// 5. DAILY TAKE PROFIT (TP) RULE
//────────────────────────────
// Create a day-string (year-month-day) using London time.
// This flag will block new trades for the rest of the day if a TP is hit.
var string lastDay = ""
currentDay = str.tostring(year(londonTime)) + "-" + str.tostring(month(londonTime)) + "-" + str.tostring(dayofmonth(londonTime))
var bool dailyTPHit = false
if lastDay != currentDay
    dailyTPHit := false
    lastDay := currentDay

//────────────────────────────
// 6. TRACK TRADE ENTRY & EXIT FOR TP DETECTION
//────────────────────────────
// We record the TP target when a new trade is entered.
// Then, when a trade closes, if the bar’s high (for long) or low (for short) reached the TP target,
// we assume the TP was hit and block new trades for the day.
var float currentTP = na
var int currentTradeType = 0   // 1 for long, -1 for short

// Detect a new trade entry (transition from no position to a position).
tradeEntered = (strategy.position_size != 0 and strategy.position_size[1] == 0)
if tradeEntered
    if strategy.position_size > 0
        currentTP := strategy.position_avg_price + tp
        currentTradeType := 1
    else if strategy.position_size < 0
        currentTP := strategy.position_avg_price - tp
        currentTradeType := -1

// Detect trade closure (transition from position to flat).
tradeClosed = (strategy.position_size == 0 and strategy.position_size[1] != 0)
if tradeClosed and not na(currentTP)
    // For a long trade, if the bar's high reached the TP target;
    // for a short trade, if the bar's low reached the TP target,
    // mark the daily TP flag.
    if (currentTradeType == 1 and high >= currentTP) or (currentTradeType == -1 and low <= currentTP)
        dailyTPHit := true
    currentTP := na
    currentTradeType := 0

//────────────────────────────
// 7. ORDER EXECUTION
//────────────────────────────
// Only open a new position if no position is open, trading is allowed, and daily TP rule is not active.
if (strategy.position_size == 0) and tradingAllowed and (not dailyTPHit)
    if buySignal
        strategy.entry("Long", strategy.long, qty=lotSize)
    if sellSignal
        strategy.entry("Short", strategy.short, qty=lotSize)

//────────────────────────────
// 8. EXIT ORDERS (Risk Management)
//────────────────────────────
// For long positions: SL = entry price - Stop Loss, TP = entry price + Take Profit.
// For short positions: SL = entry price + Stop Loss, TP = entry price - Take Profit.
if strategy.position_size > 0
    longSL = strategy.position_avg_price - sl
    longTP = strategy.position_avg_price + tp
    strategy.exit("Exit Long", from_entry="Long", stop=longSL, limit=longTP)
if strategy.position_size < 0
    shortSL = strategy.position_avg_price + sl
    shortTP = strategy.position_avg_price - tp
    strategy.exit("Exit Short", from_entry="Short", stop=shortSL, limit=shortTP)

//────────────────────────────
// 9. VISUALIZATION
//────────────────────────────
plotshape(buySignal and tradingAllowed and (not dailyTPHit) and (strategy.position_size == 0), title="Buy Signal", location=location.belowbar, color=color.green, style=shape.labelup, text="Buy")
plotshape(sellSignal and tradingAllowed and (not dailyTPHit) and (strategy.position_size == 0), title="Sell Signal", location=location.abovebar, color=color.red, style=shape.labeldown, text="Sell")