Stratégie de trading quantitative de suivi des tendances de la moyenne mobile T3 et de stop loss mobile

T3MA SMA EMA
Date de création: 2024-11-28 15:17:13 Dernière modification: 2024-11-28 15:17:13
Copier: 1 Nombre de clics: 505
1
Suivre
1617
Abonnés

Stratégie de trading quantitative de suivi des tendances de la moyenne mobile T3 et de stop loss mobile

Aperçu

Cette stratégie est un système de trading quantitatif intégré combinant la moyenne T3, le suivi des tendances et le stop-loss mobile. La stratégie identifie la direction de la tendance du marché à l’aide de la moyenne mobile T3, tout en utilisant l’indicateur de tendance Lemon et l’indicateur TDFI pour la confirmation du signal.

Principe de stratégie

Le cœur de la stratégie comprend trois parties principales: l’identification de la tendance, la confirmation du signal et la gestion du risque. Premièrement, l’utilisation de la moyenne mobile T3 comme principal outil d’identification de la tendance, la moyenne T3 par le calcul de la moyenne mobile de l’indice hexagonal, permet de réduire efficacement le retard et de maintenir la fluidité. Deuxièmement, la zone d’oscillation des prix est calculée à l’aide de l’indicateur de tendance Lemon, le signal est filtré en combinaison avec l’indicateur TDFI, et le signal de transaction n’est généré que lorsque le prix franchit la zone d’oscillation et que l’indicateur TDFI est confirmé.

Avantages stratégiques

  1. Le mécanisme de confirmation de signaux multiples améliore la précision des transactions
  2. L’utilisation d’une ligne moyenne T3 réduit l’effet de fausse percée
  3. Un système de gestion des risques souple, qui permet de laisser suffisamment de place aux tendances tout en protégeant les profits
  4. La suspension partielle de la position est soutenue, permettant un encaissement progressif des bénéfices.
  5. Les paramètres sont réglables et facilement optimisés en fonction des différentes conditions du marché

Risque stratégique

  1. Le calcul de la moyenne T3 est complexe et peut être retardé.
  2. La confirmation de signaux multiples peut entraîner des opportunités de trading manquées
  3. Le stop mobile peut être déclenché prématurément lors d’une forte volatilité
  4. Il faut une plus grande fluctuation des prix pour générer un signal efficace.
  5. Les faux signaux peuvent être fréquents sur le marché horizontal

Orientation de l’optimisation de la stratégie

  1. Introduction d’un indicateur de volatilité qui modifie le paramètre de stop-loss mobile
  2. Ajout d’un module de reconnaissance des environnements de marché, utilisant différents paramètres dans différentes conditions de marché
  3. Optimiser le cycle de calcul des indicateurs TDFI et améliorer la rapidité des signaux
  4. Considérer l’ajout d’un facteur de transfert pour la confirmation du signal
  5. Une étude sur les mécanismes de réglage des proportions d’arrêt partiel auto-adaptatif

Résumer

Il s’agit d’une stratégie de suivi de tendance complète conçue pour garantir la fiabilité des signaux de négociation tout en permettant une gestion efficace des risques grâce à l’utilisation conjointe de multiples indicateurs techniques. La conception modulaire de la stratégie lui donne une bonne extensibilité et un espace d’optimisation, ce qui en fait le cadre de base d’un système de suivi de tendance à moyen et long terme.

Code source de la stratégie
/*backtest
start: 2019-12-23 08:00:00
end: 2024-11-27 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Lemon Trend Strategy", overlay=true, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=100)
 
// Input parameters
lookbackPeriod = input.int(14, "Lookback Period")
t3Length = input.int(200, "T3 MA Length")
t3Factor = input.float(0.7, "T3 Factor", minval=0, maxval=1)

// 移动止损参数
trailingStopPct = input.float(1.5, "移动止损百分比", minval=0.1, step=0.1)
trailingStopActivationPct = input.float(1.0, "移动止损激活百分比", minval=0.1, step=0.1)
 
// === T3 Moving Average Function ===
t3(src, length, factor) =>
    // First EMA
    e1 = ta.ema(src, length)
    // Second EMA
    e2 = ta.ema(e1, length)
    // Third EMA
    e3 = ta.ema(e2, length)
    // Fourth EMA
    e4 = ta.ema(e3, length)
    // Fifth EMA
    e5 = ta.ema(e4, length)
    // Sixth EMA
    e6 = ta.ema(e5, length)
   
    c1 = -factor * factor * factor
    c2 = 3 * factor * factor + 3 * factor * factor * factor
    c3 = -6 * factor * factor - 3 * factor - 3 * factor * factor * factor
    c4 = 1 + 3 * factor + factor * factor * factor + 3 * factor * factor
   
    t3 = c1 * e6 + c2 * e5 + c3 * e4 + c4 * e3
 
// Calculate T3 MA
t3ma = t3(close, t3Length, t3Factor)
plot(t3ma, "T3 MA", color=color.blue)
 
// === Lemon Trend Indicator ===
highLowDiff = high - low
normalizedDiff = ta.sma(highLowDiff, lookbackPeriod)
upperBand = ta.highest(high, lookbackPeriod)
lowerBand = ta.lowest(low, lookbackPeriod)
buySignal = ta.crossover(close, upperBand - normalizedDiff)
sellSignal = ta.crossunder(close, lowerBand + normalizedDiff)
 
// === TDFI Indicator ===
tdfiLength = input.int(14, "TDFI Length")
tdfi = ta.ema(close - close[1], tdfiLength)
tdfiSignal = ta.ema(tdfi, 9)
 
// Plot signals
plotshape(buySignal and tdfi > tdfiSignal and close > t3ma, "Buy Signal", location=location.belowbar, color=color.green, style=shape.triangleup, size=size.small)
plotshape(sellSignal and tdfi < tdfiSignal and close < t3ma, "Sell Signal", location=location.abovebar, color=color.red, style=shape.triangledown, size=size.small)
 
// === Strategy Logic ===
longCondition = buySignal and tdfi > tdfiSignal and close > t3ma
shortCondition = sellSignal and tdfi < tdfiSignal and close < t3ma
 
// 计算移动止损价格
var float longTrailingStop = na
var float shortTrailingStop = na

// 更新移动止损价格
if (strategy.position_size > 0)
    threshold = strategy.position_avg_price * (1 + trailingStopActivationPct / 100)
    if (high > threshold)
        stopPrice = high * (1 - trailingStopPct / 100)
        if (na(longTrailingStop) or stopPrice > longTrailingStop)
            longTrailingStop := stopPrice
    
if (strategy.position_size < 0)
    threshold = strategy.position_avg_price * (1 - trailingStopActivationPct / 100)
    if (low < threshold)
        stopPrice = low * (1 + trailingStopPct / 100)
        if (na(shortTrailingStop) or stopPrice < shortTrailingStop)
            shortTrailingStop := stopPrice

// Entry orders
if (longCondition)
    strategy.entry("Long", strategy.long)
    longTrailingStop := na
    
if (shortCondition)
    strategy.entry("Short", strategy.short)
    shortTrailingStop := na
 
// Calculate stop loss and take profit levels
longStopLoss = ta.lowest(low, lookbackPeriod)
shortStopLoss = ta.highest(high, lookbackPeriod)
 
// Exit conditions with fixed R:R
fixedRR = input.float(1.8, "Fixed Risk:Reward Ratio")
partialExitPct = input.float(50.0, "Partial Exit Percentage", minval=0, maxval=100) / 100
 
// 综合移动止损和固定止损
if (strategy.position_size > 0)
    longTakeProfit = strategy.position_avg_price + (strategy.position_avg_price - longStopLoss) * fixedRR
    stopPrice = na(longTrailingStop) ? longStopLoss : math.max(longStopLoss, longTrailingStop)
    strategy.exit("Long Exit", "Long", qty_percent=partialExitPct, stop=stopPrice, limit=longTakeProfit)
    
if (strategy.position_size < 0)
    shortTakeProfit = strategy.position_avg_price - (shortStopLoss - strategy.position_avg_price) * fixedRR
    stopPrice = na(shortTrailingStop) ? shortStopLoss : math.min(shortStopLoss, shortTrailingStop)
    strategy.exit("Short Exit", "Short", qty_percent=partialExitPct, stop=stopPrice, limit=shortTakeProfit)

// 绘制移动止损线
plot(strategy.position_size > 0 ? longTrailingStop : na, "Long Trailing Stop", color=color.red, style=plot.style_linebr)
plot(strategy.position_size < 0 ? shortTrailingStop : na, "Short Trailing Stop", color=color.red, style=plot.style_linebr)