本策略名为“三重保险”量化交易策略,运用Parabolic SAR、Stoch和Security三个指标的组合信号,实现对突破性行情的捕捉。该策略多时间框架分析,通过不同周期指标的组合,实现更稳定和可靠的交易决策。
本策略使用Parabolic SAR指标判断趋势方向和反转时机。Stoch指标判断是否过买过卖。Security函数提取更高周期均线的方向判断整体趋势。三者结合构成交易决策:
Parabolic SAR点数转化为下方时,视为看涨信号;点数上翻时,则看跌。
Stoch K值低于20视为超卖,高于80视为超买。超卖时看涨,超买时看跌。
Security函数调用更高周期均线判断整体趋势方向,实现不同时间周期之间的组合分析。
上述三个指标同向看涨时做多,同向看跌时做空。严格遵循多重指标过滤的原则,可有效过滤假突破,锁定真实趋势。
本策略最大优势在于多时间框架分析。三个指标分别判断短期、中期和长期不同级别上的价格行为。Parabolic SAR捕捉反转时机和短期趋势;Stoch判断当下是否过买过卖;Security函数判断总体大趋势方向。三者互为佐证,可有效避免假突破的干扰,锁定突破方向正确的机会。
同时,本策略采用多个指标判断和过滤,可最大限度地减少单一指标误判的概率。连续三重判断的通过,说明行情信号强度足够,从而确保交易决策的正确性。
本策略主要风险在于指标参数设置的恰当性。Parabolic SAR的步长和最大步长设置会直接影响其捕捉反转速度;Stoch的K值和D值平滑周期需要符合市场特征;Security函数的选择周期也会对判断产生影响。这些关键参数的不当设置,都可能导致策略交易决策的错误。
此外,多时间框架分析原理强调不同周期指标的组合运用。但是,如果长短周期指标之间出现分歧时,该如何处理也是一个需要关注的问题。一个可能的解决思路是结合趋势指标判断整体方向,BREAKOUT类指标确定具体出场时机。
本策略后续优化方向主要在以下三个方面:
增加自适应步长机制。允许Parabolic SAR的参数根据市场波动程度做出调整,更好捕捉反转。
增加止损机制。当价格向不利方向突破某一水平时,选择止损退出。控制单笔损失。
引入机器学习技术。通过算法训练判断不同时间段价格行为的相关性。不同时间框架组合策略参数也可通过算法优化获得。
“三重保险”量化策略充分利用Parabolic SAR、Stoch和Security指标的互补优势。它们从短期趋势、超买超卖和长期均线三个维度判断市场行为的一致性,构建出稳定可靠的交易策略。组合使用多个指标有助于过滤假信号,而多时间框架的运用则可在长短周期得到验证的前提下做出决策。总体而言,本策略整合性强,实战水平高,值得进一步研究和应用。
/*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=5
strategy(title='kyenji', shorttitle='kyenji90', overlay=true)
// Parabolic SAR
parabolicSARStart=input.float(0.01)
parabolicSARInc=input.float(0.01)
parabolicSARMax=input.float(0.2)
psarDot = ta.sar(parabolicSARStart,parabolicSARInc,parabolicSARMax)
longConditionPSAR = psarDot > close
shortConditionPSAR = psarDot < close
// Stoch
periodK = input.int(14, title="K", minval=1)
periodD = input.int(3, title="D", minval=1)
smoothK = input.int(3, title="Smooth", minval=1)
k = ta.sma(ta.stoch(close, high, low, periodK), smoothK)
d = ta.sma(k, periodD)
h0 = 80
h1 = 20
longConditionStoch = k < h1
shortConditionStoch = k > h0
// Security
securityPeriod=input('180')
longConditionSecurity = ta.crossover(request.security(syminfo.tickerid, securityPeriod, close),request.security(syminfo.tickerid, securityPeriod, open))
shortConditionSecurity = ta.crossunder(request.security(syminfo.tickerid, securityPeriod, close),request.security(syminfo.tickerid, securityPeriod, open))
// Generate Signal
longCondition = longConditionSecurity and longConditionPSAR and longConditionStoch
shortCondition = shortConditionSecurity and shortConditionPSAR and shortConditionStoch
if (longCondition)
strategy.entry("Long", strategy.long)
if (shortCondition)
strategy.entry("Short", strategy.short)