该策略是一个基于WaveTrend指标和趋势跟踪的量化交易系统。它通过将WaveTrend指标与移动平均线相结合,形成了一个完整的交易决策框架。策略利用EMA和SMA计算波浪趋势值和市场整体趋势,通过设定超买超卖阈值来识别市场转折点,并结合趋势过滤器来提高交易的准确性。
策略的核心是通过以下步骤来实现: 1. 首先计算HLC均价(最高价、最低价和收盘价的平均值) 2. 使用EMA对HLC均价进行平滑处理得到ESA线 3. 计算HLC均价与ESA线之间的偏差,并使用EMA进行平滑 4. 基于偏差计算K值,并通过两次EMA平滑得到最终的TCI线 5. 使用SMA计算长期趋势线作为趋势过滤器 6. 当TCI线突破超买超卖水平且符合趋势方向时,产生交易信号
该策略通过巧妙结合WaveTrend指标和趋势过滤器,构建了一个稳健的交易系统。策略在保持操作简洁的同时,实现了对市场的全面分析。虽然存在一定的风险,但通过合理的风险管理和持续优化,该策略具有良好的实用价值和发展潜力。
/*backtest
start: 2019-12-23 08:00:00
end: 2024-12-18 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © mojomarv
//@version=6
strategy("WaveTrend with Trend Filter", shorttitle="WaveTrend Trend", overlay=false, initial_capital = 100000)
// Inputs for the WaveTrend indicator
inputLength = input.int(10, title="Channel Length", minval=1)
avgLength = input.int(21, title="Average Length", minval=1)
obLevel = input.float(45, title="Overbought Level")
osLevel = input.float(-45, title="Oversold Level")
showSignals = input.bool(true, title="Show Buy/Sell Signals")
// Trend filter input
maLength = input.int(500, title="Trend MA Length", minval=1)
// Calculate WaveTrend values
hlc_avg = (high + low + close) / 3 // Renamed from hlc3 to hlc_avg
esa = ta.ema(hlc_avg, inputLength)
d = ta.ema(math.abs(hlc_avg - esa), inputLength)
k = (hlc_avg - esa) / (0.015 * d)
ci = ta.ema(k, avgLength)
tci = ta.ema(ci, avgLength)
// Moving average for trend detection
trendMA = ta.sma(close, maLength)
// Determine trend
bullishTrend = close > trendMA
bearishTrend = close < trendMA
// Generate signals with trend filter
crossUp = ta.crossover(tci, osLevel)
crossDown = ta.crossunder(tci, obLevel)
// Plot WaveTrend
plot(tci, title="WaveTrend Line", color=color.new(color.blue, 0), linewidth=2)
hline(obLevel, "Overbought", color=color.red, linestyle=hline.style_dotted)
hline(osLevel, "Oversold", color=color.green, linestyle=hline.style_dotted)
hline(0, "Zero Line", color=color.gray, linestyle=hline.style_solid)
// Plot moving average for trend visualization
plot(trendMA, title="Trend MA", color=color.orange, linewidth=1)
// Plot buy and sell signals
plotshape(showSignals and crossUp, title="Buy Signal", location=location.belowbar, style=shape.labelup, color=color.new(color.green, 0), size=size.small)
plotshape(showSignals and crossDown, title="Sell Signal", location=location.abovebar, style=shape.labeldown, color=color.new(color.red, 0), size=size.small)
// Alerts
alertcondition(crossUp, title="Buy Alert", message="WaveTrend Buy Signal (Trend Confirmed)")
alertcondition(crossDown, title="Sell Alert", message="WaveTrend Sell Signal (Trend Confirmed)")
alertcondition(bullishTrend, title="bull", message="WaveTrend Sell Signal (Trend Confirmed)")
alertcondition(bearishTrend, title="bear", message="WaveTrend Sell Signal (Trend Confirmed)")
// Strategy logic
if crossUp and bullishTrend
strategy.entry("Long", strategy.long)
if crossDown
strategy.close("Long")
if crossDown and bearishTrend
strategy.entry("Short", strategy.short)
if crossUp
strategy.close("Short")