2.1.1 预期年化收益率

news2024/11/15 11:04:09

跳转到根目录:知行合一:投资篇

已完成:
1、投资&技术
  1.1.1 投资-编程基础-numpy
  1.1.2 投资-编程基础-pandas
  1.2 金融数据处理
  1.3 金融数据可视化
2、投资方法论
  2.1.1 预期年化收益率
3、投资实证
  [3.1 2023这一年] 被鸽

文章目录

  • 1. 知识准备
    • 1.1. 使用qstock取数
    • 1.2. 如何计算4%的年华收益率?
    • 1.3. pyecharts上画收盘折线图
    • 1.4. 如何在走势图上画直线?
  • 2. 完整案例
  • 3. 各标的走势对比
    • 3.1. 沪深300
      • 3.1.1. 沪深300 2016-02-25
      • 3.1.2. 沪深300 2014-05-23
    • 3.2. 中证500
      • 3.2.1. 中证500 2016-02-25
      • 3.2.2. 中证500 2014-05-23
    • 3.3. 创业板ETF 159915 2012-12-11
  • 4. 总结

本文需要探讨的是:

  1. 在我大A,预期的年华收益多少是合适的呢?
  2. 横评沪深300、中证500、创业板ETF,其内在的年华收益率多少?
  3. 有没有办法能简单的评价出此标的的内在收益率?

1. 知识准备

1.1. 使用qstock取数

这个比较简单 ,在之前的文章中已经有更加详细的描述(1.2 金融数据处理),这里就是简单的叙说一下:

import qstock as qs
# 如果没有安装qstock,执行:
# pip install qstock
# pip install pywencai

df=qs.get_data('510300')   # 获取的是510300的所有日线历史行情数据,自己保存,不用每次都去拉,做一些简单算法、回测是够用了。
df.to_csv('510300.csv')
print(df)

                name    code   open   high    low  close    volume  \
date                                                                 
2012-05-28  沪深300ETF  510300  1.951  2.007  1.944  2.004  12775188   
2012-05-29  沪深300ETF  510300  2.002  2.061  2.002  2.044   7149490   
2012-05-30  沪深300ETF  510300  2.042  2.047  2.033  2.036   2658872   
2012-05-31  沪深300ETF  510300  2.021  2.045  2.013  2.030   1781560   
2012-06-01  沪深300ETF  510300  2.029  2.060  2.020  2.030   1793500   
...              ...     ...    ...    ...    ...    ...       ...   
2023-12-29  沪深300ETF  510300  3.488  3.505  3.482  3.499  25188735   
2024-01-02  沪深300ETF  510300  3.502  3.502  3.451  3.453   9429306   
2024-01-03  沪深300ETF  510300  3.446  3.460  3.428  3.443  10617503   
2024-01-04  沪深300ETF  510300  3.442  3.442  3.387  3.413  16661525   
2024-01-05  沪深300ETF  510300  3.404  3.439  3.377  3.396  16996697   

                turnover  turnover_rate  
date                                     
2012-05-28  3.285755e+09           3.49  
2012-05-29  1.875593e+09           1.96  
2012-05-30  7.017258e+08           0.73  
2012-05-31  4.681931e+08           0.49  
2012-06-01  4.734772e+08           0.49  
...                  ...            ...  
2023-12-29  8.806299e+09           6.89  
2024-01-02  3.269677e+09           2.58  
2024-01-03  3.654758e+09           2.90  
2024-01-04  5.674870e+09           4.56  
2024-01-05  5.796964e+09           4.65  

[2826 rows x 9 columns]

1.2. 如何计算4%的年华收益率?

什么叫年化4%?这么理解,今年1月1日是1块钱,到年底的时候,是多少钱?1*(1+0.04) = 1.04元。

假设今年一共是250个交易日(所以250日线很重要),所以照理来说,每个交易日上涨大约就是 1.04/250 = 0.00416元。

1.3. pyecharts上画收盘折线图

我们要画的折线图,其实是沪深300的收盘价走势图。这个也比较容易,在之前 1.3 金融数据可视化中第1.2.2小节已经画过了,很简单。这里也为了不跳出,把代码贴出来。

#导入数据分析和量化常用库
import pandas as pd
import numpy as np
#导入pyecharts
from pyecharts.charts import *


df=qs.get_data('510300')

g=(Line()
  .add_xaxis(df.index.strftime('%Y-%m-%d').tolist())
  .add_yaxis('',df.close))
g.render_notebook()

就这么点代码,感谢cctv,错了,感谢python、pandas、pyecharts。

后面的完整案例,就是在此基础上,进一步优化了图形上的一些配置,可以在鼠标移动到上面hover的时候,能显示出来对应的点位信息,而已。

1.4. 如何在走势图上画直线?

pyecharts画直线,其实也是很简单的。

from pyecharts import options as opts
from pyecharts.charts import Line
import random
 
# 创建数据集合
x_data = [i for i in range(10)]
# y_data = [random.randint(-50, 50) for _ in x_data]
y_data = 2 * x_data
 
# 初始化 Line 对象
line = (Line()
        .add_xaxis(x_data)
        .add_yaxis("", y_data))
 
# 设置全局配置项
line.set_global_opts(title_opts=opts.TitleOpts(title="直线图"),
                     toolbox_opts=opts.ToolboxOpts())
 
line.render_notebook()

2. 完整案例

代码主要的流程:

  1. 定义要获取的标的,比如沪深300,代码510300。使用qstock获取日线历史行情数据。

  2. 直线画线的其实时间,比如可以定在 2016-02-25。(定在哪里,这个就见仁见智了,老股民画线有自己的心得。)

    当然,我们可以自己定起始时间。

  3. 根据我们想要的年华,比如4%,6%,8%,分别计算在此复合年化下的直线数值,以便在pyecharts画线的时候用到。

  4. 画图,收盘价折线图 + 4%直线 + 6%直线 + 8%直线。

from pyecharts.charts import Line
import pandas as pd
import pyecharts.options as opts
import qstock as qs

# 在线选色 http://tools.jb51.net/static/colorpicker/
security = '510300' # 510300   510500
start_date_str = '2016-02-25'  # 2016-02-25   2014-05-23
lines = [
    {'start_date_str': start_date_str, 'number_of_percent': 0.04, 'name_of_line': '预测值4%', 'color': '#cc0099'},
    {'start_date_str': start_date_str, 'number_of_percent': 0.06, 'name_of_line': '预测值6%', 'color': '#16c79a'},
    {'start_date_str': start_date_str, 'number_of_percent': 0.08, 'name_of_line':  '预测值8%', 'color': '#00d7ff'}
]


def calculate_new_col(df, number_of_percent, name_of_line, start_date_str):
    end = begin = df.loc[start_date_str, 'close']  # 2.6142 获取起始日的收盘价
    rate = number_of_percent  # 0.06  获取收益率预期值
    year = len(df.loc[start_date_str:].index) / 250  # 计算有多少年,以便计算收益率下的终值
    end *= ((1 + rate) ** year)  # 终值,**是次方运算
    slot = len(df.loc[start_date_str:].index) - 1  # 有多少个时间区间,将总收益平分(直线,是等差数列,平分总收益)
    per_step = (end - begin) / slot  # 将总收益平分(直线,是等差数列,平分总收益),每个slot递增 per_step
    # 计算新列(比如年化4%)的值
    row_keys = df.loc[start_date_str:].index
    this_day_value = begin
    for row_key in row_keys:
        df.loc[row_key, name_of_line] = this_day_value
        this_day_value = this_day_value + per_step
    df[name_of_line] = df[name_of_line].round(3)


# 加载数据
df = qs.get_data(security)
# 计算线条所需的数据
for item in lines:
    calculate_new_col(df=df, number_of_percent=item['number_of_percent'], name_of_line=item['name_of_line'], start_date_str=item['start_date_str'])
x_data = df.index.date.tolist()  # x轴所需的数据
close_data = df['close'].values.tolist()  # 收盘价数据

line = (
    Line(init_opts=opts.InitOpts(width="1400px", height="700px"))   # 设置图表大小
    .add_xaxis(x_data)  # 设置x轴, 需要加tolist

    .add_yaxis("收盘价",
                close_data,
                is_connect_nones=True,# 缺失值的处理
                symbol_size=10, # 标识的大小
                is_smooth=True,# 线条样式  , 是否设置成圆滑曲线
                linestyle_opts=opts.LineStyleOpts(width=1,color ='#000000',type_="solid"), # 线条颜色和宽度
                label_opts=opts.LabelOpts(is_show=True,position='top',color ='#000000'),# 文字标签的位置和颜色
                itemstyle_opts=opts.ItemStyleOpts(border_width=3, border_color="#000000", color="#000000"),# 标识的颜色和宽度
                )

    .set_global_opts(title_opts=opts.TitleOpts(title="%s趋势分析" % security,subtitle="", # 主标题
                                               title_textstyle_opts=opts.TextStyleOpts(font_size=30), #主标题字体大小
                                               pos_left='6%'), # 主标题位置
                     legend_opts=opts.LegendOpts(is_show=True,# 是否显示图例
                                                 pos_top="3%",# 图例位置
                                                 item_width=15,# 宽度
                                                 item_height=15,#高度
                                                 item_gap=10,# 图例间隔
                                                 textstyle_opts=opts.TextStyleOpts(font_size=15)), # 图例文字大小
                     tooltip_opts=opts.TooltipOpts(trigger="axis"),# 提示框触发, 按坐标轴
                     yaxis_opts=opts.AxisOpts(type_="value",
                                              axistick_opts=opts.AxisTickOpts(is_show=False),   # 刻度线不显示
                                              axisline_opts=opts.AxisLineOpts(is_show=False),   # y轴线不显示
                                              splitline_opts=opts.SplitLineOpts(is_show=True),   # y轴网格线显示
                                              axislabel_opts=opts.LabelOpts(formatter="{value} 元")),# y轴刻度文字
                     xaxis_opts=opts.AxisOpts(axistick_opts=opts.AxisTickOpts(is_align_with_label=True),
                                              is_scale=False,
                                              boundary_gap=False))
    )

for item in lines:
    line_data = df[item['name_of_line']].values.tolist()
    line.add_yaxis(item['name_of_line'],
                   line_data,
                   is_connect_nones=True,
                   #symbol="triangle" 标识的样式  三角形
                   symbol_size=10, # 标识的大小
                   is_smooth=True, # 线条样式  , 是否设置成圆滑曲线
                   linestyle_opts=opts.LineStyleOpts(width=3,color=item['color']),  # 线条颜色和宽度
                   label_opts=opts.LabelOpts(is_show=True,position='top',color=item['color']),# 文字标签的位置和颜色
                   itemstyle_opts=opts.ItemStyleOpts(border_width=3, border_color=item['color'], color=item['color']),  # 标识的颜色和宽度
                   )

# 在pycharm中,保存html
# line.render("%s趋势分析.html" % security)
# 在notebook中,直接显示出来
line.render_notebook()


上述代码,可得绘图如下:

这个图,真是好看啊,4%是妥妥的~即使是在如此行情的2024年,也是没有跌破啊。

3. 各标的走势对比

下面就是分别调整2个参数:

security = ‘510300’
start_date_str = ‘2016-02-25’

其实还有下面的参数可以配:number_of_percent,这里只是3条线,4%,6%,8%,也可以再加10%的等等。

lines = [
    {'start_date_str': start_date_str, 'number_of_percent': 0.04, 'name_of_line': '预测值4%', 'color': '#cc0099'},
    {'start_date_str': start_date_str, 'number_of_percent': 0.06, 'name_of_line': '预测值6%', 'color': '#16c79a'},
    {'start_date_str': start_date_str, 'number_of_percent': 0.08, 'name_of_line':  '预测值8%', 'color': '#00d7ff'}
]

下面主要就是按照不同的标的,调整起始时间看看画出来的图的效果。也好对这个标的心中有数。

3.1. 沪深300

3.1.1. 沪深300 2016-02-25

标注:沪深300 510300

直线起始时间:2016-02-25

上图,是需要把完整代码前面2行改一下就行:

security = '510300'
start_date_str = '2016-02-25'

3.1.2. 沪深300 2014-05-23

标注:沪深300 510300

直线起始时间:2014-05-23

上图,是需要把完整代码前面2行改一下就行:

security = '510300'
start_date_str = '2014-05-23'

3.2. 中证500

3.2.1. 中证500 2016-02-25

标注:中证500 510500

直线起始时间:2016-02-25

上图,是需要把完整代码前面2行改一下就行:

security = '510500'
start_date_str = '2016-02-25'

3.2.2. 中证500 2014-05-23

标注:中证500 510500

直线起始时间:2014-05-23

上图,是需要把完整代码前面2行改一下就行:

security = '510500'
start_date_str = '2014-05-23'

3.3. 创业板ETF 159915 2012-12-11

由于创业板波动太大,那我们从远一点2012年开始画图,而且,8%貌似都不能很好的拟合19年和23年的低点,我们加了一条10%的红线!

security = '159915'
start_date_str = '2012-12-11'
lines = [
    {'start_date_str': start_date_str, 'number_of_percent': 0.04, 'name_of_line': '预测值4%', 'color': '#cc0099'},
    {'start_date_str': start_date_str, 'number_of_percent': 0.06, 'name_of_line': '预测值6%', 'color': '#16c79a'},
    {'start_date_str': start_date_str, 'number_of_percent': 0.08, 'name_of_line':  '预测值8%', 'color': '#00d7ff'},
    {'start_date_str': start_date_str, 'number_of_percent': 0.1, 'name_of_line':  '预测值10%', 'color': '#ff0000'}
]

这意味着:如果是从12年12月开始,即使是拿着不动,到现在也能拿到10%的复合年化收益率,还是非常非常可观的。

4. 总结

横评各个标的,如果拉长时间来看,4% ~ 10% 都是有可能的,关键还是在画线的开始时点在哪里。

留一个坑:有没有办法能简单的评价出此标的的内在收益率?其实是有的,只需要将日线行情数据,利用最佳拟合直线来绘制,再分别计算得出其斜率值,这就能大概知道此标的的内在收益率了。这个就留待后面再揭晓实现方案~

但是不管怎么说,这条线,都是向上的,要保持耐心和信心,一定能有所获得!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1364718.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

GPT实战系列-简单聊聊LangChain

GPT实战系列-简单聊聊LangChain LLM大模型相关文章: GPT实战系列-ChatGLM3本地部署CUDA111080Ti显卡24G实战方案 GPT实战系列-Baichuan2本地化部署实战方案 GPT实战系列-大话LLM大模型训练 GPT实战系列-探究GPT等大模型的文本生成 GPT实战系列-Baichuan2等大模…

元数据管理平台对比预研 Atlas VS Datahub VS Openmetadata

大家好,我是独孤风。元数据管理平台层出不穷,但目前主流的还是Atlas、Datahub、Openmetadata三家,那么我们该如何选择呢? 本文就带大家对比一下,这三个平台优势劣势。要了解元数据管理平台,先要从架构说起。 正文共&am…

【算法Hot100系列】合并 K 个升序链表

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老导航 檀越剑指大厂系列:全面总结 jav…

[AutoSar]基础部分 RTE 06 对runnable的触发和SWC的影响

目录 关键词平台说明一、runnable二、RTE的event2.1Mode类型event2.2周期触发类型2.3 数据交互触发 三、internal runnable value四、专属运行区指定五、per_instance memory 关键词 嵌入式、C语言、autosar、Rte 平台说明 项目ValueOSautosar OSautosar厂商vector芯片厂商T…

NGINX 配置本地HTTPS(免费证书)

生成秘钥key,运行: $ openssl genrsa -des3 -out server.key 2048 会有两次要求输入密码,输入同一个即可。输入密码然后你就获得了一个server.key文件。 以后使用此文件(通过openssl提供的命令或API)可能经常回要求输入密码,如果想去除输入密码的步骤可以使用以下命令: $ op…

揭秘六大热门认证考试

六大热门认证考试是什么❓今天为大家详细解读PMP、ACP、CDGA、软考中项、软考高项、NPDP、CISP等热门认证考试,让你不再彷徨👇 1️⃣PMP 👑PMP认证是全qiu公ren的项目管理专业认证,旨在评估项目管理人员在项目过程中所需的知识、技…

基于JAVA的中小学教师课程排课系统 开源项目

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 角色管理模块2.2 课程档案模块2.3 排课位置模块2.4 排课申请模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 角色表3.2.2 课程表3.2.3 排课位置表3.2.4 排课申请表 四、系统展示五、核心代码5.1 查询课程5.2 新增课…

C++/OpenGL应用程序

图像应用程序大部分是 C 编写,OpenGL 调用实现与 3D 渲染相关任务将会使用一些扩展库: GLEW、GLM、GLFW、SOLL2 等。 GLFW 库包含 GLFWwindow 类,我们可以在其上进行 3D 场景绘制。OpenGL 也向我们提供了用于 GLSL 程序载入可编程着色阶段并对其进行编译…

【idea】解决sprintboot项目创建遇到的问题2

本篇是继【idea】解决sprintboot项目创建遇到的问题_java.lang.illegalargumentexception: unable to inst-CSDN博客 目录 一、Dependency com.mysql:mysql-connector-j: not found 二、Could not find artifact org.springframework.boot:spring-boot-maven-plugin:pom:4.0…

Android RecyleView 使用 Gilde 加载图片引发的卡顿问题

Glide 是一个用于 Android 的图片加载和缓存库。它可以帮助开发者快速、高效地加载网络图片、本地文件和视频帧,并且能够自动缓存图片数据,减少网络请求。Glide 具有良好的性能和易用的 API,支持常见的图片加载需求,例如图片压缩、…

springboot 房屋租赁系统

spring boot mysql mybatis 前台后端

JavaWeb——后端之maven

三、后端Web开发 1. Maven 1.1 概念 概念: 一款用于管理和构建java项目的工具,是apache下的一个开源项目 作用: 依赖管理:jar包,避免版本冲突问题——不用手动导jar包,只需要在配置文件(pom…

项目管理工具Maven

Maven Java 是第一大编程语言和开发平台。它有助于企业降低成本、缩短开发周期、推动创新以及改善应用服务。如今全球有数百万开发人员运行着超过 51 亿个 Java 虚拟机,Java 仍是企业和开发人员的首选开发平台。 课程内容的介绍 1. Maven基础内容 2. Maven的依赖管…

使用jasypt进行配置文件加密

1、导入依赖 <dependency> <groupId>com.github.ulisesbocchio</groupId> <artifactId>jasypt-spring-boot-starter</artifactId> <version>3.0.2</version> </dependency> 可能出现的问题 &#xff1a; 依赖不要从pdf中直…

Unity 0GC或者最大限度降低GC方案

文章目录 GC带来的问题性能瓶颈玩家体验受损 优化关键点1. **对象池技术**&#xff1a;2. **内存管理优化**&#xff1a;3. **UGUI优化**&#xff1a;4. **ECS架构下的优化**&#xff1a;5. **资源管理**&#xff1a;6. **自定义数据结构与算法**&#xff1a;7. **开启增量GC&a…

分布式事务理论及Seata实践

分布式事务简介 事务是指作为单个逻辑工作单元执行的一系列操作&#xff0c;要么完全地执行&#xff0c;要么完全地不执行。 事务处理可以确保除非事务性单元内的所有操作都成功完成&#xff0c;否则不会永久更新面向数据的资源。事务的四个特征&#xff08;ACID&#xff09; …

算法第十三天-组合总和Ⅱ

组合总和Ⅱ 题目要求 解题思路 按顺序搜索&#xff0c;设置合理的变量&#xff0c;在搜索的过程中判断是否会出现重复集结果。重点理解对输入数组排序的作用和参考代码中 大剪枝和小剪枝 的意思 这道题域上一问的区别在于&#xff1a; 第39题&#xff1a;candidates中的数字…

构建异地企业网络互联的高效路径

在当今数字化浪潮中&#xff0c;企业的业务拓展已不再受限于地理位置。为了在全球竞争中立于不败之地&#xff0c;越来越多的企业选择在不同城市设立分支机构&#xff0c;构建异地网络&#xff0c;实现高效的协同办公。本文将深入探讨在北上广等经济发达地区&#xff0c;如何通…

嵌入式培训机构四个月实训课程笔记(完整版)-Linux系统编程第二天-Linux开发板外设开发(物联技术666)

更多配套资料CSDN地址:点赞+关注,功德无量。更多配套资料,欢迎私信。 物联技术666_嵌入式C语言开发,嵌入式硬件,嵌入式培训笔记-CSDN博客物联技术666擅长嵌入式C语言开发,嵌入式硬件,嵌入式培训笔记,等方面的知识,物联技术666关注机器学习,arm开发,物联网,嵌入式硬件,单片机…

PLC水箱液位控制、神经网络、PID模糊控制等Factory IO仿真

水箱液位控制的PLC仿真程序。TIA Portal V17 中的代码。该水箱在 Factory IO 3D 仿真软件中建模&#xff0c;将控制算法写入PLC&#xff0c;与Factory IO联合仿真进行实验。项目包括一个简单的自动化系统、一个带有两个泵的液罐和一个液位传感器。从 HMI 中&#xff0c;我们可以…