开源量化框架Catalyst中文教程(5)——RSI策略

GitHub:https://github.com/enigmampc/catalyst
官方文档:https://enigma.co/catalyst/index.html
系统环境:macOS High Sierra 10.13.6

官方没有RSI策略的示例文件,我们很容易通过TA-Lib实现。

一. RSI(相对强弱指数)

举个栗子(详见百度https://baike.baidu.com/item/RSI/6130115?fr=aladdin):

如果最近14天涨跌情形是:第一天升2元,第二天跌2元,第三至第五天各升3元;第六天跌4元 第七天升2元,第八天跌5元;第九天跌6元,第十至十二天各升1元;第十三至十四天各跌3元。

那么,计算RSI的步骤如下:
(一)将14天上升的数目相加,除以14,上例中总共上升16元除以14得1.143(精确到小数点后三位);
(二)将14天下跌的数目相加,除以14,上例中总共下跌23元除以14得1.643(精确到小数点后三位);
(三)求出相对强度RS,即RS=1.143/1.643=0.696(精确到小数点后三位);
(四)1+RS=1+0.696=1.696;
RS/(1+RS)=0.696/(1+0.696)=0.41038
(五)RSI=100*0.41028=41.038.
结果14天的强弱指标RS1为41.038。
不同日期的14天RSI值当然是不同的,连接不同的点,即成RSI的轨迹。
RSI的变动范围在0—100之间,一般来说,RSI>70是超买状态,可以做空;RSI<30是超卖状态,可以做多。

用TA-Lib很容易得到RSI:

rsi_value = talib.RSI(history_data, timeperiod=RSI_PERIOD)

其中history_data是历史收盘价dataframe,timeperiod是统计周期。

二. 策略逻辑

  1. RSI值上穿超卖阈值(30),买入
  2. RSI值下穿超买阈值(70),卖出

三. 代码实现

1. 常数设置和程序初始化
NAMESPACE = 'bollinger_bands'
log = Logger(NAMESPACE)
SIGNAL_BUY = 'buy'  # 买入信号
SIGNAL_SELL = 'sell'  # 卖出信号
SIGNAL_INIT = ''  # 观望信号
RSI_PERIOD = 14   # RSI计算周期
RSI_OVER_SOLD_THRESH = 30  # 超卖阈值
RSI_OVER_BOUGHT_THRESH = 70  # 超买阈值


def initialize(context):
    """
        初始化
    """
    context.i = 0  # 经历过的交易周期
    context.asset = symbol('bab_usd')  # 交易对
    context.base_price = None  # 初始价格
    context.signal = SIGNAL_INIT  # 交易信号
2. 策略实现

注意:这里if context.i < RSI_PERIOD + 2与前面两个策略不同,请看下图,我们将均线(或布林带)和RSI的计算周期都设置成14天,两条线出现的时间相差一天,那是因为均线(或布林带)计算的14天是包括了当天的,而RSI是计算前面14天,也就是说RSI值是从第15天才有的,因此RSI的观察窗口要比均线或布林带增加1天:

def handle_data(context, data):
    """
        策略
    """
    # 经历过的交易周期大于周期窗口才开始计算
    context.i += 1
    if context.i < RSI_PERIOD + 2:
        return

    # 获取历史数据,返回dataframe
    history_data = data.history(context.asset,
                                'close',
                                bar_count=RSI_PERIOD + 2
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值