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)