文章目录

  • 1. 计算目标
  • 2. 关键问题
  • 3. 获取交易日历
  • 4. 逻辑编写

1. 计算目标

我们想知道,一只股票标的,在之前的几年中,每一年的年化收益率是多少?

如果将每年的年化收益率进行求和汇总,截止到今年,总共年化收益率是多少?

2. 关键问题

在做这个计算的时候,遇到了几个小问题:

抛出问题:我们需要拿到这只股票,每一年的收盘价格,那么,这里有2个点,1是我们需要知道每年最后一个交易日是哪天;2是我们需要知道这只股票在每年最后一个交易日的收盘价。

所以为了解决上述问题,我们使用:

  1. 使用tushare,获取历年交易日。这个通过一个接口就可以完成。
  2. 该股票的历史交易日收盘价,这个也比较容易,tushare有,其他相关平台也有。

3. 获取交易日历

先解决第1个问题,直接上代码:

import time
import tushare as ts
ts.set_token('你的tushare token')
pro = ts.pro_api()
# 时间格式 %Y-%m-%d %H:%M:%S
df = pro.query('trade_cal', start_date='20000101', end_date=time.strftime("%Y%m%d", time.localtime()))
print(df)
# 将开盘日历数据保存到csv
df.to_csv('交易日历.csv')

非常的简单,没有什么花里胡哨的,tushare还是牛逼。

4. 逻辑编写

然后,开始写逻辑,进行计算历年收益率情况。

年度收益率计算逻辑:
针对某个股票或基金,按照年为维度,统计每年的涨跌幅。

  1. 加载目标股票或基金历年交易数据。
  2. (T年最晚一个交易日收盘价 - T-1年最晚一个交易日收盘价)/ T-1年最晚一个交易日收盘价,即为当年整年收益率

需要准备的材料:

  1. 交易日历.csv,这个是通过tushare获取的历年交易日(文章上面已经给了源码)
  2. 标的历史每天的开盘收盘价
import datetime
import numpy as np
import pandas as pd
import pymongo
from pandas import DataFrame
from utils.mongo_util.MongoUtil import MongoUtil
from pyecharts import options as opts
from pyecharts.charts import Bar, Pagedef generate_pic(security, security_name):# 1. 取年份数据(由于不同的标的,起始年份不同,所以从该标的的历史数据中,找出第一年)first_day_df = DataFrame(list(MongoUtil().db[security].find({}).sort('date', pymongo.ASCENDING).limit(1)))first_year = int(first_day_df.loc[0]['date'][0:4])now_year = datetime.date.today().yearyears_array = np.arange(first_year, now_year, 1)print(years_array)# 2. 根据年份,取出此年的"交易日历"数据中,最后一个交易日。cal_data = []calender_df = pd.read_csv("交易日历.csv")calender_df = calender_df[calender_df["is_open"] == 1]  # df DataFrame切割# 转换为日期类型calender_df['cal_date'] = calender_df['cal_date'].apply(pd.to_datetime, format='%Y%m%d')# 按照日期的倒序排序calender_df.sort_values(by="cal_date", ascending=True, inplace=True)calender_df = calender_df.set_index("cal_date", drop=False)data_list = []for year in years_array:year_last_day = calender_df.loc[str(year)].tail(1)['cal_date'][0]print(str(year_last_day)[0:10])  # 格式:2000-12-29 00:00:00year_last_day_str = str(year_last_day)[0:10]  # 字符串格式,每年的最后一个交易日security_df = DataFrame(list(MongoUtil().db[security].find({'date': year_last_day_str})))this_year_dict = {'year': str(year), 'year_last_day': year_last_day_str, 'close': security_df['close'][0],'year_rate': 0, 'year_rate_total': 0}data_list.append(this_year_dict)# 当非第一年时,计算此年的收益率if len(data_list) != 1:this_year_close_price = security_df['close'][0]last_year_close_price = data_list[len(data_list) - 2]['close']year_rate = round((this_year_close_price - last_year_close_price) / (last_year_close_price) * 100, 2)data_list[len(data_list) - 1]['year_rate'] = year_ratedata_list[len(data_list) - 1]['year_rate_total'] = round(year_rate + data_list[len(data_list) - 2]['year_rate_total'], 2)print(data_list)# 3. pyecharts 图表数据axis_x = []l2 = []l3 = []for item in data_list:if 'year_rate' in item:axis_x.append(item['year'])l2.append(item['year_rate'])l3.append(item['year_rate_total'])pic = (Bar()  # 绘制柱状图.add_xaxis(axis_x)  # 给x轴添加数据.add_yaxis("%s历年收益率" % (security + security_name), l2)  # 给y轴添加数据.add_yaxis("收益率逐年累加", l3).set_global_opts(title_opts=opts.TitleOpts(title="", pos_bottom='1%', pos_left='center'),yaxis_opts=opts.AxisOpts(name="收益率"),  # 添加纵坐标名称xaxis_opts=opts.AxisOpts(name="年份"),  # 添加横坐标名称toolbox_opts=opts.ToolboxOpts(is_show=True)))# bar.render()  # 默认会在当前目录,生成一个render.html文件return picsecurity_df = DataFrame(list(MongoUtil().db['security_info'].find({})))
#运用page实现多个图例绘制在一张图
page=Page()
#page添加图例
for x in security_df.index:print(x)pic = generate_pic(security_df.loc[x, 'security'], security_df.loc[x, 'name'])page.add(pic)
page.render("年度收益率.html")

至此代码就已经全部结束了,通过运行代码,可能看到如下图表:

分别计算了:中证500、房地产ETF、券商ETF、银行ETF、红利ETF、建设银行、医药ETF、金融ETF、上证指数ETF、沪深300的情况,可以有很直观的判断,帮助在股市中进行决策。

11.1-股票基金历年收益率计算相关推荐

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

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

  2. 【R】【课程笔记】04+05 数据预处理+收益率计算

    本文是课程<数据科学与金融计算>第4-5章的学习笔记,主要介绍金融数据处理.收益率计算和R与C++调用,用于知识点总结和代码练习,Q&A为问题及解决方案. 往期回顾: 博文 内容 ...

  3. 收益率计算年利率以及每期租金

    目录 前提 代码 计算逻辑类 计算实体类 工具类 还款表实体类 测试类 输出结果 通过Excel校验 总结 前提 在我们上个版本迭代中.有个需求是通过给定的收益率计算年利率以及租金.本息拆分的需求.如 ...

  4. Java黑皮书课后题第6章:6.11(金融应用:计算酬金)编写方法,利用编程练习题5.39中的方法计算酬金。方法头如下所示。编写程序,显示下面表格

    6.11(金融应用:计算酬金)编写方法,利用编程练习题5.39中的方法计算酬金.方法头如下所示.编写程序,显示下面表格 题目 题目描述与运行示例 编程练习题5.39(非本题) 破题 5.39处理 主方 ...

  5. 用Java根据π/4=1-1/3+1/5-1/7...计算pi的值

    计算π的值 利用公式π/4=1-1/3+1/5-1/7-+1^(k-1)(1/(2k-1))计算pi public class HQ01{//根据公式π/4=1-1/3+1/5-1/7...计算pi的 ...

  6. 在非对称加密算法RSA中,假设“大”素数p=5,q=11,试给出计算过程。

    文章目录 1. 题目在非对称加密算法RSA中,假设"大"素数p=5,q=11,试给出计算过程. 2. 分析步骤 3. 抄作业简单粗暴看这里 4. 参考 1. 题目在非对称加密算法R ...

  7. 11月22日弹性计算跟您在广州不见不散

    11月22日,广州云栖大会,弹性计算针对广州专场诚邀各位嘉宾亲临 时间:2017年11月22日,13:30 地点:广州香格里拉酒店三层满江红厅 弹性计算与网络专场特意申请20张云栖大会电子商务票针对企 ...

  8. 2017双11技术揭秘—阿里数据库计算存储分离与离在线混布

    摘要: 随着阿里集团电商.物流.大文娱等业务的蓬勃发展,数据库实例以及数据存储规模不断增长,在传统基于单机的运维以及管理模式下,遇到诸多如成本,调度效率等问题,因此,2017年首次对数据库实现计算存储 ...

  9. Python股票数据分析——策略、收益率计算

    技术分析指标 移动平均值.波动率.交易量 基于历史价格信息的技术分析是金融专业人士和感兴趣的业余人士感兴趣的典型任务.在维基百科上可以找到如下定义: 在金融学中,技术分析是通过对过去市场数据(主要是价 ...

最新文章

  1. 为甚serve 修改dev不能跑_初探逆向将电缆调制解调器改装为SDR
  2. Stimulsoft Reports.Net基础教程(九):创建图表报表①
  3. 重置密码遇到ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using passwor:yes)问题
  4. Day02-深度学习原理与使用方法
  5. IT项目经理学习-德鲁克时间管理
  6. Java黑皮书课后题第11章:11.3(Account类的子类)在编程练习题9.7中定义了一个Account类来对一个银行账户建模。一个账户有账号、余额、年利率、开户日期等属性,以及存款和取款等方法
  7. 使用SQL Server 2017 Docker容器在.NET Core中进行本地Web API开发
  8. layui移动开发_LayUI后台管理与综合示例
  9. 14.12.1类的特殊成员1
  10. poj 2442 Sequence
  11. 如何在在线直播网站源码中,实现视频连麦直播?
  12. 金盾加密视频破解翻录限制工具使用教程
  13. 微猫恋爱撩妹术V2 4.1.0-多开版
  14. 普元eos运行环境下的逻辑流及页面流反编译工具
  15. Python pyserial 串口开发
  16. 解决Cannot find module ‘./index.module.scss‘ or its corresponding type declarations.ts(2307)
  17. 创建一个微信小程序——如何注册账号,安装微信开发者工具,创建一个小程序(详细步骤版)
  18. 卸载 HI 英文输入法( InputHelp )
  19. VirtualBox 报错VERR_VD_IMAGE_READ_ONLY
  20. 安卓手机修改IMEI方法

热门文章

  1. 操作系统中用户态和内核态(系统态)是什么?用户态如何变成内核态?
  2. mt4双线macd_金叉死叉?高手教你MT4的MACD用法
  3. OpenStack落地德国大众:锐意创新还是孤注一掷?
  4. 惠普HP Deskjet 3054 - J610a 一体机驱动
  5. java开发社交网站_(转)强烈推荐:著名社交网站LinkedIn的Java架构技术
  6. 中国芯片迎难而上,4纳米芯片量产,美媒:美国或肠子都悔青了
  7. 质子交换膜燃料电池流场设计(节选自课程设计作业)
  8. 360兼容模式,搜狗等奇葩浏览器下无法正常渲染的问题
  9. 2020年11月编程排行出炉,Java市场占有率仍第一
  10. UEFI 2 Overview