该策略结合了螺旋指标和移动平均线来识别价格趋势的方向和强度,以生成潜在的做多和做空信号。当螺旋正指标线突破螺旋负指标线时,会在图表上标记该交叉点,如果收盘价高于移动平均线则产生做多信号;而当螺旋负指标线突破螺旋正指标线时,如果收盘价低于移动平均线则产生做空信号。
螺旋指标:包括螺旋正指标线(VI+)和螺旋负指标线(VI-)。它用于识别价格趋势的方向和强度。
移动平均线:使用选择的移动平均方法(SMA、EMA、SMMA、WMA或VWMA)来平滑价格数据,得到的平滑线称为“平滑线”。
确定做多和做空信号:当VI+线穿过VI-线时,标记该交叉点,如果收盘价高于平滑线则产生做多信号;当VI-线穿过VI+线时,如果收盘价低于平滑线则产生做空信号。
结合了趋势识别和平滑过滤的优点,可以在趋势市场中捕捉趋势,避免在震荡市场中产生错误信号。
螺旋指标可以有效识别趋势的方向和强度。移动平均线可以过滤掉部分噪音。
策略逻辑简单清晰,容易理解和实现。
可自定义参数,适应不同市场环境。
在盘整和无明确趋势的市场中,可能会产生错误信号和SERIAL停损。
参数设置不当也会影响策略表现。例如移动平均线长度设置过短则过滤效果差,过长则识别趋势变化滞后。
无法在突发事件下起到防范作用,例如重大财经事件发生后的剧烈行情变动。
可以引入其它指标结合使用,例如成交量指标来确定趋势可靠程度。
优化参数设定,平衡移动平均线的趋势跟踪性和噪音过滤性。
增加止损策略来控制损失。
利用机器学习等方法自动优化参数。
结合风险管理模块调整仓位。
本策略通过简单有效地结合螺旋指标和移动平均线,实现了优秀的趋势捕捉效果。识别趋势方向的同时具有一定的噪音过滤能力,可以减少错误信号。总体来说策略逻辑简洁,使用灵活,在趋势市场中表现较好。通过引入更多过滤手段,适当优化参数设置,风险可控性能够得到进一步提高。
/*backtest start: 2023-02-01 00:00:00 end: 2024-02-01 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © DraftVenture //@version=5 strategy("Vortex + Moving Average Strategy", overlay=true) //Vortex settings period_ = input.int(14, title="Vortex Length", minval=2) VMP = math.sum( math.abs( high - low[1]), period_ ) VMM = math.sum( math.abs( low - high[1]), period_ ) STR = math.sum( ta.atr(1), period_ ) VIP = VMP / STR VIM = VMM / STR plot(VIP, title="VI +", color=color.white) plot(VIM, title="VI -", color=color.white) len = input.int(9, minval=1, title="MA Length") src = input(close, title="Source") offset = input.int(title="Offset", defval=0, minval=-500, maxval=500) out = ta.sma(src, len) plot(out, color=color.blue, title="MA", offset=offset) ma(source, length, type) => switch type "SMA" => ta.sma(source, length) "EMA" => ta.ema(source, length) "SMMA (RMA)" => ta.rma(source, length) "WMA" => ta.wma(source, length) "VWMA" => ta.vwma(source, length) typeMA = input.string(title = "Method", defval = "SMA", options=["SMA", "EMA", "SMMA (RMA)", "WMA", "VWMA"], group="Smoothing") smoothingLength = input.int(title = "Length", defval = 5, minval = 1, maxval = 100, group="Smoothing") smoothingLine = ma(out, smoothingLength, typeMA) plot(smoothingLine, title="Smoothing Line", color=#f37f20, offset=offset, display=display.none) // Determine long and short conditions longCondition = ta.crossover(VIP, VIM) and close > smoothingLine shortCondition = ta.crossunder(VIP, VIM) and close < smoothingLine crossCondition = ta.crossunder(VIP, VIM) or ta.crossunder(VIM, VIP) // Strategy entry and exit logic if longCondition strategy.entry("Long", strategy.long) if shortCondition strategy.entry("Short", strategy.short) bgcolor(crossCondition ? color.new(color.white, 80) : na) // Strategy by KP