对日期进行处理,分别将日对数收益率转化为月和年收益率。
#计算的时候第一个数为缺失值,删掉
import numpy as np
lograte=np.log(df.close/df.close.shift(1))[1:]
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()
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。
"""
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
"""
α系数是一标的的绝对回报和按照 β 系数计算的预期风险回报之间的差额 。即实际收益和贝塔收益之间的差额,也就是基金超越基准的超额收益,收益超越市场基准的程度
β贝塔系数是标的收益率跟随大盘波动的程度,常用来衡量结构性与系统性风险,。贝塔系数说明了标的与市场的相关性,或者叫市场敏感度。
ri=α+βrm+ε,
α:超额收益率,
ε:是随机扰动,可以理解为个体风险
#先定义获取股票数据和计算收益率的函数
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
什么是基金投资的阿尔法和贝塔?看阿尔法系数就能选到好基金?
什么是阿尔法系数 - 知乎
说说基金的收益《阿尔法》和《贝塔》_市场
资本资产定价模型计算公式是怎样的?-会计网
投资理论(一):资本资产定价模型 - 知乎