本策略通过集成多种指标对大趋势进行判断,根据指标组合信号的同向变化生成交易决策。策略融合了移动平均速度、STOCH指标和MACD指标,形成一个较为全面和稳健的趋势跟踪机制。
该策略主要基于以下几个指标进行趋势判断:
移动平均线速度:反映价格变动速度的趋势性指标。
STOCH指标:超买超卖区域判断Trend转折。
MACD指标:双均线差值反映趋势变化。
具体交易规则如下:
移动平均线速度向上,给出看多信号。
STOCH指标进入超卖区域,给出看空信号。
MACD均线正向交叉,给出看多信号。
当任意2个指标信号同向时,做出相应的入场决策。
指标信号变化则平仓离场。
该策略综合考虑了趋势的多个因素,通过组合信号过滤误导因素,形成较强确认力的稳定交易体系。
相比单一指标,该组合策略具有以下优势:
综合判断,提高了准确性。
组合滤波,减少了错误交易。
结合趋势和反转指标,提供全面视角。
同向信号强确认力,可避免假突破。
规则简单明确,容易实现。
参数调整灵活,适应性较强。
不同时间周期通用,使用范围广。
可引入机器学习训练指标权重。
总体稳定性和盈利能力优于单一指标。
尽管该策略具有多项优点,以下风险仍需考虑:
多指标提高了策略复杂度。
参数优化及权重设定难度较大。
不同指标间可能存在矛盾信号。
部分指标存在滞后 giving,无法完全避免亏损。
单边持仓时间不确定,存在运气成分。
组合信号并不能消除趋势交易固有监控。
高交易频次易受交易费用影响。
需要关注收益回撤比指标。
根据上述分析,该策略可作以下改进:
评估不同指标在不同市场中的效果。
增加参数稳健性检验,防止过优化。
优化指标权重设定,降低信号冲突。
设置止损止盈,规避严重亏损。
采用时间 exits,控制单边无目标持仓。
评估交易频率对交易费用的影响。
引入风险指标约束。
测试多市场健壮性。
持续验证策略,防止过时失效。
本策略通过集成 multiples 指标判断趋势,形成稳定的组合信号系统。但任何策略都需不断优化和进步,关注风险指标并防止过拟合。量化交易是一个持续学习和迭代的过程。
/*backtest
start: 2022-09-16 00:00:00
end: 2023-09-22 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// By TradeStation
//@version=5
strategy("Mov Avg Speed Strategy", overlay=true)
src = input(close, title="Source")
// MA Speed
avg_len = input.int(50, minval=1, title="Avg Length", group="MA Speed")
roc_len = input.int(1, minval=1, title="Rate of Change Length", group="MA Speed")
avg_roc_len = input.int(10, minval=1, title="Avg Rate of Change Length", group="MA Speed")
// Stochastic
stoch_len = input.int(14, minval=1, title="Stochastic Length", group="Stochastic")
smooth_k = input.int(3, minval=1, title="Stochastic Smooth K", group="Stochastic")
overbought = input.float(80, title="Stochastic Overbought", group="Stochastic")
oversold = input.float(20, title="Stochastic Oversold", group="Stochastic")
// MACD
fast_length = input(12, title="Fast Length", group="MACD")
slow_length = input(26, title="Slow Length", group="MACD")
macd_avg_length = input.int(9, title="MACD Avg Length", minval=1, group="MACD")
// MA Speed
avg = ta.sma(src, avg_len)
roc = ta.roc(avg, roc_len)
avg_roc = ta.sma(roc, avg_roc_len)
avg_roc_signal = avg_roc > 0 ? 1 : avg_roc < 0 ? -1 : 0
// Stochastic k
k = ta.sma(ta.stoch(close, high, low, stoch_len), smooth_k)
stochastic_signal = k <= oversold ? 1 : k >= overbought ? -1 : 0
// MACD
fast_ma = ta.ema(src, fast_length)
slow_ma = ta.ema(src, slow_length)
macd = fast_ma - slow_ma
macd_avg = ta.ema(macd, macd_avg_length)
macd_signal = macd_avg > macd_avg[1] ? 1 : macd_avg < macd_avg[1] ? -1 : 0
// set the signal couint
long_count = 0
short_count = 0
if macd_signal == 1
long_count += 1
else if macd_signal == -1
short_count += 1
if stochastic_signal == 1
long_count += 1
else if stochastic_signal == -1
short_count += 1
if avg_roc_signal == 1
long_count += 1
else if avg_roc_signal == -1
short_count += 1
if (long_count >= 2)
strategy.entry("Long", strategy.long)
if (short_count >= 2)
strategy.entry("Short", strategy.short)