该策略主要思想是同时利用Parabolic SAR和EMA两个指标来识别趋势方向和入市时机。其中,Parabolic SAR用于判断当前趋势方向,EMA用于辅助确定具体的入市时机。当SAR在价格上方时为熊市,当SAR在价格下方时为牛市。入市时则要求价格突破EMA才认为趋势开始形成,此时跟随趋势方向入市。
该策略的核心指标是Parabolic SAR,它是一个能够跟踪价格并判断趋势反转的技术分析工具。其计算公式较为复杂,但原理较为简单直观。SAR指标通过不断调整自己的位置,始终保持在价格的背后,当价格反转时,它会立即调整位置到价格的另一侧。因此,只需要观察SAR指标相对价格的位置,就可以判断目前的趋势方向。
辅助该策略的另一个指标是EMA。与SAR不同,EMA更适合判断趋势的持续性。通过要求价格需突破EMA之后才入场,可以有效过滤掉部分噪声。且EMA还可用于确认反转信号。例如当价格跌破上升趋势的EMA时,很可能是趋势反转的信号。
综上,该策略的具体交易规则如下:
通过Parabolic SAR判断大趋势,再利用EMA过滤误导信号,既可以锁定趋势又可控制风险,实现了对趋势的有效跟踪。
该策略具有以下几点主要优势:
总的来说,该策略集成了多个指标的优点,在抓住趋势的同时也做到了有效的风险控制,是一种表现稳定、易于掌握的趋势跟踪策略。
尽管该策略有诸多优势,但在实际运行中也还是存在一定的风险需要防范,主要风险有:
为降低上述风险,可以从以下几个方面进行优化:
进一步优化该策略,可以考虑从以下几个方面入手:
优化参数设置。可以通过更系统的方法如遗传算法对EMA和SAR的参数进行测试和优化,找到最优参数组合。
增加趋势判断工具。可以加入MACD、布林带等其他指标来确认趋势,提高准确性。
设置动态止损。可以根据ATR等指标设置动态的止损点,让止损更加灵活。
考虑交易成本。引入滑点和手续费参数,优化净利润而非绝对收益。
分层入场出场。可以设置更复杂的多级入场出场机制,在趋势不同阶段进行分批建仓或止损。
通过上述几点优化后,策略在跟踪趋势的同时,可望获得更高稳定性、更精准判断和更强风险控制能力,从而获得 mejor 绩效。
基于Parabolic SAR和EMA的趋势跟踪策略,集成了多个指标判断趋势方向和入场时机的优势,通过设置SAR作为止损点,风险控制到位,是一种表现相对稳定的量化策略。该策略具有判断准确率高、易于掌握等优点,值得投资者参考学习。但也存在一定的风险,需要对参数和止损方式进行进一步优化,才能获得更佳的绩效。
/*backtest
start: 2022-12-15 00:00:00
end: 2023-12-21 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=3
strategy("Parabolic SAR Strategy w/ EMA", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100)
emalength = input(100 , "EMA Length")
emaoffset = input(0.00, "EMA Offset %")
start = input(0.015)
increment = input(0.005)
maximum = input(0.2)
////////////////////////////////////////////////////////////////////////////////
// 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, emalength)
offset = (emaoffset / 100) * ema
// Signals
psar_long = high[1] < psar[2] and high > psar[1]
psar_short = low[1] > psar[2] and low < psar[1]
// Plot PSAR
plotshape(psar, location = location.absolute, style = shape.cross, size = size.tiny, color = low < psar[1] and not psar_long ? green : red)
//Plot EMA
plot(ema)
if(psar_long)
strategy.close("Short")
if(psar_short)
strategy.close("Long")
if (psar < low and time_cond and close > ema + offset)
strategy.entry("Long", strategy.long, comment="Long", stop = psar)
if (psar > high and time_cond and close < ema - offset)
strategy.entry("Short", strategy.short, comment="Short", stop = psar)
if (not time_cond)
strategy.close_all()