Sumber daya yang dimuat... Pemuatan...

T3 Moving Average Trend Mengikuti Strategi dengan Trailing Stop Loss

Penulis:ChaoZhang, Tanggal: 2024-11-28 15:17:13
Tag:T3MASMAEMA

img

Gambaran umum

Strategi ini adalah sistem perdagangan kuantitatif yang komprehensif yang menggabungkan T3 Moving Average, trend following, dan trailing stop loss. Strategi ini mengidentifikasi arah tren pasar menggunakan T3 Moving Average, mengkonfirmasi sinyal menggunakan Lemon Trend Indicator dan indikator TDFI, dan menggabungkan sistem manajemen risiko yang menggabungkan trailing stop dengan fixed stop untuk menangkap tren dan mengontrol risiko secara efektif.

Prinsip Strategi

Strategi ini terdiri dari tiga komponen utama: identifikasi tren, konfirmasi sinyal, dan manajemen risiko. Pertama, menggunakan Rata-rata Gerak T3 sebagai alat identifikasi tren utama, yang mengurangi lag sambil menjaga kelancaran melalui perhitungan rata-rata gerak eksponensial enam kali lipat. Kedua, menghitung rentang volatilitas harga menggunakan Indikator Tren Lemon dan menyaring sinyal dengan indikator TDFI, menghasilkan sinyal perdagangan hanya ketika harga menembus rentang volatilitas dan TDFI mengkonfirmasi. Akhirnya, strategi menggunakan kombinasi trailing dan fixed stop untuk manajemen risiko, dengan trailing stop diaktifkan setelah harga mencapai tingkat ambang sementara mempertahankan stop tetap sebagai perlindungan.

Keuntungan Strategi

  1. Mekanisme konfirmasi sinyal ganda meningkatkan akurasi perdagangan
  2. T3 Moving Average mengurangi dampak dari false breakout
  3. Sistem manajemen risiko yang fleksibel yang melindungi keuntungan sambil memungkinkan tren berkembang
  4. Mendukung keluar posisi parsial untuk realisasi keuntungan bertahap
  5. Parameter yang sangat dapat disesuaikan untuk optimalisasi dalam kondisi pasar yang berbeda

Risiko Strategi

  1. Perhitungan rata-rata bergerak T3 yang kompleks dapat memperkenalkan keterlambatan komputasi
  2. Beberapa konfirmasi sinyal dapat menyebabkan kesempatan perdagangan yang hilang
  3. Trailing stops dapat memicu prematur selama kondisi pasar yang tidak stabil
  4. Membutuhkan pergerakan harga yang signifikan untuk menghasilkan sinyal yang efektif
  5. Dapat menghasilkan sinyal palsu yang sering di berbagai pasar

Arahan Optimasi

  1. Memperkenalkan indikator volatilitas untuk menyesuaikan parameter trailing stop
  2. Tambahkan modul pengenalan lingkungan pasar untuk set parameter yang berbeda
  3. Mengoptimalkan periode perhitungan indikator TDFI untuk peningkatan waktu sinyal
  4. Pertimbangkan untuk memasukkan faktor volume untuk konfirmasi sinyal
  5. Penelitian mekanisme adaptif rasio keuntungan parsial

Kesimpulan

Ini adalah strategi trend-following yang dirancang secara komprehensif yang memastikan sinyal perdagangan yang dapat diandalkan dan manajemen risiko yang efektif melalui beberapa indikator teknis. Desain modular strategi ini memberikan potensi perluasan dan optimalisasi yang baik, menjadikannya cocok sebagai dasar untuk sistem trend-following jangka menengah hingga panjang. Dalam aplikasi praktis, disarankan untuk mengoptimalkan parameter berdasarkan instrumen perdagangan tertentu dan kondisi pasar.


/*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)

Berkaitan

Lebih banyak