资源加载中... loading...

CTA策略之利用相对强弱RSI实现低买高卖

Author: 扫地僧, Date: 2021-10-26 15:32:43
Tags: 商品期货趋势My语言

一、摘要

在中国商品期货投机市场中,价格的涨跌就像多方和空方拔河比赛,哪方的力量更强大,价格趋势就会跟着哪个方向走,因此分析期货市场中的双方力量就很重要,而RSI指标就是分析多方和空方力量的神器。

二、RSI简介

RSI英文全称Relative Strength Index,即相对强弱指标,由著名的技术分析派大师威尔斯·维尔德于1786年6月创造。它是根据一段时间内,上涨幅度的和与下跌幅度的和的比率绘制的一种技术曲线,能够反映出市场一定时期内的景气程度,最早就是应用于期货交易,尤其是适合用于短线交易。 img

三、RSI原理

RSI的原理很简单,就是通过一系列的数学运算,得出商品期货市场中买卖双方的力量强弱对比,从而预测未来价格的趋势方向。比如在螺纹钢期货市场中,如果超过一半的人要买,这就是买方市场,价格自然就会上涨;如果超过一半的人要卖,这就是卖方市场,价格就会下跌。

RSI指标的数值范围是0~100,但大部分都是在20~80之间波动,如果RSI的值超过80就说明该品种被过度买入,在这段时期内,多头获利丰厚,落袋为安卖出纷涌而至,抛售压力相应增大,容易导致价格回落。如果RSI的值低于20就说明该品种被过度卖出,价格容易出现反弹。

四、SRI计算

第1步:计算价格上涨(U)和下跌幅度(D)

  • 在价格上涨中:
    • U = 收盘价 - 上根K线收盘价
    • D = 0
  • 在价格下跌中:
    • U = 0
    • D = 收盘价 - 上根K线收盘价

注意:U和D不能是负数,如果相邻K线价格相同,则U和D均等于零

YC := REF(C, 1);  // 上根K线收盘价
U := MAX(C - YC, 0);  // 计算收盘价与上根K线收盘价的差,在该差值与0之间取最大值
D := ABS(C - YC);  // 计算收盘价与上根K线收盘价的差,取该差值绝对值的2周期移动平均值

第2步:计算相对强弱

RS := SMA(U, 2, 1) / SMA(D, 2, 1);  // 分别计算U和D的2周期平均值,计算U和D的比值

第3步:计算相对强弱指标

RSI ^^ RS * 100;  // 将比率乘以100,保证了其值范围在0~100之间

从上面的公式可以看出,RSI的计算过程非常简单,一句话可以概括为:在某个时间段价格上涨所产生的波动占整个波动的百分比。

五、策略回测

回测配置 品种:豆一主力连续合约 数据周期:2015-02-22至2020-12-16 K线周期:日线 滑点:开平仓各2跳

回测绩效 img 资金曲线 img

六、总结

世界上没有完美的预测工具,RSI也不例外,根据选择K线周期的不同,RSI给出的结果也不同,理论上短周期的RSI能及时给出交易信号,但可靠性较差。中长周期的RSI信号可靠,但反应滞后,常常错过交易机会。

总的来说,RSI指标主要用于辅助参考,并不意味着市场趋势一定会向它预示的方向发展,尤其在市场波动剧烈时,还应该参考其他指标进行综合分析。

注意:本文内容旨在对量化交易初学者进行基础教育,本文策略不可直接实盘使用。


(*backtest
start: 2015-02-22 00:00:00
end: 2020-12-16 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_CTP","currency":"FUTURES"}]
args: [["VALUE",90],["ContractType","a888",126961]]
*)

YC := REF(C, 1);  // 上根K线收盘价
U := MAX(C - YC, 0);  // 计算收盘价与上根K线收盘价的差,在该差值与0之间取最大值
D := ABS(C - YC);  // 计算收盘价与上根K线收盘价的差,取该差值绝对值的2周期移动平均值
RS := SMA(U, 2, 1) / SMA(D, 2, 1);  // 分别计算U和D的2周期平均值,计算U和D的比值
RSI ^^ RS * 100;  // 将比率乘以100,保证了其值范围在0~100之间
AVERAGE ^^ MA(C, LEN);
C < AVERAGE AND RSI < 100 - VALUE, BK;
C > AVERAGE AND RSI < 100 - VALUE, BP;
C > AVERAGE AND RSI > VALUE, SK;
C < AVERAGE AND RSI > VALUE, SP;
AUTOFILTER;
template: strategy.tpl:40:21: executing "strategy.tpl" at <.api.GetStrategyListByName>: wrong number of args for GetStrategyListByName: want 7 got 6