Diese Strategie ist ein umfassendes quantitatives Handelssystem, das T3 Moving Average, Trend Following und Trailing Stop Loss Mechanismen kombiniert. Die Strategie identifiziert die Markttrendrichtung mithilfe von T3 Moving Average, bestätigt Signale mithilfe des Lemon Trend Indicator und TDFI Indikators und beinhaltet ein Risikomanagementsystem, das Trailing Stops mit Fixed Stops kombiniert, um Trends zu erfassen und Risiken effektiv zu kontrollieren.
Die Strategie besteht aus drei Hauptkomponenten: Trendidentifizierung, Signalbestätigung und Risikomanagement. Erstens verwendet sie den T3 Moving Average als primäres Trendidentifizierungswerkzeug, das die Verzögerung reduziert und gleichzeitig durch sechsfache exponentielle gleitende Durchschnittsberechnungen die Glänze beibehält. Zweitens berechnet sie Preisvolatilitätsbereiche mithilfe des Lemon Trend Indicators und filtert Signale mit dem TDFI-Indikator und erzeugt Handelssignale nur, wenn der Preis durch den Volatilitätsbereich bricht und TDFI bestätigt. Schließlich verwendet die Strategie eine Kombination von Trailing und Fixed Stops für das Risikomanagement, wobei Trailing Stops aktiviert werden, nachdem der Preis Schwellenwerte erreicht hat, während Fixed Stops als Schutz beibehalten werden.
Es handelt sich um eine umfassend entwickelte Trend-Folge-Strategie, die durch mehrere technische Indikatoren zuverlässige Handelssignale und ein effektives Risikomanagement gewährleistet.
/*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)