该策略利用抛物线SAR(止损反转)指标结合EMA均线进行过滤从而提高交易信号的准确性。策略适用于追踪趋势的交易者。
当SAR位于价格之下且价格高于慢速EMA均线加偏移量时产生做多信号;当SAR位于价格之上且价格低于慢速EMA均线减偏移量时产生做空信号。同时,通过快速EMA均线和慢速EMA均线的交叉来进行额外过滤。这样可以避免SAR指标单独使用时可能出现的假信号。
具体来说,做多信号的触发条件是:1) SAR位于昨日收盘价之下且位于当前收盘价之上;2) 当前收盘价高于慢速EMA均线加偏移量或快速EMA均线下穿慢速EMA均线;3) 当前收盘价高于SAR值和慢速EMA均线加偏移量。
做空信号的触发条件是:1) SAR位于昨日收盘价之上且位于当前收盘价之下;2) 当前收盘价低于慢速EMA均线减偏移量或快速EMA均线上穿慢速EMA均线;3) 当前收盘价低于SAR值和慢速EMA均线减偏移量。
该策略结合SAR指标和EMA均线过滤,可以较好地识别趋势方向,减少假信号。
优势如下:
该策略也存在一定的风险,主要如下:
该策略可以从以下几个方面进行优化:
本策略综合利用SAR指标和EMA均线的优势,设计了一个较为灵活的趋势追踪策略。总的来说,该策略成功识别趋势方向的能力较强,在追踪趋势中可以获得较好的效果。通过参数优化和风险管理,可以进一步增强策略稳定性和盈利能力。该策略适用于有良好风险管理意识和参数优化能力的投资者。
/*backtest
start: 2023-01-11 00:00:00
end: 2024-01-17 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=3
strategy("SAR Trend Trader Strategy By: jhanson107", shorttitle="SAR Trend Trader Strategy", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100)
SlowEMALength = input(100, "Slow EMA Length")
FastEMALength = input(10, "Fast EMA Length")
emaoffset = input(1.00, "EMA Offset %")
start = input(0.01)
increment = input(0.005)
maximum = input(0.08)
////////////////////////////////////////////////////////////////////////////////
// BACKTESTING RANGE
// From Date Inputs
fromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
fromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
fromYear = input(defval = 2019, title = "From Year", minval = 1970)
// To Date Inputs
toDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
toMonth = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
toYear = input(defval = 2020, title = "To Year", minval = 1970)
// Calculate start/end date and time condition
startDate = timestamp(fromYear, fromMonth, fromDay, 00, 00)
finishDate = timestamp(toYear, toMonth, toDay, 00, 00)
time_cond = true
////////////////////////////////////////////////////////////////////////////////
psar = sar(start, increment, maximum)
ema = ema(close, SlowEMALength)
fastema = ema(close, FastEMALength)
offset = (emaoffset / 100) * ema
// Signals
long = high[1] < psar[2] and high >= psar[1] and close > ema + offset or crossunder(ema, fastema) and close > psar and close > ema + offset
short = low[1] > psar[2] and low <= psar[1] and close < ema - offset or crossover(ema, fastema) and close < psar and close < ema - offset
// Plot PSAR
plot(psar, title="PSAR", color = low < psar and not long ? green : red, trackprice=true)
//Barcolor
barcolor(close > psar and close > ema + offset and fastema > ema ? green : na)
barcolor(close > psar and close < ema + offset or close > psar and fastema < ema ? white : na)
barcolor(close < psar and close < ema - offset and fastema < ema and close? red : na)
barcolor(close < psar and close > ema - offset or close < psar and fastema > ema ? white : na)
//Plot EMA
plot(ema, color=blue, linewidth=1, transp=0, title="Slow EMA")
plot(fastema, color=purple, linewidth=1, transp=0, title="Fast EMA")
if(high > psar)
strategy.close("Short")
if(low < psar)
strategy.close("Long")
if(long and time_cond)
strategy.entry("Long", strategy.long, comment="Long")
if(short and time_cond)
strategy.entry("Short", strategy.short, comment="Short")
if (not time_cond)
strategy.close_all()