这是一个利用动量过滤技术构建的移动平均线交易策略。它通过设置价格变动阈值来过滤小幅价格波动,只选择大幅价格变动参与计算,从而提高策略的稳定性。
该策略的核心指标是经过动量过滤的Chande动量摆动指标(CMO)。Chande动量摆动指标属于动量指标的一种,它通过计算多空天数的绝对值之和与价格涨跌差值的和的比值,来判断多空势头。该策略对其进行了改进,设置了一个价格变动最小阈值参数Filter,只有当价格变动超过这个阈值,才会参与CMO的计算。这就过滤了市场中大量的小幅波动,使得指标更加稳定可靠。
在计算指标的基础上,它设定了上线TopBand和下线LowBand,当指标超过这两个线时产生交易信号。最后,反向输入参数reverse可以将原始信号取反,实现逆向操作。
这是一个非常稳定可靠的趋势追踪策略,由于采用了动量过滤技术,可以有效过滤市场噪音,防止被套利。策略参数优化空间大,可以通过调整Filter、TopBand、LowBand等参数来优化策略指标。并且具有反向交易功能,可以灵活适应不同市场环境。
该策略主要基于趋势追踪,所以在盘整市中容易产生错误信号和亏损。此外,参数优化不当也会导致交易频率过高或信号不稳定。最后,反向交易参数使用不当,可能导致不必要的亏损。
为降低这些风险,应该合理优化参数,使信号更加稳定可靠;在盘整市避免使用该策略,选择更适合的策略工具;谨慎使用反向交易功能,在Parameter优化不佳时应避免开启。
该策略可以从以下几个方向进行优化:
优化Filter参数值,在保证过滤市场噪声的同时,也要确保交易频率不会过低。
优化TopBand和LowBand的参数区间,使其与市场波动幅度相匹配,防止错误信号。
利用walk forward analysis等方法动态优化参数,使策略参数适应市场的变化。
增加止损止盈逻辑,设置合理的止损点来控制亏损。
结合其他指标滤波,如MACD、KD等,避免非趋势市场的错误交易。
这是一个非常实用的趋势追踪策略。它采用动量过滤技术,可以有效抑制市场噪声,使信号更加清晰可靠。通过参数优化和逻辑优化,可以将其调教成一个可靠稳定的量化交易工具。但仍需注意防止在盘整市场使用以及参数优化不当带来的风险。总的来说,这是一个非常有应用前景的策略模板。
/*backtest
start: 2023-11-11 00:00:00
end: 2023-12-11 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=2
////////////////////////////////////////////////////////////
// Copyright by HPotter v1.0 02/03/2017
// This indicator plots a CMO which ignores price changes which are less
// than a threshold value. CMO was developed by Tushar Chande. A scientist,
// an inventor, and a respected trading system developer, Mr. Chande developed
// the CMO to capture what he calls "pure momentum". For more definitive
// information on the CMO and other indicators we recommend the book The New
// Technical Trader by Tushar Chande and Stanley Kroll.
// The CMO is closely related to, yet unique from, other momentum oriented
// indicators such as Relative Strength Index, Stochastic, Rate-of-Change, etc.
// It is most closely related to Welles Wilder`s RSI, yet it differs in several ways:
// - It uses data for both up days and down days in the numerator, thereby directly
// measuring momentum;
// - The calculations are applied on unsmoothed data. Therefore, short-term extreme
// movements in price are not hidden. Once calculated, smoothing can be applied to the
// CMO, if desired;
// - The scale is bounded between +100 and -100, thereby allowing you to clearly see
// changes in net momentum using the 0 level. The bounded scale also allows you to
// conveniently compare values across different securities.
//
// You can change long to short in the Input Settings
// Please, use it only for learning or paper trading. Do not for real trading.
////////////////////////////////////////////////////////////
fFilter(xSeriesSum, xSeriesV, Filter) =>
iff(xSeriesV > Filter, xSeriesSum, 0)
strategy(title="CMOfilt", shorttitle="CMOfilt")
Length = input(9, minval=1)
Filter = input(3, minval=1)
TopBand = input(70, minval=1)
LowBand = input(-70, maxval=-1)
reverse = input(false, title="Trade reverse")
hline(0, color=gray, linestyle=line)
hline(TopBand, color=red, linestyle=line)
hline(LowBand, color=green, linestyle=line)
xMom = close - close[1]
xMomAbs = abs(close - close[1])
xMomFilter = fFilter(xMom, xMomAbs, Filter)
xMomAbsFilter = fFilter(xMomAbs,xMomAbs, Filter)
nSum = sum(xMomFilter, Length)
nAbsSum = sum(xMomAbsFilter, Length)
nRes = 100 * nSum / nAbsSum
pos = iff(nRes > TopBand, 1,
iff(nRes < LowBand, -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, color=blue, title="CMOfilt")