来源 | 异步
从去年开始,朋友圈的Python课程就非常火,身边好多程序员朋友都开始钻研起了Python。不过最近,身边很多金融行业的朋友也纷纷在朋友圈打起了卡,每天更新自己学习Python的进度。
这实在令我好奇,就专门找朋友一问究竟,朋友对我说:再不学Python都赶不上金融科技时代了!
前不久,中国人民银行印发的《金融科技(FinTech)发展规划(2019-2021年)》(以下简称《规划》)指出,金融科技是技术驱动的金融创新,旨在运用现代科技成果改造或创新金融产品、经营模式、业务流程等,推动金融发展提质增效。
在政策的指导之下,如今,Python被广泛地应用于金融投资和风险管理领域,更多金融机构尝试着把Python与金融的风险管理相结合,用工具来把握金融市场的不确定性。
不仅如此,各大金融机构还将金融科技作为重要战略计划,招募金融科技领域中高端人才。一时间,“金融科技”、“数字化转型”成为当下金融圈的热门关键词。
将技术应用于业务,科技赋能业务。在未来,Python将是金融领域从业者的必备技能。
不仅仅是程序猿,现在即便是数据相关的岗位,招聘需求上都会写上“熟练使用Python”。
那Python在金融科技中到底能发挥多大价值呢?今天异步君就为大家介绍下两个股票投资的案例看看Python的具体应用:
利用Python下载数据并使之可视化
中证指数有限公司的官方网站提供了关于A股股指历史走势数据的下载服务。下面,通过导入已下载的上证综指、深圳成指、中证500和中证800指数在2014年至2018年的日收盘价数据并且通过Python进行可视化,具体的代码如下:
In [1]: import numpy as np
...: import pandas as pd
...: import matplotlib.pyplot as plt
...: from pylab import mpl
...: mpl.rcParams['font.sans-serif'] = ['SimHei']
...: mpl.rcParams['axes.unicode_minus'] = False
In [2]: index_data=pd.read_excel('C:/Desktop/国内A股主要股指的日收盘数据(2014-2018).xlsx',
sheet_name="Sheet1", header=0, index_col=0) #导入外部数据
In [3]: index_data.plot(subplots=True,layout=(2,2),figsize=(10,10),fontsize=13,grid=True)
Out[3]:
▲运用Python绘制A股相关指数日收盘价走势图(2014年至2018年)
利用Python计算投资组合的收益率和波动率
下面通过基于A股市场的一个案例并结合Python演示如何计算一个投资组合的收益率和波动率。
【例】假定投资组合配置了5只A股股票(具体信息见下表),数据是2016年至2018年期间的每个交易日收盘价格。下面就通过Python计算投资组合的预期收益率和年化波动率,具体分为4个步骤。
表:投资组合中的股票信息
股票代码 |
600009 |
600019 |
600837 |
601398 |
601857 |
证券简称 |
上海机场 |
宝钢股份 |
海通证券 |
工商银行 |
中国石油 |
第1步:导入股票的收盘价格数据并且进行可视化,具体的代码如下:
▲股价2016至2018年的走势图(股价在2016年首个交易日归一处理)
In [6]: data=pd.read_excel('C:/Desktop/构建投资组合的5只股票数据(2016-2018).xlsx', sheet_name=
"Sheet1",header=0,index_col=0) #导入外部数据
In [7]: data.head()
Out[7]:
上海机场 宝钢股份 海通证券 工商银行 中国石油
日期
2016-01-04 28.27 5.23 14.28 4.45 8.13
2016-01-05 28.76 5.43 14.33 4.47 8.07
2016-01-06 29.50 5.97 14.58 4.51 8.31
2016-01-07 27.99 5.38 13.23 4.43 7.83
2016-01-08 28.03 5.92 13.51 4.46 7.99
In [8]: (data/data.iloc[0]).plot(figsize=(8,6)) #将股价按首个交易日进行归一处理并可视化
从图中不难发现,这5只股票在2016年至2018年期间的走势存在一定的分化。
第2步:按照前面介绍的式子构建这5只股票日收益率的时间序列,同时进行可视化,代码如下:
▲5只股票日收益率的直方图
In [9]: R=np.log(data/data.shift(1)) #按照对数收益率的计算公式得到股票收益率
...: R=R.dropna() #删除缺省的数据
...: R.describe()
Out[9]:
上海机场 宝钢股份 海通证券 工商银行 中国石油
count 730.000000 730.000000 730.000000 730.000000 730.000000
mean 0.000802 0.000298 -0.000663 0.000237 -0.000165
std 0.019078 0.021775 0.016945 0.012614 0.012901
min -0.105361 -0.104059 -0.098549 -0.067593 -0.082521
25% -0.008854 -0.009260 -0.007118 -0.004662 -0.005274
50% 0.000372 0.000000 -0.000648 0.000000 0.000000
75% 0.008488 0.010305 0.006625 0.006316 0.005203
max 0.088763 0.095648 0.095198 0.059223 0.070761
In [10]: R.hist(bins=40,figsize=(10,10)) #将股票收益率按照直方图方式展示
Out[10]:
第3步:计算每只股票的平均收益率、波动率以及协方差,由于运用的是日数据,因此需要进行年化处理,代码如下:
In [11]: R_mean=R.mean()*252 #计算股票的年化平均收益率
...: print(R_mean)
上海机场 0.202051
宝钢股份 0.075045
海通证券 -0.167117
工商银行 0.059691
中国石油 -0.041456
dtype: float64
In [12]: R_cov=R.cov()*252 #计算股票的协方差矩阵并且年化处理
...: print(R_cov)
上海机场 宝钢股份 海通证券 工商银行 中国石油
上海机场 0.091724 0.022705 0.022375 0.014478 0.017292
宝钢股份 0.022705 0.119489 0.042816 0.023992 0.030719
海通证券 0.022375 0.042816 0.072361 0.021051 0.028913
工商银行 0.014478 0.023992 0.021051 0.040094 0.016621
中国石油 0.017292 0.030719 0.028913 0.016621 0.041939
In [13]: R_corr=R.corr() #计算股票的相关系数矩阵
...: print(R_corr)
上海机场 宝钢股份 海通证券 工商银行 中国石油
上海机场 1.000000 0.216880 0.274644 0.238733 0.278804
宝钢股份 0.216880 1.000000 0.460463 0.346625 0.433946
海通证券 0.274644 0.460463 1.000000 0.390828 0.524851
工商银行 0.238733 0.346625 0.390828 1.000000 0.405316
中国石油 0.278804 0.433946 0.524851 0.405316 1.000000
In [14]: R_vol=R.std()*np.sqrt(252) #计算股票收益率的年化波动率
...: print(R_vol)
上海机场 0.302861
宝钢股份 0.345671
海通证券 0.269000
工商银行 0.200236
中国石油 0.204791
dtype: float64
从以上的相关系数矩阵分析可以看到,这5只股票的收益率之间相关性比较低,因此对于整个组合的分散化效果会比较好。
第4步:运用前面生成的随机权重数计算投资组合的预期收益率和收益波动率,代码如下:
In [15]: R_port=np.sum(weights*R_mean) #计算投资组合的预期收益率
...: print('投资组合的预期收益率:',round(R_port,4))
投资组合的预期收益率: 0.0399
In [16]: vol_port=np.sqrt(np.dot(weights,np.dot(R_cov,weights.T))) #计算投资组合收益波动率
...: print('投资组合收益波动率:',round(vol_port,4))
投资组合收益波动率: 0.177
从以上的分析中可以得到,运用随机生成的权重计算得到该投资组合的预期收益率是3.99%/年,收益波动率达到17.7%/年。
除此之外,Python还可用来绘制可行集、模拟资本市场线及可视化等更多的应用,在金融领域,Python是把锋利好用的“手术刀”,可以帮助我们高效剖析金融风险。
在金融领域里,Python还能够做的事情还有很多,更多内容可以关注一下《基于Python的金融分析与风险管理》。
本书在对Python基础知识进行简洁明晰的介绍之后,直奔“如何在金融投资和风险管理中进行场景应用”这一核心主题,通过大量的典型案例细致地描述应用过程,宛如一位循循善诱的老师手把手地演示每个步骤和细节。
如果你的征途是金融投资或者风险管理,本书将是载你进行星际穿越的那艘永恒号。
查看目录
第1部分 入 门 篇
第1章 Python概览
第2章 结合金融演示Python的基本操作
第2部分 基 础 篇
第3章 结合金融场景演示NumPy模块的操作
第4章 结合金融时间序列演示 Pandas模块的操作
第5章 结合金融场景演示Matplotlib模块的操作
第6章 结合金融场景演示SciPy等模块的操作
第3 部分 提 高 篇
第7章 运用Python分析利率与债券
第8章 运用Python分析股票投资
第9章 运用Python分析期货套期保值
第10章 运用Python分析期权的定价与风险
第11章 运用Python分析期权交易策略
第12章 运用Python测度风险价值
后记
-END-