이 전략은 T3 이동 평균, 트렌드 추적 및 트레일링 스톱 손실 메커니즘을 결합 한 포괄적 인 수치 거래 시스템입니다. 전략은 T3 이동 평균을 사용하여 시장 트렌드 방향을 식별하고 레몬 트렌드 지표 및 TDFI 지표를 사용하여 신호를 확인하며 트렌드를 파악하고 위험을 효과적으로 제어하기 위해 트레일링 스톱과 고정 스톱을 결합하는 리스크 관리 시스템을 통합합니다.
이 전략은 트렌드 식별, 신호 확인 및 리스크 관리의 세 가지 주요 구성 요소로 구성됩니다. 첫째, T3 이동 평균을 주요 트렌드 식별 도구로 사용하며, 6 배 지수적인 이동 평균 계산을 통해 매끄럽게 유지하면서 지연을 줄입니다. 둘째, 레몬 트렌드 지표를 사용하여 가격 변동 범위를 계산하고 TDFI 지표로 신호를 필터하여 가격 변동 범위를 통과하고 TDFI를 확인 할 때만 거래 신호를 생성합니다. 마지막으로, 전략은 리스크 관리를 위해 트레일링 및 고정 스톱의 조합을 사용하고, 트레일링 스톱이 보호로 고정 스톱을 유지하면서 가격이 임계 수준에 도달 한 후에 활성화됩니다.
이 전략은 다양한 기술 지표를 통해 신뢰할 수 있는 거래 신호와 효과적인 위험 관리를 보장하는 종합적으로 설계된 트렌드 추적 전략이다. 전략의 모듈형 설계는 좋은 확장성과 최적화 잠재력을 제공하여 중장기 트렌드 추적 시스템의 기초로 적합합니다. 실제 응용에서는 특정 거래 도구 및 시장 조건에 기반한 매개 변수를 최적화하는 것이 좋습니다.
/*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)