本策略基于13周期和48周期的指数移动平均线(EMA)构建交易信号,属于双EMA金叉死叉类型的趋势跟踪策略。当短期EMA上穿长期EMA时做多,当短期EMA下穿长期EMA时平仓。该策略通过 Capture较长周期的趋势,避免被市场短期波动所误导,从而取得稳定收益。
本策略使用13周期EMA作为短期EMA,48周期EMA作为长期EMA。假设短期EMA为快线,长期EMA为慢线。
当快线从下方上穿慢线时,产生买入信号。此时短期趋势开始强于长期趋势,代表趋势开始变强,做多能够顺势而为。
当快线从上方下穿慢线时,产生平仓信号。此时短期趋势开始弱于长期趋势,代表趋势开始变弱,做多可能面临回撤,因此选择平仓止损。
通过这样的金叉死叉操作,能够顺势而为,及时止损,避免把短期波动当成趋势反转所造成的不必要损失。
Capture长周期趋势,避免被短期市场噪音误导。13周期和48周期的参数选择,能够平滑价格数据,识别出较长的趋势方向。
回撤控制能力较强。当短期趋势变弱时能够快速止损,有效控制亏损。
实现简单,逻辑清晰。双EMA交叉是常见的趋势策略,容易理解掌握。
可扩展性强。可以在原有基础上引入其他辅助指标进行优化。
当短期行情震荡频繁时,可能产生多次不必要的交易信号。
EMA参数设置不当时,识别趋势能力较差,可能Capture错方向。
无法判断趋势的强弱,在趋势最后阶段也会追高造成损失。
无法确定具体入场点位,存在后期调整风险。
引入辅助指标判断趋势强弱,避免追高。例如引入成交量指标、波动率指标等。
优化EMA参数,使得Capture的趋势周期更符合不同品种的特点。
增加止损方式,如移动止损、百分比止损等,降低风险。
增加过滤条件,避免趋势震荡期无效交易。例如引入DMI、KDJ等判断趋势状况。
结合其它入场指标精确入场点位。例如MACD信号,明确具体买卖时机。
本策略通过13周期和48周期EMA形成的金叉死叉系统,能够识别较长周期的趋势方向,顺势而为,在趋势结束前止损。是一种较为简单实用的趋势跟踪策略。但可能Capture错方向和追顶的风险依然存在。可以通过引入辅助指标、优化参数、增加止损方式等进行改进,使策略更稳定可靠。
/*backtest
start: 2022-10-27 00:00:00
end: 2023-11-02 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=3
// strategy("EMA Strategy 13 48", shorttitle = "EMA Strategy 13 48", overlay=true, pyramiding = 3,default_qty_type = strategy.percent_of_equity, default_qty_value = 1000)
// === Inputs ===
// short ma
maFastSource = input(defval = close, title = "Fast MA Source")
maFastLength = input(defval = 13, title = "Fast MA Period", minval = 1)
// long ma
maSlowSource = input(defval = close, title = "Slow MA Source")
maSlowLength = input(defval = 48, title = "Slow MA Period", minval = 1)
// === Vars and Series ===
fastMA = ema(maFastSource, maFastLength)
slowMA = ema(maSlowSource, maSlowLength)
plot(fastMA, color=blue)
plot(slowMA, color=purple)
goLong() => crossover(fastMA, slowMA)
killLong() => crossunder(close, fastMA)
strategy.entry("Buy", strategy.long, when = goLong())
strategy.close("Buy", when = killLong())
// Shorting if using
goShort() => crossunder (fastMA, slowMA)
killShort() => crossover(fastMA, slowMA)
//strategy.entry("Sell", strategy.short, when = goShort())
//strategy.close("Sell", when = killShort())