EPTS策略是一种基于抛物线指标(Parabolic SAR)和两条不同周期移动平均线(EMA)的趋势跟踪策略。该策略利用抛物线指标判断当前市场的趋势方向,同时结合快慢两条移动平均线的相对位置关系,产生开仓信号。策略的主要思想是”趋势跟随”,即在上升趋势中做多,在下降趋势中做空,以期获得稳定的收益。
抛物线指标(Parabolic SAR)用于判断当前市场趋势的方向。当抛物线在K线上方时,市场处于下降趋势;当抛物线在K线下方时,市场处于上升趋势。
两条不同周期的指数移动平均线(EMA)用于确认趋势和产生开仓信号。本策略使用5日EMA和20日EMA。当5日EMA在20日EMA上方时,认为市场处于上升趋势;反之,则认为市场处于下降趋势。
开仓条件:当抛物线和EMA均显示上升趋势时,产生做多信号;当抛物线和EMA均显示下降趋势时,产生做空信号。
平仓条件:当抛物线突破K线时,平掉当前持仓,等待下一个开仓信号。
止损:开仓时,将止损价格设置为当前抛物线的位置。随着抛物线的移动,动态调整止损位置,实现移动止损。
通过抛物线指标和EMA的结合使用,EPTS策略能够较好地捕捉市场趋势,并在趋势反转时及时平仓,控制风险。同时,动态止损的设置进一步降低了策略的回撤风险。
趋势跟踪:EPTS策略基于趋势跟随的思想,能够有效捕捉市场的主要趋势,获取稳定收益。
动态止损:策略采用抛物线作为动态止损位,随着趋势的发展不断调整止损位置,有效控制了风险。
双重确认:通过抛物线和EMA的双重确认,提高了开仓信号的可靠性,减少了假信号。
简单易用:策略逻辑清晰,参数设置简单,易于理解和实施。
震荡市:在震荡市场中,趋势不明显,可能会产生较多的假信号,导致频繁交易和较大回撤。
趋势反转:当市场趋势突然反转时,策略可能会延迟平仓,承受一定的损失。
参数设置:策略的表现受到参数设置的影响,不同的参数可能会导致不同的结果。
引入更多指标:在现有的抛物线和EMA基础上,引入其他趋势类指标,如MACD、ADX等,提高趋势判断的准确性。
优化入场条件:对开仓条件进行优化,如考虑价格与EMA的距离、交易量等因素,提高开仓信号的质量。
动态参数优化:根据市场状况的变化,动态调整策略参数,如抛物线的步长、EMA的周期等,以适应不同的市场环境。
加入仓位管理:根据市场趋势的强度和账户风险,动态调整仓位大小,在控制风险的同时提高收益。
EPTS策略是一个基于抛物线指标和移动平均线的趋势跟踪策略,通过捕捉市场主要趋势,并及时平仓以控制风险,从而获取稳定收益。该策略逻辑清晰,易于实施,适合趋势明显的市场环境。但在震荡市中,策略可能面临较大回撤风险,需要结合其他指标和优化方法来提高策略的适应性和稳健性。此外,合理的参数设置和仓位管理也是策略成功运行的关键。总的来说,EPTS策略为趋势跟踪提供了一个简单有效的思路,但仍需根据实际市场状况进行优化和改进,以期获得更好的策略表现。
/*backtest start: 2024-02-01 00:00:00 end: 2024-02-29 23:59:59 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("febin2024", overlay=true) // Parabolic SAR Parameters start = input(0.02) increment = input(0.02) maximum = input(0.2) // EMA Parameters ema20_length = input(20, title="EMA 20 Length") ema5_length = input(5, title="EMA 5 Length") // Calculate EMAs ema20 = ta.ema(close, ema20_length) ema5 = ta.ema(close, ema5_length) // Parabolic SAR Logic var bool uptrend = na var float EP = na var float SAR = na var float AF = start var float nextBarSAR = na if bar_index > 0 firstTrendBar = false SAR := nextBarSAR if bar_index == 1 float prevSAR = na float prevEP = na lowPrev = low[1] highPrev = high[1] closeCur = close closePrev = close[1] if closeCur > closePrev uptrend := true EP := high prevSAR := lowPrev prevEP := high else uptrend := false EP := low prevSAR := highPrev prevEP := low firstTrendBar := true SAR := prevSAR + start * (prevEP - prevSAR) if uptrend if SAR > low firstTrendBar := true uptrend := false SAR := math.max(EP, high) EP := low AF := start else if SAR < high firstTrendBar := true uptrend := true SAR := math.min(EP, low) EP := high AF := start if not firstTrendBar if uptrend if high > EP EP := high AF := math.min(AF + increment, maximum) else if low < EP EP := low AF := math.min(AF + increment, maximum) if uptrend SAR := math.min(SAR, low[1]) if bar_index > 1 SAR := math.min(SAR, low[2]) else SAR := math.max(SAR, high[1]) if bar_index > 1 SAR := math.max(SAR, high[2]) nextBarSAR := SAR + AF * (EP - SAR) if barstate.isconfirmed if uptrend strategy.entry("ParSE", strategy.short, stop=nextBarSAR, comment="ParSE") strategy.cancel("ParLE") else strategy.entry("ParLE", strategy.long, stop=nextBarSAR, comment="ParLE") strategy.cancel("ParSE") // Plot Parabolic SAR plot(SAR, style=plot.style_cross, linewidth=3, color=color.orange) plot(nextBarSAR, style=plot.style_cross, linewidth=3, color=color.aqua) // Plot EMAs plot(ema20, color=color.blue, linewidth=2, title="EMA 20") plot(ema5, color=color.red, linewidth=2, title="EMA 5") // Equity Plot plot(strategy.equity, title="Equity", color=color.green, linewidth=2)