本策略基于Bill Williams开发的加速振荡器(Accelerator Oscillator,AC)指标来识别趋势的转折点,以获取交易机会。该指标代表着异同移动平均线(Awesome Oscillator,AO)与其5周期简单移动平均之间的差值,反映出AO的变化速度。当AO向上穿越其移动平均线时,代表着多头力量的加速,这是建立多头仓位的信号。相反,当AO向下穿越其移动平均线时,代表着空头力量的加速,这是建立空头仓位的信号。
该策略通过计算AO与其5周期移动平均之间的差值,得到加速振荡器(AC)。当AC为正时,代表AO上升加速,显示多头力量增强;当AC为负时,代表AO下降加速,显示空头力量增强。
策略以AC的正负来判断建立多空仓位。当AC上穿0时,认为多头力量加速,因此建立多头仓位;当AC下穿0时,认为空头力量加速,因此建立空头仓位。
具体来说,策略计算异同移动平均线(AO)的快线与慢线:
AO快线 = SMA(HL2, LengthFast) AO慢线 = SMA(HL2, LengthSlow)
然后计算AO:
AO = AO快线 - AO慢线
接着计算AO的5周期移动平均线:
AO移动平均线 = SMA(AO, LengthFast)
最后得到加速振荡器:
AC = AO - AO移动平均线
当AC上穿0时,建立多头仓位;当AC下穿0时,建立空头仓位。
该策略具有以下优势:
使用加速振荡器指标,可以更早发现趋势反转,与简单移动平均线等其他指标相比更有利。
利用AO与其移动平均线的交叉作为交易信号,可以有效滤除市场噪音,识别趋势反转。
策略实现简单,容易理解和修改,适合用作策略开发的基础框架。
可自定义AO快线和慢线的周期参数,优化策略效果。
该策略也存在以下风险:
AC指标容易产生假信号,可能导致超短线操作频繁,增加交易成本和风险。
未考虑止损机制,可能造成亏损扩大。
回测数据可能存在过拟合风险,实盘效果存疑。
未考虑大盘走势和背景市场信息,盲目跟随AC指标信号可能导致交易失败。
该策略可以从以下方面进行优化:
结合其他指标过滤信号,例如MACD、KDJ等,避免假突破。
加入移动止损机制,控制单笔亏损。
评估 Parameter Optimization 功能,寻找最优参数组合。
根据不同品种和时间周期设置不同的参数,优化策略鲁棒性。
增加对大盘走势和高级别趋势的判断逻辑。
本策略基于加速振荡器指标设计简单的趋势反转交易策略,通过计算AO和其移动平均之间的差值来判断买卖时机,虽然容易产生假信号,但可作为策略研发的基础框架,通过引入其他因素进行优化筛选,能够有效改进策略效果,值得进一步研究。
/*backtest
start: 2022-12-06 00:00:00
end: 2023-12-12 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=2
////////////////////////////////////////////////////////////
// Copyright by HPotter v1.0 01/06/2017
// The Accelerator Oscillator has been developed by Bill Williams
// as the development of the Awesome Oscillator. It represents the
// difference between the Awesome Oscillator and the 5-period moving
// average, and as such it shows the speed of change of the Awesome
// Oscillator, which can be useful to find trend reversals before the
// Awesome Oscillator does.
//
// You can change long to short in the Input Settings
// Please, use it only for learning or paper trading. Do not for real trading
////////////////////////////////////////////////////////////
strategy("Accelerator Oscillator (AC) Backtest")
nLengthSlow = input(34, minval=1, title="Length Slow")
nLengthFast = input(5, minval=1, title="Length Fast")
reverse = input(false, title="Trade reverse")
xSMA1_hl2 = sma(hl2, nLengthFast)
xSMA2_hl2 = sma(hl2, nLengthSlow)
xSMA1_SMA2 = xSMA1_hl2 - xSMA2_hl2
xSMA_hl2 = sma(xSMA1_SMA2, nLengthFast)
nRes = xSMA1_SMA2 - xSMA_hl2
cClr = nRes > nRes[1] ? blue : red
pos = iff(nRes > 0, 1,
iff(nRes < 0, -1, nz(pos[1], 0)))
possig = iff(reverse and pos == 1, -1,
iff(reverse and pos == -1, 1, pos))
if (possig == 1)
strategy.entry("Long", strategy.long)
if (possig == -1)
strategy.entry("Short", strategy.short)
barcolor(possig == -1 ? red: possig == 1 ? green : blue )
plot(nRes, style=histogram, linewidth=1, color=cClr)