Sumber dimuat naik... memuat...

T3 Moving Average Trend Following Strategy dengan Trailing Stop Loss

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

img

Ringkasan

Strategi ini adalah sistem dagangan kuantitatif yang komprehensif yang menggabungkan T3 Moving Average, trend berikut, dan mekanisme stop loss. Strategi ini mengenal pasti arah trend pasaran menggunakan T3 Moving Average, mengesahkan isyarat menggunakan Lemon Trend Indicator dan penunjuk TDFI, dan menggabungkan sistem pengurusan risiko yang menggabungkan trailing stops dengan stop tetap untuk menangkap trend dan mengawal risiko dengan berkesan.

Prinsip Strategi

Strategi ini terdiri daripada tiga komponen utama: pengenalan trend, pengesahan isyarat, dan pengurusan risiko. Pertama, ia menggunakan T3 Moving Average sebagai alat pengenalan trend utama, yang mengurangkan kelewatan sambil mengekalkan kelancaran melalui pengiraan purata bergerak eksponensial enam kali ganda. Kedua, ia mengira julat turun naik harga menggunakan Lemon Trend Indicator dan menapis isyarat dengan penunjuk TDFI, menghasilkan isyarat perdagangan hanya apabila harga menembusi julat turun naik dan TDFI mengesahkan. Akhirnya, strategi ini menggunakan gabungan trailing dan berhenti tetap untuk pengurusan risiko, dengan trailing stop diaktifkan selepas harga mencapai tahap ambang sambil mengekalkan berhenti tetap sebagai perlindungan.

Kelebihan Strategi

  1. Mekanisme pengesahan isyarat berbilang meningkatkan ketepatan dagangan
  2. T3 Moving Average mengurangkan kesan pecah palsu
  3. Sistem pengurusan risiko yang fleksibel yang melindungi keuntungan sambil membolehkan trend berkembang
  4. Menyokong penyingkiran kedudukan sebahagiannya untuk merealisasikan keuntungan bertahap
  5. Parameter yang sangat boleh diselaraskan untuk pengoptimuman dalam keadaan pasaran yang berbeza

Risiko Strategi

  1. Pengiraan purata bergerak T3 yang kompleks boleh memperkenalkan kelewatan pengiraan
  2. Pelbagai pengesahan isyarat boleh menyebabkan peluang perdagangan yang hilang
  3. Penghentian penghantaran boleh mencetuskan sebelum masa semasa keadaan pasaran yang tidak menentu
  4. Memerlukan pergerakan harga yang signifikan untuk menjana isyarat yang berkesan
  5. Boleh menghasilkan isyarat palsu yang kerap di pasaran yang berbeza

Arahan pengoptimuman

  1. Memperkenalkan penunjuk turun naik untuk menyesuaikan parameter hentian
  2. Tambah modul pengenalan persekitaran pasaran untuk set parameter yang berbeza
  3. Mengoptimumkan tempoh pengiraan penunjuk TDFI untuk masa isyarat yang lebih baik
  4. Pertimbangkan untuk memasukkan faktor kelantangan untuk pengesahan isyarat
  5. Penyelidikan mekanisme nisbah keuntungan separa adaptif

Kesimpulan

Ini adalah strategi trend berikut yang dirancang secara komprehensif yang memastikan isyarat perdagangan yang boleh dipercayai dan pengurusan risiko yang berkesan melalui pelbagai penunjuk teknikal. Reka bentuk modular strategi ini memberikan potensi pengembangan dan pengoptimuman yang baik, menjadikannya sesuai sebagai asas untuk sistem trend berikut jangka menengah hingga panjang. Dalam aplikasi praktikal, disyorkan untuk mengoptimumkan parameter berdasarkan instrumen perdagangan tertentu dan keadaan pasaran.


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