首先导入tushare

先读取股票月收益率数据,在用#避免多次读取。

这是通过tushare获取的茅台2015年到20年的股票数据。

这是获取的上交所的数据。

下面是全部的代码。


import tushare as ts
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib import ticker
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)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 轴标签文本的格式
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
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. 金融数据分析(八)计算股票的超额收益率

    案例(三)简单金融数据分析 项目二:计算股票的超额收益率 设计一个程序,计算股票的季收益率和年收益率,并计算单支股票收益率相对同一时期股票市场平均收益率的超额收益率(即相对收益率). 本项目采用tus ...

  2. R语言使用quantmod包的getSymbols函数从指定金融数据源获取指定时间段的股票数据、计算除权除息之后的开盘价收盘价收益率和收盘价收益率、保持不变

    R语言使用quantmod包的getSymbols函数从指定金融数据源获取指定时间段的股票数据.计算除权除息之后的开盘价收盘价收益率和收盘价收益率.保持不变 目录 R语言使用quantmod包的get ...

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

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

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

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

  5. 量化软件怎样计算股票概率?

    大家都知道量化交易的基础是计算股票概率,多数量化公司都是依据K线指标来计算最佳的盈利值,从而制定胜率比较大的交易策略,不过通常这些策略有3天.5天.10天不等,因为这个天数就是相应策略达到最大胜率或者 ...

  6. python:计算股票 CAPM

    CAPM模型介绍 资本资产定价模型(CAPM)在投资方面经常被用来投资策略的是否有效,β 值在投资方面也有一定的参考价值, 今天我们就带领大家简单实现对单只股票的CAPM计算. 在CAPM模型中,个股 ...

  7. 市场收益率预期与远期收益率

    目录 Market's Rate Expectations and Forward Rates INTRODUCTION ALGEBRAIC RELATIONS BETWEEN SPOT AND FO ...

  8. 【指标计算】老妈再也不担心我的指标算不好了(教你用MyTT、TA-Lib、Pandas TA计算股票指标,附源代码)

    教你用MyTT.TA-Lib.Pandas TA计算股票指标,附源代码 前言 一.目前Python流行的几款股票行情分析指标计算库 1. MyTT 2. Ta-lib 3. Pandas TA 二.指 ...

  9. 用聚类算法计算股票的支撑位和阻力位

    本文将向您展示如何使用不同的聚类算法计算股票支撑位和阻力位. 股票数据 - 我在 mongoDB 数据库中有股票数据.您还可以免费从雅虎财经获取这些数据. Python 连接 MongoDB 设置 I ...

最新文章

  1. IBM X3650 M2 BR10i卡的阵列配置方法
  2. pycharm 皮肤主题及个性化设置
  3. 不可不知的C#基础 1. -- Extension 扩展方法
  4. pycharm mysql安装_PyCharm安装连接MySQL
  5. 洛谷 P2341 [HAOI2006]受欢迎的牛 解题报告
  6. FISCO BCOS Solidity 智能合约Compiler error:Stack too deep, try removing local variables 如何传递超过16个参数变量
  7. html5微信公众号开发,微信开放文档
  8. GNN IS A COUNTER REVISITING GNN FOR QUESTION ANSWERING
  9. 微软量子计算“天使梦”破碎,扬言的巨大胜利终究是一个“错误”
  10. 利用PS实现图片的镜像处理
  11. 记录下我磕磕碰碰的三个月找工作经历,完整PDF
  12. 传说中的“群控”!云控群控、线控群控到底是什么?
  13. 编译原理——说明语句翻译
  14. Spring框架学习(四):聊一聊xml配置和Java配置
  15. 全球10支“超级”战队瓜分高达200万的总奖金,这是京东机器人挑战赛吗?
  16. CSP-J 初赛一轮复习之软件系统与网络基础
  17. 2023年最新前端面试题
  18. Java数据类型-加强理解示例:国王的麦子
  19. 写在腾讯大讲堂演讲之后
  20. 魔塔之拯救白娘子~我的第一个VB6+DX8做的小游戏源码~15开始游戏-地图层次判断

热门文章

  1. barcode4j CODE128/EAN128生成 不定长 msg值 分隔符
  2. em算法 图像模糊检测_基于EM算法的眼底OCT图像反卷积去模糊技术
  3. OSPF虚链路(学习笔记+实验验证)
  4. 遥感数据在植物识别的应用
  5. 2021-2025年中国非结构蛋白4B行业市场供需与战略研究报告
  6. 蛋白结构分析实操教程
  7. 【软件教程】如何将夸克网盘挂载为本地磁盘【Docker+AList+RaiDrive】
  8. python多张图叠加为一张_python实现多张图片拼接成大图
  9. 端口扫描程序设计c语言,主机端口扫描程序设计.doc
  10. 全球及中国同步相量测量装置行业研究及十四五规划分析报告(2022)