本文作为金融量化分析的入门基础之一,手把手带领大家使用Python计算股票的收益率,重点展示如何利用Python对日收益率数据向月、年收益率转换,然后演示个股Alpha和Beta值的计算。

#先引入后面可能用到的包(package)

import pandas as pd

import numpy as np

from scipy import stats

import tushare as ts

import matplotlib.pyplot as plt

%matplotlib inline

#正常显示画图时出现的中文和负号

from pylab import mpl

mpl.rcParams['font.sans-serif']=['SimHei']

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

收益率转化

对日期进行处理,分别将日对数收益率转化为月和年收益率。主要有三个步骤:

(1)估计股票每日对数收益率;

(2)加总对数收益率到每月(年);

(3)将月(年)收益率转化为百分比收益率

stock='sh'

df=ts.get_k_data(stock,start='1990-12-20')

使用tushare中的get_k_data()得到的数据框索引是顺序数字,而不是日期序列,因此,为分析方面,需要进行变换,即使用“date”作为索引。

df.index=pd.to_datetime(df.date)

#del df['date'] #删掉该列

df.tail() #这时候可以看到索引已经是date了

遇到问题没人解答,小编创建了一个Python学习交流裙:五二八 三九七 六一七, 寻找有志同道合的小
伙伴,互帮互助,群里还有不错的学习视频教程和PDF电子书分享!

步骤一:计算对数收益率

#计算的时候第一个数成为缺失值,删掉

lograte=np.log(df.close/df.close.shift(1))[1:]

步骤二:加总对数收益率到每月

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 = ts.get_k_data(code=stock, ktype='D', autype='qfq', start='2007-3-1')

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

ret_annual

计算股票的$\beta$系数和$\alpha值$

这里的beta和alpha系数都来自资本资产定价模型,先来看看CAPM:

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

其中,E(ri​)是股票i的预期收益率,rf是无风险利率,E(rm​)是市场指数收益率;

β系数是系统性风险,在评估股市波动风险与投资机会的方法中,常用来衡量结构性与系统性风险,可以简单理解为个股波动相对大盘波动的偏离程度。CAPM的计量模型可以表示为:

ri​=α+βrm+ε,

其中α可以理解为超额收益率,ε是随机扰动,可以理解为个体风险。

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

def get_return(code,startdate,endate):

df=ts.get_k_data(code,ktype='D',autype='qfq',

start=startdate,end=endate)

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的函数

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

startdate='2017-01-01'

endate='2018-11-09'

stocks={'中国平安':'601318','格力电器':'000651',

'招商银行':'600036','恒生电子':'600570',

'中信证券':'600030','贵州茅台':'600519'}

stocks_alpha_beta(stocks,startdate,endate)

import statsmodels.api as sm

import tushare as ts

import pandas as pd

import numpy as np

def get_return(code,d0,d1):

df=ts.get_k_data(code,start=d0,end=d1)

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

def beta(code,d0,d1):

s_ret=get_return(code,d0,d1)

sh_ret=get_return('sh',d0,d1)

df=pd.merge(s_ret,sh_ret,left_index=True,right_index=True)

y=df.iloc[:,0]

x=df.iloc[:,1]

x=sm.add_constant(x)

model=sm.OLS(y,x)

results=model.fit()

b=results.params[1]

return b

stocks={'中国平安':'601318','格力电器':'000651','招商银行':'600036',

'中信证券':'600030','贵州茅台':'600519'}

d0='2018-01-01'

d1='2018-11-13'

for stock in stocks.values():

s=list (stocks.keys())[list(stocks.values()).index(stock)]

print(s+"的市场风险beta:%.3f" % beta(stock,d0,d1))

中国平安的市场风险beta:1.278

格力电器的市场风险beta:1.219

招商银行的市场风险beta:1.053

中信证券的市场风险beta:1.425

贵州茅台的市场风险beta:1.145

「手把手教你」Python计算股票收益率、Alpha和Beta值相关推荐

  1. 「手把手教你」用Python量化海龟交易法则

    1引言 对于纯多头或空头的方向性策略而言,只有当证券价格是均值回归或趋势的,交易策略才能盈利.否则,如果价格是随机游走的,交易将无利可图(法玛有效市场假说).换句话说,目前各种纷繁复杂的所谓量化策略大 ...

  2. python统计套利_「手把手教你」使用Python实现统计套利

    文章转载自公众号 人工智能量化实验室 , 作者 Frankie的账号 一.交易对象选取 我们以商品期货市场的螺纹钢品种的跨期套利为例,选取两组不同到期月份的同种商品期货合约作为交易对象. 相关性检验 ...

  3. 手把手教你用Python构建自己的「王二狗」

    题图 | 智能二狗聊天机器人 导读 在人手N部智能手机的时代,我们对聊天机器人早已不陌生.这两年很火的游戏群聊天机器人「王二狗」更是用它的机智幽默征服了很多人. 今天,我们将手把手教你用Python从 ...

  4. matlab计算每个细胞面积,手把手教你用Imaris 计算细胞面积

    手把手教你用Imaris 计算细胞面积以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 收了这份AI 科研插图教程,你就是 ...

  5. 用python画皇冠_手把手教你用 Python 绘制酷炫的桑基图!

    原标题:手把手教你用 Python 绘制酷炫的桑基图! 作者 | 周志鹏 责编 | 郭 芮 最近,不止一次收到小伙伴的截图追问: "这个图叫什么???" "这个图真好看! ...

  6. python爬虫爬取房源_手把手教你用Python网络爬虫爬取新房数据

    项目背景 大家好,我是J哥. 新房数据,对于房地产置业者来说是买房的重要参考依据,对于房地产开发商来说,也是分析竞争对手项目的绝佳途径,对于房地产代理来说,是踩盘前的重要准备. 今天J哥以「惠民之家」 ...

  7. python 靶心_手把手教你使用Python实战反欺诈模型|原理+代码

    原标题:手把手教你使用Python实战反欺诈模型|原理+代码 作者 | 萝卜 来源 | 早起Python(ID: zaoqi-python) 本文将基于不平衡数据,使用Python进行 反欺诈模型数据 ...

  8. python编程例子 输入 输出-推荐 :手把手教你用Python创建简单的神经网络(附代码)...

    原标题:推荐 :手把手教你用Python创建简单的神经网络(附代码) 作者:Michael J.Garbade:翻译:陈之炎:校对:丁楠雅 本文共2000字,9分钟. 本文将为你演示如何创建一个神经网 ...

  9. 手把手教你用Python求均值、中值和众数

    导读:数据科学入门:集中趋势度量--均值.中值和众数. 作者:保罗·戴特尔(Paul Deitel).哈维·戴特尔(Harvey Deitel) 来源:大数据DT(ID:hzdashuju) 本文我们 ...

最新文章

  1. linux动态库注册函数,Linux动态库函数的详解
  2. eBPF Tracing 入门教程与实例
  3. Git客户端(TortoiseGit)基本使用详解
  4. stm32f105vct6例程_STM32F107VCT6 107USB例程USB DEVICE例程
  5. 关于solaris中 crontab -e 出现数字0的解决办法
  6. 【CV学习笔记】色彩空间
  7. 用matlab画旋转抛物面_MAELAB (1)画出旋转抛物面z=x^2 y^2 编程(2)matlab 画出锥面z=(x^2+y^2)^(1/2)编程...
  8. gta5服务器端文件夹,GTA5路径在steam哪个文件夹里面
  9. 银行卡收单相关文章汇集
  10. Laravel - 从百草园到三味书屋 From Apprentice To Artisan目录
  11. 将活跃天数转化为等级,输入等级查询活跃天数
  12. 读书笔记5 《精进:如何成为一个很厉害的人》 采铜
  13. java 抽奖系统源码_基于jsp的抽奖系统-JavaEE实现抽奖系统 - java项目源码
  14. 一致 先验分布 后验分布_先验概率、似然函数与后验概率
  15. Navicat Premium 12安装激活教程_不需要激活工具直接激活
  16. 图像控制点 形变_Sentinel-1 TOPS影像干涉处理与形变监测
  17. 那些不起眼的流量大户在做什么?(转载)
  18. python odoo pdf文件 位置获取
  19. 〖Python自动化办公篇④〗- 文件自动化管理 - 文件查找与基于文件内容查找文件
  20. Chromium-Dev中一些英文缩写

热门文章

  1. C#编程基础(下)第二课:创建Windows应用程序的方法,窗体的基本属性和方法、基本控件的使用
  2. 不用火绒,从源头去除 WinRAR 的弹窗广告
  3. 有序广播Ordered broadcasts的使用
  4. 凡科php项目模块,如何创建一个DouPHP新模块
  5. 君澜酒店集团2019年度待开业“景澜”品牌酒店发布
  6. 康托展开(八数码问题)
  7. 关于WIFI的工作模式--AP MODE/STATION MODE
  8. 什么是推荐系统与常见的推荐系统评价指标
  9. 饥荒linux 中文版下载,饥荒哈姆雷特手机版
  10. 实验9、键盘扫描及数码管显示实验