该策略是一个结合了珊瑚趋势指标(Coral Trend)和唐奇安通道(Donchian Channel)的趋势跟踪交易系统。通过对市场动量的精确捕捉和趋势突破的多重确认,有效地过滤掉了震荡市中的虚假信号,提高了交易的准确性。策略采用了自适应均线技术,能够根据市场状态动态调整参数,使其在不同的市场环境下都能保持稳定的表现。
策略的核心逻辑建立在两个主要指标的协同作用上: 1. 珊瑚趋势指标(Coral Trend):通过计算(最高价+最低价+收盘价)/3的平滑值,并与当前收盘价比较,确定趋势方向。 2. 唐奇安通道(Donchian Channel):通过计算用户定义周期内的最高价和最低价,判断价格是否突破关键水平。
当两个指标同时确认上升趋势时(coralTrendVal == 1 且 donchianTrendVal == 1),系统产生做多信号;当两个指标同时确认下降趋势时(coralTrendVal == -1 且 donchianTrendVal == -1),系统产生做空信号。策略使用状态机(trendState)来追踪当前的趋势状态,避免重复信号。
该策略通过多重趋势确认机制和灵活的参数设置,实现了一个稳健的趋势跟踪系统。其自适应特性和清晰的信号逻辑使其适合各种交易周期和市场环境。通过建议的优化方向,策略的表现还有进一步提升的空间。在实盘应用时,建议结合风险管理措施,并根据具体交易品种的特性进行参数优化。
/*backtest
start: 2019-12-23 08:00:00
end: 2025-01-16 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT","balance":49999}]
*/
//@version=5
strategy("Coral Tides Strategy", shorttitle="CoralTidesStrat", overlay=true)
// === Inputs ===
dlen = input.int(defval=20, title="Donchian Channel Period", minval=10)
coralPeriod = input.int(defval=14, title="Coral Trend Period")
// === Functions ===
// Coral Trend Calculation
coralTrend(period) =>
smooth = (high + low + close) / 3
coral = ta.ema(smooth, period)
trend = 0
trend := close > coral ? 1 : close < coral ? -1 : trend[1]
[trend, coral]
// Donchian Trend Calculation
donchianTrend(len) =>
hh = ta.highest(high, len)
ll = ta.lowest(low, len)
trend = 0
trend := close > hh[1] ? 1 : close < ll[1] ? -1 : trend[1]
trend
// === Trend Calculation ===
[coralTrendVal, coralLine] = coralTrend(coralPeriod)
donchianTrendVal = donchianTrend(dlen)
// === Signal Logic ===
var int trendState = 0
buySignal = false
sellSignal = false
if (coralTrendVal == 1 and donchianTrendVal == 1 and trendState != 1)
buySignal := true
sellSignal := false
trendState := 1
else if (coralTrendVal == -1 and donchianTrendVal == -1 and trendState != -1)
sellSignal := true
buySignal := false
trendState := -1
else
buySignal := false
sellSignal := false
// === Strategy Execution ===
// Entry Signals
if (buySignal)
strategy.entry("Long", strategy.long)
if (sellSignal)
strategy.entry("Short", strategy.short)
// === Plots ===
// Coral Trend Line
plot(coralLine, color=color.green, linewidth=2, title="Coral Trend Line")
// Buy/Sell Signal Labels
if buySignal
label.new(bar_index, low, "BUY", color=color.green, textcolor=color.white, style=label.style_label_down, size=size.normal)
if sellSignal
label.new(bar_index, high, "SELL", color=color.red, textcolor=color.white, style=label.style_label_up, size=size.normal)