python金融:从tushare金融数据的获取到运用pandas数据清洗、处理、加工与金融波动率、年化收益率、最大回撤、夏普比率等指标计算与数据可视化

python在处理金融数据时,具有很多优点:一是语法简单,可以轻松上手;二是免费与开源,使用python不像使用matlab需要购买软件授权,节约成本开支;三是具有强大的第三方模块支持,从numpy到pandas、再到人工智能,都有成熟开源模块提供支撑;最后一个是与金融进行了深度的结合,从行情获取到投资策略开发再到风控,都有广泛的应用场景。这篇文章演示了从数据获取到处理的一个简单的、完整的业务流程,主要面向python金融初学者。

一、Tushare的安装与接口调用方法

(一)模块安装

安装相对比较简单,使用 pip install tushare 指令在终端中即可正常安装。

(二)模块调用

导入tushare 包:  import tushare as ts

1.查看安装版本

print(f"tushare 版本: {ts.__version__}")

2.获取tushare的token

登录到www.tushare.org网站之后,点击用户中心,上面有一个‘接口token’选项卡,点击复制token。

python金融:从tushare金融数据的获取到运用pandas数据清洗、处理、加工与金融波动率、年化收益率、最大回撤、夏普比率等指标计算与数据可视化_第1张图片

3.查询所需数据接口信息

从tushare.pro数据平台——数据接口——沪深股票——基础数据—— 股票列表中查看数据获取方式。(注意,tushare pro数据接口数据需要积分才能获取,大约需要2000积分才有权限,对应需要捐助大约人民币200元,需要免费使用数据接口的注意查找其他方法。)

python金融:从tushare金融数据的获取到运用pandas数据清洗、处理、加工与金融波动率、年化收益率、最大回撤、夏普比率等指标计算与数据可视化_第2张图片

python金融:从tushare金融数据的获取到运用pandas数据清洗、处理、加工与金融波动率、年化收益率、最大回撤、夏普比率等指标计算与数据可视化_第3张图片

python金融:从tushare金融数据的获取到运用pandas数据清洗、处理、加工与金融波动率、年化收益率、最大回撤、夏普比率等指标计算与数据可视化_第4张图片

3. 数据获取

(1)通过数据接口Tushare(pro)获取目前处于上市状态的公司列表

包含:市场类型(market),交易所代码(exchange),股票名称(name),股票代码(ts_code),地区(area),行业(industry)

import tushare as ts
import pandas as pd
import seaborn as sb
import numpy as np 
import datetime as dt

print(f"tushare 版本: {ts.__version__}",'\n')
token = '******************************************' 
ts.set_token(token)
pro = ts.pro_api()
# 获取上市状态公司列表
df =  pro.stock_basic(exchange='', list_status='L', fields='market,exchange,name,ts_code,area,industry')
print(df.head())

结果如下:

python金融:从tushare金融数据的获取到运用pandas数据清洗、处理、加工与金融波动率、年化收益率、最大回撤、夏普比率等指标计算与数据可视化_第5张图片

(2)获取2023年12月4日所有上市股票的基本面数据(备用列表)

包括动态市盈率(pe)、每股收益(eps)、市净率(pb)、股票代码(ts_code),股票名称(name),将股票名称设置为index

df_alternate = pro.bak_basic(trade_date='20231204',fields='pe,eps,pb,ts_code,name').set_index(['ts_code'])
display(df_alternate)

结果如下:

python金融:从tushare金融数据的获取到运用pandas数据清洗、处理、加工与金融波动率、年化收益率、最大回撤、夏普比率等指标计算与数据可视化_第6张图片

(3)获取股票2020年1月1日到2023年11月30日的日行情数据
stock_str = '600822.SH,600638.SH,300326.SZ,300802.SZ,'
df_4_daily = ts.pro_bar(ts_code=stock_str, start_date='20200101', end_date='20231130')
print(df_4_daily)

结果如下:

python金融:从tushare金融数据的获取到运用pandas数据清洗、处理、加工与金融波动率、年化收益率、最大回撤、夏普比率等指标计算与数据可视化_第7张图片

二、金融数据的预处理

(一)数据聚类,从上市公司列表中筛选出上海市的股票列表

df = df.groupby('area')   # 以地区进行分组
df = df.get_group('上海')

结果如下:

python金融:从tushare金融数据的获取到运用pandas数据清洗、处理、加工与金融波动率、年化收益率、最大回撤、夏普比率等指标计算与数据可视化_第8张图片

(二)根据条件随机选择股票,模拟随机过程

从上海市的股票中任意选取六支股票,其中需包含:任意两支主版的股票(600xxx),任意两支中小版股票(00xxxx),任意两支创业版股票(300xxx)。将六支股票名放到一个列表中。

df1 = df[df['ts_code'].str.startswith(('600'))].sample(2)
df2 = df[df['ts_code'].str.startswith(('00'))].sample(2)
df3 = df[df['ts_code'].str.startswith(('300'))].sample(2)
list6 = df1['ts_code'].to_list() + df2['ts_code'].to_list() + df3['ts_code'].to_list() 
list6

结果如下 :

(三)去掉PE最高的股票和EPS最低的股票

df_6 = df_alternate.loc[list6,['pe','eps','pb']]   # 获取6支票的基本面信息
df_5 = df_6.drop(df_6['pe'].idxmax())
display('去除PE最大的股票后剩余的5支股票:',df_5)
df_4 = df_5.drop(df_5['eps'].idxmin())
display('去除EPS最低值后剩余的4支股票',df_4)

结果如下:

python金融:从tushare金融数据的获取到运用pandas数据清洗、处理、加工与金融波动率、年化收益率、最大回撤、夏普比率等指标计算与数据可视化_第9张图片

(三)数据框df的合并

四支股票行情数据与沪深300数据合并为一个DataFrame。

df_4_daily = df_4_daily.loc[:,['close','open','high','low','vol']].sort_values(by='trade_date', ascending=True)
assets_all = pd.concat([df_4_daily,df_hs300_daily],axis=0).sort_values(by='trade_date', ascending=True)
assets_all.head(10)

结果如下:

python金融:从tushare金融数据的获取到运用pandas数据清洗、处理、加工与金融波动率、年化收益率、最大回撤、夏普比率等指标计算与数据可视化_第10张图片

(四)金融数据透视

主要运用DataFrame中的收盘价‘close’,并将日期设置为Index。

assets_all = assets_all.reset_index().set_index('trade_date')
pivot_table = pd.pivot_table(assets_all, index=['trade_date'], columns=['ts_code'], values=['close'])['close']
display(pivot_table.head())

结果如下:

python金融:从tushare金融数据的获取到运用pandas数据清洗、处理、加工与金融波动率、年化收益率、最大回撤、夏普比率等指标计算与数据可视化_第11张图片

三、金融数据分析与可视化

(一)计算每日收益率并用直方图显示收益率分布

每日收益计算:daily_return = close/close.shift(1) – 1  或 pct_change()

结果如下

python金融:从tushare金融数据的获取到运用pandas数据清洗、处理、加工与金融波动率、年化收益率、最大回撤、夏普比率等指标计算与数据可视化_第12张图片

python金融:从tushare金融数据的获取到运用pandas数据清洗、处理、加工与金融波动率、年化收益率、最大回撤、夏普比率等指标计算与数据可视化_第13张图片

(二)计算各资产之间收益的相关性矩阵,并用热力图表示

结果如下:

python金融:从tushare金融数据的获取到运用pandas数据清洗、处理、加工与金融波动率、年化收益率、最大回撤、夏普比率等指标计算与数据可视化_第14张图片

(三)计算累积收益率并对比收益率情况

accum = daily_rtn.cumsum().apply(np.exp)
display(accum.head(3))
accum.plot(title='Accum Return',figsize=(10,6))

结果如下:

python金融:从tushare金融数据的获取到运用pandas数据清洗、处理、加工与金融波动率、年化收益率、最大回撤、夏普比率等指标计算与数据可视化_第15张图片

(四)收益质量分析-夏普比率的运用

夏普比率计算公式:

sharpe_ratio = (E(r)-Rf)/sigma

夏普比率 = (期望收益 – 无风险收益)/方差

结果:

python金融:从tushare金融数据的获取到运用pandas数据清洗、处理、加工与金融波动率、年化收益率、最大回撤、夏普比率等指标计算与数据可视化_第16张图片

(五)风险分析-最大回撤的计算与展示

df_max = pivot_table.max()   # 计算每只股票的最大净值
df_drawdown = (pivot_table-df_max) / df_max    # 计算每只股票的回撤
df_maximum_drawdown = df_drawdown.min()      # 计算每只股票的最大回撤
df_maximum_drawdown.plot.bar(title='Maximum Drawdown',figsize=(6,3),rot=0) 

结果如下:

python金融:从tushare金融数据的获取到运用pandas数据清洗、处理、加工与金融波动率、年化收益率、最大回撤、夏普比率等指标计算与数据可视化_第17张图片

(六)结果简单分析

从(三)、(四)、(五)的计算结果与图表中,可以清晰的看到,在过去的三年中,600822表现最好,600638其次,300326最差,三个图表一一相互印证,为后面的投资决策分析提供了参考。

结语:

金融分析工作相对比较复杂,单个产品的分析相对比较简单,所以此文主要是针对没有入门的读者进行入门操练用,后面的组合分析,主要要用到时间序列分析方面的金融数学知识、期权分析要计算希腊值,对冲、套利都离要从这些最基本的分析工具走起,道阻且长。

如需这方面的辅导,可以私信联系。

话说看文章经常点评赞的同学,容易有不少女朋友,不信的话可以试试。:)

python金融:从tushare金融数据的获取到运用pandas数据清洗、处理、加工与金融波动率、年化收益率、最大回撤、夏普比率等指标计算与数据可视化_第18张图片

你可能感兴趣的:(python量化金融,数据可视化,信息可视化,python,金融)