该策略基于抛物线转向指标SAR进行交易,SAR指标可显现市场的趋势反转点。当SAR点突破价格时产生交易信号。
抛物线转向指标SAR(Stop and Reverse)主要判断市场趋势反转,属于趋势跟踪指标。
SAR点位于价格之下时代表看涨,此时如果SAR上穿价格则为做空信号。
SAR点位于价格之上时代表看跌,此时如果SAR下穿价格则为做多信号。
该策略就是以SAR指标的突破作为交易信号的方向。并以SAR点作为止损位。
SAR指标可准确定位潜在的反转点。
由于采用趋势跟踪机制,可减少假信号。
SAR作为止损位可顺势Setting,避免被套。
无需其它指标或过滤器即可运作。
参数优化简单,使用默认设置即可。
SAR指标在盘整时可能产生频繁信号。可添加过滤器识别趋势性行情。
止损点靠近当前价可能被击穿。应适当宽松止损点。
未考虑交易量因素。可加入量能指标避免价量不符。
回撤可能较大。应适当设置仓位以限制风险。
趋势反转不一定成功。可设置再次反转确认。
测试是否调整SAR参数能获得更好结果。
加入MACD等指标判断反转成功率。
建立动态移动止损机制。
优化开仓仓位,充分利用SAR信号。
研究加入继续反转确认逻辑。
该策略运用抛物线转向指标SAR判断潜在反转点,在SAR突破价格时交易。优点是顺势止损,避免被套。但SAR信号时点选择可能不准,需进一步优化。整体来说,抛物线转向思路值得借鉴学习。
/*backtest
start: 2023-08-18 00:00:00
end: 2023-09-17 00:00:00
period: 3h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=3
strategy("Parabolic SAR Strategy", overlay=true)
//
// author: Kozlod
// date: 2018-09-03
// https://www.tradingview.com/u/Kozlod/
//
start = input(0.02)
increment = input(0.02)
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 = 2018, 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 = 2019, 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)
// 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)
if (psar >= high and time_cond)
strategy.entry("ParLE", strategy.long, stop=psar, comment="ParLE")
else
strategy.cancel("ParLE")
if (psar <= low and time_cond)
strategy.entry("ParSE", strategy.short, stop=psar, comment="ParSE")
else
strategy.cancel("ParSE")
if (not time_cond)
strategy.close_all()