个股的beta系数的估算

个股的beta系数的估算

代码


def test_gg_beta(symbol='000895.sz', 
                 start='2018-01-01',
                 plot_price=True,
                 align_to='gg',
                 plot_k=True,
                 ):
    '''
    align_to: str, ['gg', 'dp'], 数据对齐的方式
        'gg': 表示对齐到个股, 改变大盘的数据, 以对齐到个股上
        'dp': 表示对齐到大盘, 改变个股的数据, 以对齐到大盘上
    
    
    >>> symbol='000895.sz'
    >>> start='2018-01-01'
    
    >>> beta, df = test_gg_beta(align_to='gg', plot_k=False)
    >>> beta2, df2 = test_gg_beta(align_to='dp', plot_k=False)
    
    >>> beta, df, plots = test_gg_beta('000933.sz')
    >>> beta, df = test_gg_beta('000933.sz', plot_price=False, plot_k=False)
    
    结果是: 
        0.83(双汇发展 @ 2018年)
        1.64(神火股份 @ 2018年)

    '''    
    _date = datetime.datetime.now().date().isoformat()
    title='QC图件: 用于计算个股的Beta系数(DP:399317)  \n   制作日期: {}'.format(_date)
    
    c=Context(symbol)
    stk = Stock(c,start)
    stk.grab_data_from_tdxhq()
    stk.qfq()
    stk.grab_index_from_tdxhq()
    stk.indicator()
    
    # 个股通常会有停牌的时候, 所以需要对齐
    # 比如以个股为准, 把大盘对齐到个股是时间戳里: 
    # 将大盘的收盘线, 插入到个股的ohlc数据框里(用assign方法)
    if align_to == 'gg':
        f = stk.ohlc.close[0] / stk.aindex.close[0]
        df=stk.ohlc.assign(dp=stk.aindex.close * f)
        df=df.loc[:, ['close', 'dp']]
        beta = ttr.estimateBeta(df.close, df.dp)
        title += '\n{:s}({:s})的Beta系数: {:.4f}(数据对齐到个股)'.format(stk.context.name,stk.context.code, beta) 
        if plot_price: 
            plt.figure()
            df.plot(title=title)
    elif align_to == 'dp':
        f = stk.aindex.close[0] / stk.ohlc.close[0]
        df2 = stk.aindex.assign(gg=stk.ohlc.close * f)
        df2 = df2.loc[:, ['close', 'gg']]
        df2 = df2.fillna(method='ffill') # 向未来填充 (用老数据向下填充)
        beta2 = ttr.estimateBeta(df2.gg, df2.close)
        title += '\n{:s}({:s})的Beta系数: {:.4f}(数据对齐到大盘)'.format(stk.context.name,stk.context.code, beta2) 
        if plot_price: 
            plt.figure()
            df2.plot(title=title)
    
    if plot_k: 
#        fig,ax = plt.subplots(1,1)
        #stk.mycandlestick_ohlc(ax, [20,60])
        #stk.mycandlestick_ohlc(ax, with_raw_quotes=True)
#        stk.mycandlestick_ohlc(ax, with_raw_quotes=False)
        
        subset = slice(-120*3,None) # '2017-07'  '2017'
        subset = None
        plots = pl.Plotter(stk.context, stk, subset) #plot stk data
#        plots.plot_candle_only( 'lday')
        plots.plot_candle_vol('lday')
        #plots.plot_candle_vol('lday', savefig=True)
        
    if align_to=='gg':
        return beta, df
    else:
        return beta2, df2

结果图

结论

用276天大盘交易日(同期个股是271个交易日)的数据, 采用两种方法, 得到的beta值为:
0.833 vs 0.830
非常接近.

小于1的beta, 揭示了该股在大盘下跌阶段的优异表现.

猜你喜欢

转载自www.cnblogs.com/duan-qs/p/10424497.html