相对强弱指数(RSI)在技术分析师中广为人知。与所有指标一样,它在某些股票或特定时期往往效果更佳。能否通过调整获得更优结果?让我们一探究竟。
相对强弱指数(RSI)是一种流行的技术指标,用于衡量价格变动的速度。所有RSI值介于0至100之间。其常见解读为:当RSI跌破30时股票处于超卖状态,升至70以上则为超买状态。初看应用逻辑似乎是:超卖时买入,超买时卖出;或超买时做空,超卖时平仓。
实际效果如何?
为验证其有效性,我对纽约证券交易所和纳斯达克交易所1816只随机选取的股票进行了大规模回测。测试数据覆盖2005年1月1日至2014年8月31日的十年周期。鉴于回测规模之大,其输出结果足以被视为充分、精确且可靠,可就RSI策略的应用得出重要结论。我采用自建自动化系统(下称“软件”)运行了绩效测试。
回测规则简明:当RSI值跌破30时买入。卖出点位设定为买入后RSI首次突破70的时刻。测试中采用RSI信号日收盘价作为进出场价格基准。
图1:相对强弱指数(RSI)交易示意图 绿色上箭头指向2011年8月22日RSI值跌至28.03的低点。当日以收盘价12.71美元建立多头头寸。2012年1月11日,RSI升至72.49(绿色下箭头)突破卖出阈值,最终以22.25美元平仓。
图1展示了Lennar公司(LEN)股价图表中的交易案例。绿色上箭头指向2011年8月22日RSI值28.03的下行趋势。当日以收盘价12.71美元建立多头头寸。2012年1月11日,RSI升至72.49(绿色向下箭头),突破卖出阈值。该股以当日收盘价22.25美元售出。
图2:测试结果。此处展示经典RSI策略及其变体策略的测试结果。
回测过程中,软件对1,816只股票分别生成多头交易信号,并汇总测试输出。图2表格中的盈亏列显示,该策略为投资组合中的1,816只股票(第1行)创造了4.09%的年化平均盈亏(P&L)。该绩效数据基于等权重法计算,即每笔交易赋予相同权重,不考虑股票价格差异。
趋势持续时间与RSI策略表现呈负相关,该策略在短期股票趋势中效果更佳。
盈利可观,但能否优化?
测试结果表明该交易策略具有盈利能力。然而,平均年化盈亏数据尚不足以说服我采用此策略进行交易。可能存在若干原因。其中之一与RSI的计算原理相关。RSI计算公式为:
RSI = 100 – 100 / (1 + RS)
RS = 平均收益 / 平均亏损
该公式中,相对强度值(RS)代表平均收益与平均亏损的比率。在完美渐进的上涨趋势中(图3顶部图表),随着价格持续走高,RS值呈加速上升态势(中部图表)。然而,基于RS计算得出的RSI值在初始阶段上升后,于接近70时显著放缓(底部图表)。这是因为数学上RSI的计算公式将其值限制在0至100的区间内。
图3:趋势、相对强度(RS)与相对强弱指数(RSI)。上图显示价格处于完美上升趋势,中图表明上升趋势中RS值呈加速态势。而RSI(下图)则呈现先快速上升、触及70后增速放缓的特征。
这种现象在下跌趋势中同样存在。当股票陷入长期趋势时,往往会引发问题。回顾图1中LEN的股价图表,可见在2007年持续下跌过程中,其相对强弱指数(RSI)值曾十余次跌破30。每次股价略有反弹时,RSI值都会出现过度反应而急剧攀升。当价格重回下行趋势时,RSI指标随之跟随,多次触发超卖信号。最糟糕的情况是:若在2007年3月2日(图表中RSI首次跌破30的节点)执行多头交易,遵循该策略的投资者将面临重大亏损。
但情况可以改善
解决此问题的一种方法是在下跌趋势中减少交易次数。另一种方法是选择走势周期较短的股票。我进行了第二次回测(以下简称测试2)来验证第一种方法。在测试2中,我采用趋势交易策略,仅在上涨趋势中交易股票。下跌趋势期间不进行任何交易。当股价下跌超过20%时认定为下跌趋势,上涨超过20%则认定为上升趋势。部分读者可能联想到道氏理论——即价值涨跌幅度超过20%的标准。图4展示了LEN股票图表,其中绿色阴影区域覆盖上升趋势。该趋势始于股价从前期下跌低点上涨20%时(水平线标记趋势确认点),终止于股价从趋势高点下跌20%时(水平线标记趋势反转点)。核心策略是仅允许在阴影区域内进行交易。
图4:仅在上升趋势中交易。绿色阴影区域描绘上升趋势。识别上升趋势有助于确保仅在此期间进行交易。
在测试2中,当无上升趋势时不持有交易。一旦上升趋势逆转,所有头寸均按当日收盘价平仓(仅限测试目的)。其余交易规则保持不变。在股票趋势被识别后,交易规则仅在上升趋势期间生效。
测试2结果显示该策略表现欠佳,年化收益率仅为3.44%(见图2第2行)。统计摘要表明交易次数显著减少,主要因上升趋势中超卖信号(即买入信号)稀少所致。交易次数减少必然导致错失交易机会。从图1可见,2012年上涨趋势中RSI曾回落至50附近。若多数上涨趋势中RSI均呈现此类波动,将RSI入场信号阈值提升至50可增加交易次数。因此在测试3中,我将RSI信号阈值从30调整至50,其余测试条件保持不变。如预期所示,测试收益率从4.09%提升至7.37%(见图2第3行)。为评估效果,我分别纳入测试1和测试3中表现最佳的500只与100只标的。测试1中表现最佳的500只标的年化收益率为12.98%(第4行),而测试3中表现最佳的500只标的年化收益率达20.72%(第5行)。测试1中表现最佳的100只股票年化收益率为21.63%(第6行),而测试3中表现最佳的100只股票年化收益率达35.99%(第7行)。通过这三组可比收益率数据,可清晰评估测试3的绩效提升效果。
测试3中获利交易比例低于测试1。这源于趋势反转时平仓操作,这些平仓多为小幅亏损。
第二种预期能提升策略表现的方法是筛选趋势周期较短的股票。为验证此法,我从趋势周期排序列表中选取1816只股票中的前500名。软件提取了这些股票在测试1中的个体表现并汇总结果。结果见图2第8行,年化收益率达8.64%。为对比,软件同时筛选趋势幅度最大的500只股票(图2第9行),其收益率仅为2.15%。这证实了趋势持续时间与RSI策略表现呈负相关关系。换言之,该策略在股票趋势较短时往往效果更佳。
发挥创造力
相对强弱指数(RSI)可转化为高效交易策略。没有任何交易策略能对所有股票始终如一地奏效,RSI同样如此——它在具备特定特征的股票上表现更佳。您已看到在上升趋势中交易以及选择趋势周期较短的股票如何提升RSI策略的绩效。此外还有其他方法可优化RSI性能,建议您尝试不同调整方案。
Strategy: RSI with Trend
inputs:Price( Close ) ,RSILength( 14 ),OverBought( 70 ),Oversold( 30 ),RetracePct( 20 ),ExitOnTrendChange( true ),UseTrendFilter( true ),DrawTrendLines( true ),LineColor( Yellow ),LineWidth( 1 );variables:NewSwingPrice( 0 ),SwingPrice( Price ),SwingDate( Date ),SwingTime( Time ),TLDir( 0 ),RetraceFctrUp( 1 + RetracePct * .01 ),RetraceFctrDn( 1 - RetracePct * .01 ),SaveSwing( false ),AddTL( false ),UpdateTL( false ),TLRef( 0 ),RSIValue( 0 ),TrendOK( false ) ;NewSwingPrice = SwingHigh( 1, Price, 1, 2 ) ;if NewSwingPrice <> -1 thenbeginif TLDir <= 0 and NewSwingPrice >= SwingPrice* RetraceFctrUp thenbeginSaveSwing = true ;AddTL = true ;TLDir = 1 ;endelse if TLDir = 1 and NewSwingPrice >= SwingPrice thenbeginSaveSwing = true ;UpdateTL = true ;end ;endelsebeginNewSwingPrice = SwingLow( 1, Price, 1, 2 ) ;if NewSwingPrice <> -1 thenbeginif TLDir >= 0 and NewSwingPrice <= SwingPrice* RetraceFctrDn thenbeginSaveSwing = true ;AddTL = true ;TLDir = -1 ;endelse if TLDir = -1 and NewSwingPrice <= SwingPrice thenbeginSaveSwing = true;UpdateTL = true ;end ;end ;end ;if SaveSwing thenbeginSwingPrice = NewSwingPrice ;SwingDate = Date[1] ;SwingTime = Time[1] ;SaveSwing = false ;end ;if DrawTrendLines = true thenbeginif AddTL thenbeginTLRef = TL_New( SwingDate, SwingTime, SwingPrice,SwingDate[1], SwingTime[1], SwingPrice[1] ) ;TL_SetExtLeft( TLRef, false ) ;TL_SetExtRight( TLRef, false ) ;TL_SetSize( TLRef, LineWidth ) ;TL_SetColor( TLRef, LineColor ) ;AddTL = false ;endelse if UpdateTL thenbeginTL_SetEnd( TLRef, SwingDate, SwingTime, SwingPrice ) ;UpdateTL = false ;end ;end ;RSIValue = RSI( Price, RSILength ) ;if UseTrendFilter = false thenTrendOK = trueelseTrendOK = TLDir = 1 ;if RSIValue crosses under OverSold and TrendOK thenBuy ( "RSI LE" )next bar at Marketelse if RSIValue crosses over OverBought thenSell ( "RSI LX" ) next bar at Market ;if ExitOnTrendChange and TLDir = -1 thenSell ( "Trend LX" ) next bar at Market ;
关注微信:
加入群:每天接收新策略新思路
关注公众号:每天经典策略不错过!
通过下面方式支持我们:
1、关注管理员微信、我们公众号及入群。
2、想用multicharts平台做程序化可以联系我们购买它们年度会员或绑定实盘进行程序化,我们有最具性价比的手续费政策和年度会员购买优惠折扣政策。
3、使用我们自研平台“鼎元C++全自动化”平台进行期货量化交易,执行期货公司特惠佣金费率,享受免平台费服务,【执行无平台费,不加手续费政策】,众多策略模板范例可供参考、优化与升级。我们还提供更多的教程服务与视频培训,欢迎咨询。
4、通过我们开立证券股票账户,执行人性化佣金政策,欢迎咨询。
5、我们的工作与研究离不开大家的支持。感谢大家!

