添加布林带择时策略有多便捷!股票量化分析工具QTYX-V2.4.7

前言

布林带通道(Bollinger Bands)是非常经典的技术指标,常用于研判市场中长期运动趋势。

比如我们以[350, 2,2] 这组长线参数来绘制恒瑞医药、贵州茅台10年行情走势的布林带通道,如下所示:

e16c72a619fb22db9d037c126a079954.png

a865315f3181dfcd9f15d194dde2897a.png

不少星球学员向我发起了支持布林带通道策略的需求。其实在QTYX量化分析系统中支持这个策略还是非常容易的,于是我们升级了版本至V2.4.7来支持这个策略。

如何实现策略

布林带通道的应用网上介绍了很多,比如股价突破上轨为超买,跌破上轨为超卖等等,此处不再赘述。这里主要介绍下如何在QTYX中添加布林带通道策略。

我们看到图上布林带通道由三条轨道线组成,分别是上轨 、中轨和下轨。中轨线是N日移动平均线(MA),上轨线和下轨线分别是中轨线的正负N倍标准差。

布林带通道的计算可以直接使用talib的接口:

upper, middle, lower = talib.BBANDS(close, timeperiod=20, nbdevup=2, nbdevdn=2, matype=0)

根据收盘数据可以计算出一个通道轨迹值,upper为上限,lower为下限,middle为平均位置。

调用参数:

  • close:收盘价

  • timeperiod:计算的周期,通常选择20天

  • nbdevup:上限价格相对于周期内标准偏差的倍数,取值越大,则上限越大,通道越宽

  • nbdevdn:下限价格相对于周期内标准偏差的倍数,取值越大,则下限越大,通道越宽

  • matype:平均值计算方法,用于设定哪种类型的MA。0=SMA, 1=EMA, 2=WMA, 3=DEMA, 4=TEMA, 5=TRIMA, 6=KAMA, 7=MAMA, 8=T3 (Default=SMA)

在/QTYX/StrategyGath/StrategyGath.py的Base_Strategy_Group类中添加策略代码,如下所示:

@staticmethod
def get_bbands_signal(stock_dat, period = 20, nup = 2, ndn = 2):


    # 布林带通道突破 买入/卖出信号
    stock_dat['H_line'], stock_dat['M_line'], stock_dat['L_line'] = talib.BBANDS(stock_dat.Close, timeperiod=period,
                                                                                 nbdevup=nup, nbdevdn=ndn, matype=0)
    # 当天收盘价穿越昨天通道顶部 第二天买入股票
    buy_index = stock_dat[stock_dat.Close > stock_dat.H_line].index
    # 当天收盘价跌破昨天通道底部 第二天卖出股票
    sell_index = stock_dat[stock_dat.Close < stock_dat.L_line].index


    stock_dat.loc[buy_index, 'Signal'] = 1
    stock_dat.loc[sell_index, 'Signal'] = -1


    stock_dat['Signal'] = stock_dat.Signal.shift(1)  # 当天出信号则第二天买入
    # print(stock_dat[stock_dat['signal'].notna()])
    stock_dat['Signal'].fillna(method='ffill', inplace=True)  # 与前面元素值保持一致
    stock_dat['Signal'].fillna(value=-1, inplace=True)  # 序列最前面几个NaN值用-1填充
    return stock_dat

策略的关键是得到买卖信号序列。比如将买入当天的 Signal 值设置为 1,将卖出当天的 Signal设置为−1。

然后在QTYX/MainlyGui/ElementGui/DefTreelist.py的colleges中注册接口:

colleges = {
    u'经典策略': [
        {u'名称': u'N日突破', u'标识': u'趋势', '函数': u'已定义', 'define': "get_ndays_signal"},
        {u'名称': u'ATR止盈止损', u'标识': u'趋势', '函数': u'已定义', 'define': "get_ndays_atr_signal"},
        {u'名称': u'布林带突破', u'标识': u'趋势', '函数': u'已定义', 'define': "get_bbands_signal"}],
    u'自定义策略': [
        {u'名称': u'yx-zl-1', u'标识': u'综合', '函数': u'未定义'},
        {u'名称': u'yx-zl-2', u'标识': u'趋势', '函数': u'未定义'},
        {u'名称': u'yx-zl-3', u'标识': u'波动', '函数': u'未定义'}],
    u'衍生指标': [
        {u'名称': u'均线交叉', u'标识': u'cross', '函数': u'已定义'},
        {u'名称': u'跳空缺口', u'标识': u'jump', '函数': u'已定义'},
        {u'名称': u'黄金分割', u'标识': u'fibonacci', '函数': u'已定义'}],
    u'K线形态': [
        {u'名称': u'乌云盖顶', u'标识': u'CDLDARKCLOUDCOVER', '函数': u'已定义'},
        {u'名称': u'三只乌鸦', u'标识': u'CDL3BLACKCROWS', '函数': u'已定义'},
        {u'名称': u'十字星', u'标识': u'CDLDOJISTAR', '函数': u'已定义'},
        {u'名称': u'锤头', u'标识': u'CDLHAMMER', '函数': u'已定义'},
        {u'名称': u'射击之星', u'标识': u'CDLSHOOTINGSTAR', '函数': u'已定义'}
    ]
}

这样就把策略添加到QTYX系统中了,可以看到布林带策略已经在界面的策略列表中了。

回测时只要点击左边树形控件的策略名称,选中的策略就生效了!

f5470f65375190d4d4f05b925c25156a.png

0999e6818c0f825fdd2a948fcee10565.png

使用talib库设计择时策略原来这么方便!

同样地,按这个思路我们可以基于均线、MACD、KDJ、RSI、OBV……以及多指标组合,设计出各式各样的策略。

因为我们直接在本地的Python环境下编程,只要生成出买卖信号序列即可,编写的逻辑过程可以任意发挥,非常灵活,而且不存在黑盒子!

说明

1. 我们会把完整的源码上传到知识星球《玩转股票量化交易》中,帮助小伙伴们更好地掌握这个方法。

2. 想要加入知识星球《玩转股票量化交易》的小伙伴记得先微信call我获取福利!

添加布林带择时策略有多便捷!股票量化分析工具QTYX-V2.4.7​​​​​​​

​​​​​​​

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值