Python计算股票收益率、Alpha和Beta系数

一、收益率转化

对日期进行处理,分别将日对数收益率转化为月和年收益率。

 1、计算对数收益率

#计算的时候第一个数为缺失值,删掉
import numpy as np
lograte=np.log(df.close/df.close.shift(1))[1:]

2、加总对数收益率到每月

import pandas as pd
month=[]
index=lograte.index
for i in range(0,np.size(lograte)):
    month.append(''.join([index[i].strftime("%Y"),index[i].strftime("%m")]))
    y=pd.DataFrame(lograte.values,month,columns=['月收益率'])
y.tail()

3、将收益率转化为百分比收益率

ret_monthly=y.groupby(y.index).sum()
ret_monthly.tail()

      将日收益率转化为年收益率

stock='601318'
df = get_price('000300.XSHG', end_date='2020-4-4', count=300)
df.index=pd.to_datetime(df['date'])
logret=np.log(df.close/df.close.shift(1))[1:]
year=[]
d0=df.index
for i in range(0,np.size(logret)):
    year.append(d0[i].strftime("%Y"))
    y=pd.DataFrame(logret.values,year,columns=['年收益率'])
    ret_annual=np.exp(y.groupby(y.index).sum())-1

二、资本资产定价模型

      上世纪60年代,威廉·夏普在《金融学期刊(Journal of Finance)》上发表的论文里,首次把金融资产的收益拆成两部分:跟随市场一起波动的部分叫贝塔收益,不和市场一起波动、与市场无关的部分就叫阿尔法收益, beta和alpha系数都来自资本资产定价模型CAPM。

  • 贝塔收益是承担市场风险带来的收益跟随市场的投资收益,比如被动型的指数基金。
  • 阿尔法收益则是衡量一个投资经理超越比较基准的能力带来的收益,比如主动型基金挣的收益

1、定价模型公式

"""
E(ri​)=rf+β(E(rm​)−rf​)

E(ri​):股票i的预期收益率
rf:   无风险利率,
E(rm​):市场指数收益率,即市场的预期平均收益率;
β:    β系数,即资产标的系统性风险。

例子
  股票市场涨1%,某只股票涨3%,该股票收益率的变化是市场收益率变化的3倍, β=3

Ri=Rf+βi×(Rm—Rf)
其中:
  Ri表示预期收益率;
  Rf表示无风险收益率,通常以短期国债的利率近似代替;
  βi表示第i种股票的或组合的β系数;
  Rm表示市场组合的平均收益率;
  βi×(Rm—Rf)为组合的风险收益率;
β系数的计算:β=(Ri-Rf)/(Rm-Rf)=风险收益率/(Rm-Rf)

例子
   一、A投资组合的预期收益率为10%,市场组合的平均收益率为12%,无风险收益率为4%,
则该投资组合的β系数应如何计算?

 有已知条件可知:必要收益率Ri=10%,市场组合的平均收益率Rm=12%,无风险收益率Rf=4%,
代入公式中可得:β=(Ri-Rf)/(Rm-Rf)=(10%-4%)/(12%-4%)=0.75。


 二、B投资组合的风险收益率为12%,市场组合的平均收益率为14%,无风险收益率为6%,
则该投资组合的β系数应如何计算?

 有已知条件可知:市场组合的平均收益率Rm=14%,无风险收益率Rf=6%,风险收益率为12%;
  代入公式中可得:β=风险收益率/(Rm-Rf)=12%/(14%-6%)=1.5

"""

 2、α系数

       α系数是一标的的绝对回报和按照 β 系数计算的预期风险回报之间的差额 。即实际收益贝塔收益之间的差额,也就是基金超越基准的超额收益,收益超越市场基准的程度

  • 绝对回报(Absolute Return)或额外回报(Excess Return)是基金/投资的实际回报减去无风险投资收益(一般采取同期国债利率)。是用来测量一投资者或基金经理的投资技术。
  • 预期回报(Expected Return)贝塔系数 β 和市场回报的乘积,反映投资或基金由于市场整体变动而获得的回报

 3、β系数

        β贝塔系数是标的收益率跟随大盘波动的程度,常用来衡量结构性与系统性风险,。贝塔系数说明了标的与市场的相关性,或者叫市场敏感度。

ri​=α+βrm+ε,
α:超额收益率,
ε:是随机扰动,可以理解为个体风险

 4、代码实现

 #先定义获取股票数据和计算收益率的函数

def get_return(code,startdate,endate):

    df=get_price('000300.XSHG', end_date='2020-4-4', count=300)
    p1=np.array(df.close[1:])
    p0=np.array(df.close[:-1])
    logret = np.log(p1/p0)
    rate=pd.DataFrame()
    rate[code]=logret
    rate.index=df['date'][1:]
    return rate

#定义求beta和alpha的函数 

import pandas as pd
import numpy as np
from scipy import stats

import matplotlib.pyplot as plt
def alpha_beta(code,startdate,endate):

    mkt_ret=get_return('sh',startdate,endate)
    stock_ret=get_return(code,startdate,endate)
    df=pd.merge(mkt_ret,stock_ret,left_index=True,right_index=True)
    x=df.iloc[:,0]
    y=df.iloc[:,1]
    beta,alpha,r_value,p_value,std_err=stats.linregress(x,y)
    return alpha,beta

#定义求一系列股票在某个时间段的股票 

def stocks_alpha_beta(stocks,startdate,endate):

    df=pd.DataFrame()
    alpha=[]
    beta=[]

    for code in stocks.values():
        a,b=alpha_beta(code,startdate,endate)
        alpha.append(float('%.4f'%a))
        beta.append(float('%.2f'%b))
        df['alpha']=alpha
        df['beta']=beta
        df.index=stocks.keys()
    return df

三、参考 

什么是基金投资的阿尔法和贝塔?看阿尔法系数就能选到好基金?

 什么是阿尔法系数 - 知乎

说说基金的收益《阿尔法》和《贝塔》_市场

 资本资产定价模型计算公式是怎样的?-会计网

 投资理论(一):资本资产定价模型 - 知乎

你可能感兴趣的:(#,pandas系列,python,量化交易,数据挖掘,python)