案例(三)简单金融数据分析

项目二:计算股票的超额收益率

设计一个程序,计算股票的季收益率和年收益率,并计算单支股票收益率相对同一时期股票市场平均收益率的超额收益率(即相对收益率)。

本项目采用tushare的Python SDK 获取数据
具体方法另开新篇。

# -*- coding: utf-8 -*-
"""
Created on Sat Sept 19 9:30:36 2020@author: mly
"""
import tushare as ts
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib import tickerplt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签startday = '2015-01-01'
endday = '2020-04-01'
tscode = '600519'
tsindx = 'sh'
df1 = ts.get_k_data(tscode, start = startday, end = endday, ktype = 'M')
df2 = ts.get_k_data(tsindx, start = startday, end = endday, ktype = 'M')
df1.to_excel('600519.xlsx',index=False)
df2.to_excel('sh.xlsx',index=False)
df1=pd.read_excel('600519.xlsx',dtype={'code':'str'})
df2=pd.read_excel('sh.xlsx',dtype={'code':'str'})
df = df2[['date', 'close']].copy()
df.rename(columns={'close': 'indclose'}, inplace = True)
df = pd.merge(df[['date', 'indclose']],df1[['date', 'close']], on = 'date', how = 'left')
df.fillna(method = 'ffill',inplace=True) #先后向填充
df.fillna(method = 'bfill',inplace=True) # 再前向填充
# 计算月收益率和累计收益率
df['stk_log_ret'] = np.round(np.log(df['close']/df['close'].shift(1)), 4)
df['ind_log_ret'] = np.round(np.log(df['indclose']/df['indclose'].shift(1)), 4)
df['stk_log_ret'].fillna(method = 'bfill',inplace=True) # 再前向填充
df['ind_log_ret'].fillna(method = 'bfill',inplace=True) # 再前向填充
df['xd_ret']=df['stk_log_ret']-df['ind_log_ret']
df['xd_ret'].fillna(method = 'bfill',inplace=True) # 再前向填充df_list=list(df['stk_log_ret'].values)
print(df['stk_log_ret'].values)ret_year=[]
ret_quarter=[]
for i in range(len(df_list)//3):ret_quarter.append(np.round(df_list[3*i]+df_list[3*i+1]+df_list[3*i+2],4))
ret_quarter1=pd.Series(ret_quarter)for n in range(len(ret_quarter)//4):ret_year.append(np.round(ret_quarter[4*n]+ret_quarter[4*n+1]+ret_quarter[4*n+2]+ret_quarter[4*n+3],4))
ret_year1=pd.Series(ret_year)quarter_list=[]
year=[]
df_index=list(df.date)
for value in df_index:tempvalue = value.split("-")if tempvalue[1] in ['01','02','03']:quarter_list.append(tempvalue[0] + "Q1")year.append(tempvalue[0])elif tempvalue[1] in ['04','05','06']:quarter_list.append(tempvalue[0] + "Q2")year.append(tempvalue[0])elif tempvalue[1] in ['07', '08', '09']:quarter_list.append(tempvalue[0] + "Q3")year.append(tempvalue[0])elif tempvalue[1] in ['10', '11', '12']:quarter_list.append(tempvalue[0] + "Q4")year.append(tempvalue[0])quarter_set = set(quarter_list)
quarter_list = list(quarter_set)
quarter_list.sort()year_set = set(year)
year = list(year_set)
year.sort()
year.pop() #由于2020还没有完整,所以删除ymajorFormatter = ticker.FormatStrFormatter('%.2f%%') # 设置 y 轴标签文本的格式fig = plt.figure(figsize=(14, 24))
ax1 = fig.add_subplot(3, 1, 1)
fig.subplots_adjust(bottom = 0.2)
plt.ylabel('季度收益率')
plt.xticks(rotation = 60)
ax1.yaxis.set_major_formatter(ymajorFormatter) # 显示百分比
ax1.plot(quarter_list, ret_quarter1*100, '-cs', lw = 1.5, label = tscode+' 季度收益率')
ax1.legend(loc = 'upper left')ax2 = fig.add_subplot(3, 1, 2)
plt.ylabel('年收益率')
plt.xticks(rotation = 60)
ax2.yaxis.set_major_formatter(ymajorFormatter) # 显示百分比
ax2.plot(year, ret_year1*100, '-gp', lw = 1.5, label = tscode+' 年收益率')
ax2.legend(loc = 'upper left')ax3 = fig.add_subplot(3, 1, 3)
plt.ylabel('相对收益率')
plt.xticks(rotation = 60)
ax3.yaxis.set_major_formatter(ymajorFormatter) # 显示百分比
ax3.plot(df.date, df['xd_ret']*100, '-rp', lw = 1.5, label = tscode+' 相对市场收益率')
ax3.legend(loc = 'upper left')
plt.show()

运行结果:

金融数据分析(八)计算股票的超额收益率相关推荐

  1. 【金融、量化系列】计算股票历史期望收益率(年化)、收益率标准差(年化)、夏普比率、以及股票之间月收益率的相关系数,并以夏普比率、相关系数为条件筛选股票

    使用akshare获取股票数据,利用月度数据计算每只上证50成分股的股票历史期望收益率(年化).收益率标准差(年化).夏普比率.以及股票之间月收益率的相关系数,并以夏普比率.相关系数为条件筛选股票.挑 ...

  2. 按15分钟取数据_【数量技术宅|金融数据分析系列分享】套利策略的价差序列计算,恐怕没有你想的那么简单...

    更多精彩内容,欢迎关注公众号:数量技术宅 #价差计算的"误区" 我们在测试两个或多个金融资产相互运算产生的策略信号时,免不了需要涉及将不同的价格时间序列,按照时间轴进行对齐,套利策 ...

  3. 【数量技术宅|金融数据分析系列分享】套利策略的价差序列计算,恐怕没有你想的那么简单

    数量技术宅团队在CSDN学院推出了量化投资系列课程 欢迎有兴趣系统学习量化投资的同学,点击下方链接报名: 量化投资速成营(入门课程) Python股票量化投资 Python期货量化投资 Python数 ...

  4. 年化超额收益计算matlab,超额年化收益率的计算 看了一下雪球上一些雪友贴出的基金或大V的历年收益率,发现一些人统计的不对,想说一下: 1.超额收益率 某基金当年收益率为... - 雪球...

    来源:雪球App,作者: Money_Ball,(https://xueqiu.com/1930958059/167803003) 看了一下雪球上一些雪友贴出的基金或大V的历年收益率,发现一些人统计的 ...

  5. 金融数据分析(九)模拟计算以MACD指标买入卖出信号进行股票交易而产生的收益

    案例(三)简单金融数据分析 项目三:计算一年内以MACD指标买入卖出信号进行股票交易而产生的收益 设计一个程序,计算一年内以MACD指标买入卖出信号进行股票交易而产生收益.MACD交易信号为:快线从下 ...

  6. 金融数据分析(一)python预热:字典排序、计算年增长率

    欢迎一起学习金融数据分析 最近进厂实习,互联网金融相关岗位,发现所学的有几分韵味.所以决定抽空列举几个相关案例,学而时习之. 案例(一)python预热 项目中的数据获取和处理大多采用的是python ...

  7. 【数量技术宅|金融数据分析系列分享】为什么中证500(IC)是最适合长期做多的指数

    数量技术宅团队在CSDN学院推出了量化投资系列课程 欢迎有兴趣系统学习量化投资的同学,点击下方链接报名: 量化投资速成营(入门课程) Python股票量化投资 Python期货量化投资 Python数 ...

  8. 《金融数据分析导论:基于R语言》习题答案(第一章)

     <金融数据分析导论:基于R语言>是芝加哥大学的教授Ruey S.Tsay所著,李洪成.尚秀芬.郝瑞丽翻译,机械工业出版社出版,是一本学习R语言和金融数据分析的很好的参考书籍. ** 注 ...

  9. 案例1:金融数据分析----code知识点详解版

    案例1:金融数据分析----code详解版 1.引言 1.1案例分析目标 1.2涉及知识点 1.3案例分析流程 2.数据获取 `涉及知识点:` 2.1安装*tushare*库 2.2获取Token 2 ...

最新文章

  1. python基础-模块导入
  2. python【数据结构与算法】分治算法之大整数乘法
  3. 网站优化之各个页面的关键词密度的把控
  4. 学会python编程容易吗-老男孩学Python编程后薪资待遇高吗?
  5. Spring事务嵌套引发的问题--Transaction rolled back because it has been marked as rollback-only...
  6. 【黑客免杀攻防】读书笔记6 - PE文件知识在免杀中的应用
  7. SpringMVC 上传文件and过滤器
  8. MATLAB中median函数的用法
  9. php统计在线时长,js统计网站运行时长
  10. 10个管理工作时间的小技巧
  11. 中国电信:张志勇辞任公司执行副总裁
  12. POPTEST老李谈Debug和Release的区别(c#) 1
  13. zabbix3.x添加H3C网络设备详解
  14. 一张图学会python应用到excel-Python | 编写一个简单的Excel处理脚本
  15. kmean法和dbscan法的直观比较
  16. 禁用联想笔记本电脑自带的键盘
  17. 3Dmax哪个版本最好用?3dmax哪个版本稳定一点?
  18. 线上数据库增加字段导致服务请求超时总结
  19. 通过3dmax将max文件导出为unity3d可用的带贴图的fbx文件
  20. 安装多个电脑杀毒软件

热门文章

  1. ecmall php传变量,PHP_ECMall支持SSL连接邮件服务器的配置方法详解,首先,主要是ecmall使用的phpmail - phpStudy...
  2. 日文字符中常见的乱码情况---正波浪线“~”
  3. 道路测量计算机程序,求卡西欧计算机4850道路测量程序
  4. MonoRTM模型使用说明
  5. table()函数用法(转载)
  6. 笔记_配置IP测网络
  7. 优启通系统U盘制作及Win10系统安装
  8. 我为什么从事了前端开发
  9. web安全性测试——XSS跨站攻击
  10. ADS1248驱动及相关总结