基于python的股票数据分析,Python股票分析

  基于python的股票数据分析,Python股票分析

  本文主要详细介绍如何用Python来分析股票收益率。本文中的示例代码非常详细,具有一定的参考价值。感兴趣的朋友可以参考一下,希望能帮到你。

  00-1010序案例详情编程任务编程技巧参考代码任务1、代码任务2、代码任务3的代码。

  

目录

  金融的Python学习不同于IT系统开发,我们不需要达到程序员的水平。但是学习Python可以让你体会到一个人写交易系统的必要性,一个真人可以当一个军。

  在量化交易中,Python是工具,金融是Sense,可以让你的想法快速实现和验证。Python在金融领域的应用,必然会涉及到资本市场最重要的部分——3354股票。"股票市场如此迷人,吸引了无数投资者."用Python分析股票组合的收益率和波动率,是每个金融从业者都应该掌握的技能。

  我们缺乏的是在具体金融场景中应用Python的经验。今天我们就以金融股为分析对象,来一场Python金融实战。希望对你有启发!

  

前言

  A公司是一家公开发行的基金管理公司,总部设在北京。在公司发行的所有基金产品中,有一只名为“新金融股基金”,精选具有核心竞争优势、具有可持续增长潜力、在投资策略上估值水平相对合理的a股市场金融股。

  截至2019年9月底,基金重仓的股票有浦发银行、招商银行、中信证券、海通证券、中国平安、中国太保。表7-2是这6只股票从2014年1月到2019年9月底的部分日收盘价,数据全部保存在Excel文件中。

  2014年1月至2019年9月a股市场6家金融机构股票部分日收盘价。

  来源:上海证券交易所。(单位:人民币元/股)

  假设你是A公司的基金经理助理,日常工作是协助“新金融股票基金”的基金经理对投资的股票进行跟踪分析。根据基金经理的要求,你需要使用Python完成三个编程任务。

  

案例详情

  【任务 1】导入表7-2中这些股票2014年1月至2019年9月每日收盘价的Excel文件,计算每只股票的日收益率、年化平均收益率和年化收益波动率。计算日收益率时需要自然对数。

  【任务 2】为这6只股票构建的投资组合随机生成一个包含每只股票的配置权重(总权重等于1)的数组,并计算用该权重配置的投资组合的年化平均收益率和年化收益波动率。

  【任务 3】随机生成包含2000组不同股票配置权重的数组,计算2000个不同投资组合对应的年化平均收益率和年化收益波动率,以年化收益波动率为横坐标,年化平均收益率为纵坐标绘制成散点图。

  

编程任务

  对于任务2,假设投资组合由N只股票组成,wi代表投资组合中第I只股票的权重(股票市值占投资组合整体市值的比例),E(Ri)代表投资组合中第I只股票的预期收益率(用股票过去收益率的平均值代替)。投资组合的预期收益率E(RP)的表达式可以如下获得:

  同时,假设i表示第I只股票的收益率波动率,Cov(Ri,Rj)表示第I只股票的收益率和第I只股票的收益率之间的协方差。投资组合收益波动率的p表达式如下:

  

编程提示

  

参考代码

  In [1]:将numpy作为np导入

  .进口熊猫作为pd

  .将matplotlib.pyplot作为plt导入

  .来自pylab import mpl

  . mpl.rcParams[font.sans-

  serif] = [KaiTi]

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

  In [2]: stock_price=pd.read_excel(C:/Desktop/金融股(2014年—2019年9月).xlsx, sheet_name= "Sheet1",header=0,index_col=0) #导入外部数据

   ...: stock_price=stock_price.dropna() #删除缺失值的行

  In [3]: (stock_price/stock_price.iloc[0]).plot(figsize=(9,6),grid=True) #将股价按照2014年首个交易日进行归1处理并且可视化

  Out[3]:

  In [4]: stock_return=np.log(stock_price/stock_price.shift(1)) #计算股票的日收益率

   ...: stock_return=stock_return.dropna() #删除缺失值所在的行

  In [5]: return_mean=stock_return.mean()*252 #计算股票的平均年化收益率

   ...: print(2014年至2019年9月的年化平均收益率\n,return_mean.round(6)) #保留小数点后6位

  2014年至2019年9月的年化平均收益率

  浦发银行 0.042824

  招商银行 0.211223

  海通证券 0.043759

  华泰证券 0.138177

  中国平安 0.134000

  中国太保 0.117563

  dtype: float64

  In [6]: return_volatility=stock_return.std()*np.sqrt(252) #计算股票的年化收益波动率

   ...: print(2014年至2019年9月的年化收益波动率\n,return_volatility.round(6))

  2014年至2019年9月的年化收益波动率

  浦发银行 0.282428

  招商银行 0.296238

  海通证券 0.396386

  华泰证券 0.449228

  中国平安 0.465064

  中国太保 0.359268

  dtype: float64

  从下图不难看出,由于6只股票均是金融类股票,因此在整体的走势方面存在一定的趋同性。但是每只股票的平均年化收益率则存在较大差异,其中,招商银行的平均收益率最高,浦发银行的收益率则最低。同时,从平均年化波动率来看,银行股最低,中国平安则最高。

  

  

2014年1月至2019年9月期间6只金融股股价走势图(股价在2014年首个交易日做归1处理)

  

  

任务2的代码

  

In [7]: x=np.random.random(len(return_mean.index)) #从均匀分布中随机抽取6个从0到1的随机数

  In [8]: w=x/np.sum(x) #生成随机权重的一个数组

   ...: w #查看生成的随机权重数组

  Out[8]:

  array([0.24372614, 0.03925093, 0.20889395, 0.20843467, 0.23808734, 0.06160696])

  需要注意的是,由于是通过随机生成的数组,因此每一次得到的随机权重数组是不相同的,但是权重的合计数是等于1。

  

In [9] : return_cov=stock_return.cov()*252 #计算每只股票收益率之间的协方差

   ...: return_cov

  Out[9] :

   浦发银行 招商银行 海通证券 华泰证券 中国平安 中国太保

  浦发银行 0.079765 0.054347 0.055693 0.065324 0.062048 0.056216

  招商银行 0.054347 0.087757 0.058148 0.066847 0.078228 0.072074

  海通证券 0.055693 0.058148 0.157122 0.147365 0.092994 0.086569

  华泰证券 0.065324 0.066847 0.147365 0.201806 0.102020 0.096885

  中国平安 0.062048 0.078228 0.092994 0.102020 0.216285 0.110579

  中国太保 0.056216 0.072074 0.086569 0.096885 0.110579 0.129074

  In [10]: return_corr=stock_return.corr() #计算每只股票收益率之间的相关系数

   ...: return_corr

  Out[10]:

   浦发银行 招商银行 海通证券 华泰证券 中国平安 中国太保

  浦发银行 1.000000 0.649575 0.497483 0.514872 0.472398 0.554035

  招商银行 0.649575 1.000000 0.495191 0.502310 0.567816 0.677201

  海通证券 0.497483 0.495191 1.000000 0.827580 0.504459 0.607889

  华泰证券 0.514872 0.502310 0.827580 1.000000 0.488321 0.600306

  中国平安 0.472398 0.567816 0.504459 0.488321 1.000000 0.661823

  中国太保 0.554035 0.677201 0.607889 0.600306 0.661823 1.000000

  In [11]: Rp=np.dot(return_mean,w) #计算投资组合的年化收益率

   ...: Vp=np.sqrt(np.dot(w,np.dot(return_cov,w.T))) #计算投资组合的年化收益波动率

   ...: print(用随机生成的权重计算得到投资组合的年化收益率,round(Rp,6))

   ...: print(用随机生成的权重计算得到投资组合的年化收益波动率,round(Vp,6))

  用随机生成的权重计算得到投资组合的年化收益率 0.095816

  用随机生成的权重计算得到投资组合的年化收益波动率 0.315454

  从以上的相关系数输出结果不难看出,由于都是金融股,因此不同股票之间的相关系数是比较高的,投资组合的分散化效应可能会不太理想。此外,根据随机生成的权重数,得到投资组合的年化收益率为9.581 6%,波动率高达31.545 4%。

  

  

任务3的代码

  

In [12]: x_2000=np.random.random((len(return_mean.index),2000)) #从均匀分布中随机抽取6行、2000列的0到1的随机数

  In [13]: w_2000=x_2000/np.sum(x_2000,axis=0) #生成包含2000组随机权重的数组

   ...: w_2000

  Out[13]:

  array([[0.19250103, 0.01845509, 0.01765565, ..., 0.33889512, 0.0463229 ,

   0.26199306],

   [0.07263106, 0.00973181, 0.13055863, ..., 0.03118864, 0.20474944,

   0.06271757],

   [0.09534805, 0.30004746, 0.18353861, ..., 0.13704764, 0.22151316,

   0.12965449],

   [0.09386134, 0.16068824, 0.212781 , ..., 0.02455051, 0.13288678,

   0.03435049],

   [0.25893945, 0.31725497, 0.14183784, ..., 0.00825204, 0.03630956,

   0.14306535],

   [0.28671907, 0.19382242, 0.31362827, ..., 0.46006606, 0.35821817,

   0.36821904]])

  In [14]: Rp_2000=np.dot(return_mean,w_2000) #计算投资组合不同的2000个收益率

   ...: Vp_2000=np.zeros_like(Rp_2000) #生成存放投资组合2000个不同收益波动率的初始数组

  In [15]: for i in range(len(Rp_2000)): #用for语句快速计算投资组合2000个不同的收益波动率

   ...: Vp_2000[i]=np.sqrt(np.dot((w_2000.T)[i],np.dot(return_cov,w_2000[:,i])))

  In [16]: plt.figure(figsize=(9,6))

   ...: plt.scatter(Vp_2000,Rp_2000)

   ...: plt.xlabel(u波动率,fontsize=13)

   ...: plt.ylabel(u收益率,fontsize=13,rotation=90)

   ...: plt.xticks(fontsize=13)

   ...: plt.yticks(fontsize=13)

   ...: plt.title(u投资组合收益率与波动率的关系, fontsize=13)

   ...: plt.grid(True)

   ...: plt.show()

  下图中的散点就是本次随机生成2 000组不同投资权重所对应的投资组合收益率和波动率。通过映射至纵坐标的数值,可以目测出投资组合的最高年化收益率超过16%,最低年化收益率则略低于7%;通过映射至横坐标的数值可以发现,投资组合的最高波动率接近37%,最低波动率则接近26%。

  

  

在随机生成的2000组不同投资权重条件下投资组合的收益率与波动率的关系图

  以上就是基于Python实现股票收益率分析的详细内容,更多关于Python股票收益率的资料请关注盛行IT软件开发工作室其它相关文章!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • 2020年高考成绩分布表,2020年高考成绩统计,数据分析2020年全国各省高考成绩分布情况
  • ,,python实现数据分析与建模
  • python3 数据分析,python数据分析课堂
  • 《数据思维》,数据分析的思维导图
  • python数据分析就业方向,python数据分析毕业论文
  • python数据分析数据清洗,python中数据清洗
  • 基于Python的数据可视化,python数据分析及可视化处理的第三方库
  • 利用python进行数据分析豆瓣,python数据分析基础和利用python进行数据分析
  • python数据分析数据清洗,用python进行数据清洗
  • python对excel表格数据的统计和分析,python进行excel数据分析
  • 从零开始学Python数据分析与挖掘,自学python数据分析
  • python数据分析结构思维导图,python组合数据类型思维导图
  • 关联规则分析案例,关联规则数据分析题,关联规则的实际案例数据
  • 数据分析与商业数据分析,120个Excel商业数据分析实战案例
  • python数据分析excel读写,python 读取excel数据
  • 留言与评论(共有 条评论)
       
    验证码: