美文网首页
基于Python的指数基金量化投资——指数基金偏离度计算

基于Python的指数基金量化投资——指数基金偏离度计算

作者: 小将前行 | 来源:发表于2021-11-23 15:05 被阅读0次

    什么是指数偏离度

    它是指数涨跌的快慢和偏离幅度指标。

    当指数快速上涨,偏离度数据会迅速的向上偏离,当快速下跌时,偏离度数据会迅速的向下偏离。

    而持续的上涨中出现下跌,偏离度就会急转直下,另一种持续的下跌中出现上涨,偏离度就会迅速上升。

    指数偏离度的计算公式:100%  × (当日指数- N日平均指数) / N日平均指数;

    其中N可以取5、10、20、30、60等值,就能反映出多少日的偏离度情况。数值越小反映的结果越趋近于瞬时变化,而数值越大反映的结果趋近于于平均变化。

    指数偏离度反映的特征

    下面是沪深300指数60日偏离度和10偏离度的情况。

    60日偏离度更能反映指数在一段时间区间内的变化,整体性更好,抖动较大,有助于了解指数的长期偏离走势,而10日偏离度更能反映当前指数的瞬时变化,独立性更好,抖动较小,有助于了解指数的短期变化走势。

    指数偏离度反映的是趋势的变化,更适用在量化的趋势投资中,也就是右侧投资模式,并不适合左侧投资方式,后续会介绍微笑曲线的投资方式,微笑曲线就是一种左侧投资方式。

    在小将看来左侧投资方式的胜率更大也更适合自己,但萝卜青菜各有所爱,大家按自己的投资策略来就行。

    源码

    import numpy as np

    import pandas as pd

    import matplotlib.pyplot as plt

    view_name = 'sh.000300'

    # (当日指数或收盘价-N日平均指数或收盘价)/N日平均指数或收盘价×100%

    index_info = pd.read_csv('./exportfile/indexDataAll/'+ view_name + '.csv')

    index_data =index_info['close'].values[1:len(index_info['close']):1]

    win_10 = 10

    win_30 = 30

    win_60 = 60

    offset = 60

    index_data_deviation_10 =np.zeros([len(index_data),1])

    index_data_deviation_30 = np.zeros([len(index_data),1])

    index_data_deviation_60 =np.zeros([len(index_data),1])

    for i in range(1,len(index_data)-offset,1):

       index_data_deviation_10[i+offset] = (index_data[i+offset] -np.mean(index_data[i+offset-win_10:i+offset])) / np.mean(index_data[i+offset-win_10:i+offset])

       index_data_deviation_30[i+offset] = (index_data[i+offset] -np.mean(index_data[i+offset-win_30:i+offset])) /np.mean(index_data[i+offset-win_30:i+offset])

       index_data_deviation_60[i+offset] = (index_data[i+offset] - np.mean(index_data[i+offset-win_60:i+offset]))/ np.mean(index_data[i+offset-win_60:i+offset])

    plt_gap = 7

    plt.rcParams["axes.grid"] = True

    plt.rcParams['font.sans-serif'] =['Microsoft YaHei']

    plt.rcParams['axes.unicode_minus']=False

    plt.rcParams["grid.linestyle"] =(3, 5)

    fig = plt.figure(1)

    ax1 = fig.add_subplot(1,1,1)

    ax1.plot(index_data_deviation_10,label='10日偏离度',color='cornflowerblue',linewidth='2',linestyle='-')

    ax1.plot(index_data_deviation_60,label='60日偏离度',color='tomato',linewidth='2',linestyle='-')

    ax1.set_xlim(offset,len(index_data_deviation_60)+200)

    ax1.set_ylim(-0.4,2)

    index_ticks =index_info['date'].values[1:len(index_info['date']):1]

    index_x =range(len(index_ticks),0,-round(len(index_ticks)/plt_gap))

    index_xticks_tmp = index_ticks.tolist()

    index_xticks =index_xticks_tmp[len(index_xticks_tmp):0:-round(len(index_ticks)/plt_gap)]

    ax1.set_xticks(index_x)

    ax1.set_xticklabels(index_xticks)

    ax1.tick_params(labelsize=23)

    plt.legend(loc='upper left',fontsize=25)

    ax2 = ax1.twinx()

    ax2.plot(index_data,color='darkgray',label='指数走势',linewidth='3')

    ax2.set_xlim(offset,len(index_data)+200)

    ax2.set_ylim(0,np.max(index_data)+1000)

    ax1.set_xticks(index_x)

    ax1.set_xticklabels(index_xticks)

    ax2.tick_params(labelsize=23)

    plt.legend(loc='upper right',fontsize=25)

    plt.title('沪深300偏离度 | 10日偏离度='+str("{:.3f}".format(float(index_data_deviation_10[-1])))

    + ' | 60日偏离度='+str("{:.3f}".format(float(index_data_deviation_60[-1]))),size=28)

    plt.show()

    上述源码中用到的指数沪深300数据或者大家需要用其他数据,可以参看原来的文章《基于Python的指数基金量化投资- 指数数据获取》

    程序中用到的指数数据如果有问题,大家可以留言,欢迎拍砖^_^

    课程参考:网易云课堂  基于Python的量化指数基金投资

    相关文章

      网友评论

          本文标题:基于Python的指数基金量化投资——指数基金偏离度计算

          本文链接:https://www.haomeiwen.com/subject/hcywtrtx.html