本策略运用双指数移动平均线,根据价格突破平均线的方向来判断多空方向。当价格上涨突破平均线时做多,当价格下跌突破平均线时做空。该策略结合趋势判断和超买超卖来锁定获利。
该策略基于双指数移动平均线指标。指标中的Length参数设置平均线周期为20天。xPrice参数设置为收盘价close。然后计算出20日指数移动平均线xXA。同时计算最近两天的最高价和最低价nHH和nLL。如果nLL高于平均线或者nHH低于平均线,取nLL和nHH中的较小值作为关键价格nXS。如果收盘价高于平均线且高于关键价格,做多;如果收盘价低于平均线且低于关键价格,做空。最后根据reverse参数判断是否反向操作。
该策略判断价格突破平均线的方向,结合实时最高价和最低价来确定突破的有效性,避免假突破。当价格实际突破平均线时才发出交易信号。
使用双指数移动平均线,能够更准确地判定趋势方向。
结合最高价和最低价判断突破有效性,可避免因价格震荡造成的假突破。
可方便地通过reverse参数调整做多做空方向,适应不同市场环境。
突破平均线时才交易,可以有效过滤市场 Noise。
双指数移动平均线有时反应不灵敏,可能错过短期交易机会。
移动平均线系统容易在盘整市中产生频繁的虚假信号。
该策略适合趋势明显的市场环境,不适合盘整震荡市。
未考虑止损退出机制,存在亏损扩大的风险。
未设定头寸规模,可能造成风险控制不当。
可以结合其他指标判断市场趋势,避免在盘整市频繁交易。
可以添加动态止损来控制单笔亏损风险。
可以根据市场波动程度动态调整移动平均线参数,优化指标灵敏度。
可以设置头寸规模,在扩大获利的同时控制风险。
可以通过Walk Forward Analysis方法进行参数优化。
本策略运用双指数移动平均线指标判断价格趋势方向,并结合最高价和最低价避免假突破。在优化止损机制、头寸规模控制等方面还有改进空间。但该策略整体来说简单实用,通过参数调整可以适应不同市场环境,是一种可靠的趋势跟踪策略。
/*backtest
start: 2023-09-07 00:00:00
end: 2023-10-07 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=2
////////////////////////////////////////////////////////////
// Copyright by HPotter v1.0 27/12/2016
// Strategy
// This indicator plots 2/20 exponential moving average. For the Mov
// Avg X 2/20 Indicator, the EMA bar will be painted when the Alert criteria is met.
//
// You can use in the xPrice any series: Open, High, Low, Close, HL2, HLC3, OHLC4 and ect...
// 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(title="Strategy 2/20 Exponential Moving Average", overlay = true)
Length = input(20, minval=1)
reverse = input(false, title="Trade reverse")
xPrice = close
xXA = ema(xPrice, Length)
nHH = max(high, high[1])
nLL = min(low, low[1])
nXS = iff((nLL > xXA)or(nHH < xXA), nLL, nHH)
pos = iff(close > xXA and close > nXS , 1,
iff(close < xXA and close < nXS, -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(nXS, color=blue, title="XAverage")