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.
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.
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)