该策略是一个基于均线的趋势跟踪策略。它使用两个不同周期的EMA均线,即21周期和55周期的EMA均线。当短期EMA线上穿长期EMA线时产生买入信号;当短期EMA线下穿长期EMA线时产生卖出信号。
除此之外,策略还结合了反向买卖、ATR止损和反转止盈来提高策略的稳定性和盈利能力。
使用21周期和55周期两条EMA均线。 21EMA代表短期趋势,55EMA代表长期趋势。
当短期EMA线上穿长期EMA线时,表示短期趋势转换为上升趋势,产生买入信号。
当短期EMA下穿长期EMA时,表示短期趋势转换为下降趋势,产生卖出信号。
反向买卖:只在价格小于开盘价时产生买入信号,只在价格大于开盘价时产生卖出信号。这是为了在短期回调时买入,在短期反弹时卖出,从而获利。
ATR止损:使用ATR指标的N倍来设置止损位。这可以根据市场波动度来动态调整止损。
反转止盈:使用买入价减去ATR的N倍作为止盈位。这是利用价位重新测试前支持转抵抗的特征来止盈。
使用双EMA判断主要趋势方向,能捕捉中长线趋势。
反向交易,适合趋势回调短线操作。
ATR止损,可以根据市场波动性设置止损。
反转止盈,设置在重要技术位附近,增加止盈概率。
策略逻辑简单清晰,容易理解和修改。
可供数字货币等具有高波动性市场使用。
双EMA均线产生错误信号的概率大,可适当延长均线周期。
反向交易容易止损,可调整止损比较宽松。
市场常有假突破,可加入其他指标过滤信号。
止盈风险大,可人工及时移除止盈单。
加入MACD,KD等指标判断超买超卖区域,过滤入场时机。
添加更多均线,例如120周期EMA,综合判断趋势。
对买入和卖出分别设置滑点,优化入场价位。
针对数字货币的高波动特点,可适当放宽ATR的止损幅度。
优化ATR倍数和移动止损方案,以求取最大盈利和最小回撤。
该策略整体来说是一个较为简单的双EMA均线策略,核心思路是利用EMA判断趋势方向。策略的优点是逻辑简洁,参数调整灵活,可适用于中长线趋势和短线反转。我们也分析了该策略可能存在的风险和应对方法,以及未来的几点优化建议。总体而言,该策略有一定的实用性和拓展空间,但需要根据不同市场调整参数使用。
/*backtest
start: 2022-11-21 00:00:00
end: 2023-11-27 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © TheHulkTrading
// Simple EMA strategy, based on ema55+ema21 and ATR(Average True Range) and it enters a deal from ema55 when the other entry conditions are met
//@version=4
strategy("Simple Ema_ATR Strategy HulkTrading", overlay=true)
atr_multiplier = input(2, minval=1, title="ATR Multiplier") // ATR Multiplier. Recommended values between 1..4
emaFast=ema(close,21)
emaSlow=ema(close,55)
//Basically long and short conditions
//If long:
// 1) close must be less than open (because we are searching for a pullback)
// 2) emaFast(21) must be bigger than emaSlow(55) - for a trend detection
// 3) Difference between emaFast and emaSlow must be greater than ATR(14) - for excluding flat
longCond = close < open and emaFast > emaSlow and abs(emaSlow-emaFast) > atr(14)
//For short conditions are opposite
shortCond = close > open and emaFast < emaSlow and abs(emaSlow-emaFast) > atr(14)
//Stop levels and take profits, based on ATR multiplier
stop_level_long = strategy.position_avg_price - atr_multiplier*atr(14)
take_level_long = strategy.position_avg_price + atr_multiplier*atr(14)
stop_level_short = strategy.position_avg_price + atr_multiplier*atr(14)
take_level_short = strategy.position_avg_price - atr_multiplier*atr(14)
//Entries and exits
strategy.entry("Long", strategy.long, when=longCond, limit = emaSlow)
strategy.exit("Stop Loss/TP","Long", stop=stop_level_long, limit = take_level_long)
strategy.entry("Short", strategy.short, when=shortCond, limit = emaSlow)
strategy.exit("Stop Loss/TP","Short", stop=stop_level_short, limit = take_level_short)