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

前言

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

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

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

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

不少星球学员向我发起了支持布林带通道策略的需求。其实在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系统中了,可以看到布林带策略已经在界面的策略列表中了。

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

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

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

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

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

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

说明

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

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

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

​​​​​​​

你可能感兴趣的:(搭建自己的股票量化系统,python,自动化,数据分析)