#[量化投资-学习笔记018]Python+TDengine从零开始搭建量化分析平台-正态分布与收益率

正态分布(Normal Distribution)又叫高斯分布、常态分布。通常用来描述随机变量的概率分布。

自然界的数据分布通常是符合正态分布规律的,比如说人的身高、体重。但是非自然界数据就不一定了。尤其是经过人为加工过的数据。

金融领域大量使用正态分布来计算收益率和风险,虽然因为金融数据厚尾性而不断被人诟病,但是确实也没啥其他的统计方法。

在上一章节《MACD金死叉策略回测》,已经将回测的结果存入了数据库。本章节将对回测结果进行进一步分析。

目录

    • 获取历史回测数据
    • 计算正态分布
    • 绘制图形
    • 进阶
    • TIPs
    • 非题外话
    • 题外话

获取历史回测数据

通过查询 TDengine 数据库,我们可以轻松的获取到历史回测数据。

数据结构请参考上一章节,本次不再赘述。

查询回测记录:

taos> select last(*) from records;ts            |             record             |
===========================================================2023-11-12 19:17:39.339 | MACD-13_21                     |
Query OK, 1 row(s) in set (0.001534s)

查询对应的回测记录

taos> select count(*) from btdata where ts='2023-11-12 19:17:39.339';count(*)        |
========================9037 |
Query OK, 1 row(s) in set (0.010254s)

通过 Restful 查询获取数据

    rt = request_post(url, sql, username, password)ec = check_return(rt)log_write.handler_control.setLevel('INFO')if ec == 'error':log_write.logger.error(rt)else:returns = request_get(rt)
# 计算正态分布log_write.logger.debug(returns)

计算正态分布

直接使用 numpyscipy 中函数进行计算。

    mean = np.mean(returns)log_write.logger.debug(f"均值:{mean}")std = np.std(returns)log_write.logger.debug(f"标准差: {std}")x = np.linspace(min(returns), max(returns), 200)y = norm.pdf(x, mean, std)log_write.logger.debug(f"x={x}, y={y}")return x, y

绘制图形

def plot_normal_distribution(x, y):matplotlib.rcParams['font.sans-serif'] = ['SimHei']matplotlib.rcParams['font.family'] = 'sans-serif'matplotlib.rcParams['axes.unicode_minus'] = Falseplt.plot(x, y)plt.xlabel("Profit")plt.ylabel("Probability density")plt.title("收益率正态分布曲线")plt.grid()plt.show()

进阶

为了方便对比,我们可以将不同类型的股票的收益率正态分布曲线放到1个图形里面。
相关绘图功能接受见 Python知识点汇总

    plt.figure(figsize=(12, 8))plt.subplot(3, 1, 1)plt.plot(x1, y1)plt.xlabel("Profit")plt.ylabel("Probability density")plt.title("上证")plt.grid()plt.subplot(3, 1, 2)plt.plot(x2, y2)plt.xlabel("Profit")plt.ylabel("Probability density")plt.title("深证")plt.grid()plt.subplot(3, 1, 3)plt.plot(x3, y3)plt.xlabel("Profit")plt.ylabel("Probability density")plt.title("创业")plt.grid()plt.tight_layout()plt.show()

在这里插入图片描述

TIPs

有两个非常使用的包可以帮助规范代码: pycodestyleautopep8,前者会检查程序是否符合 PEP8 规范,
后者可以直接进行修改。

安装包

pip install pycodestyle
pip install autopep8

检查并修改程序

pycodestyle normal.pyautopep8 -in-place normal.py

在这里插入图片描述

非题外话

从上图可以明显的看出,正态曲线存在明显的偏离,这并不是坏现象。如果真是标准的正态分布图形,那就真的有问题了。

上图说明了使用 MACD 金死叉策略在所有的股票池中收益率众数和均值均在正数区间。

而且上证和创业板的表现均好于深证。

题外话

有个小段子:
几个人做电梯上楼,有人在电梯里做俯卧撑,有人在电梯里扇自己嘴巴,有人大瞌睡,有人在唱歌。

到了登楼,记者采访问这几个是怎么上楼的。

有人说靠自己不断的锻炼,有人说靠自虐,有人说靠躺平,有人说靠多才多艺。

大家都忽略了电梯。听起来很可笑,但实际情况确实如此。很多时候不错的收益率并不是因为出色的策略,还有可能是整个大盘都涨了。

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

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

相关文章

《白帽子讲web安全》笔记

第八章 文件上传漏洞 文件上传漏洞是指用户上传了一个可执行的脚本文件,并通过此脚本文件获得了执行服务器端命令的能力 文件上传后导致的常见安全问题一般有: ❍ 上传文件是Web脚本语言,服务器的Web容器解释并执行了用户上传的脚本&#xf…

【Apache Doris】审计日志插件 | 快速体验

【Apache Doris】审计日志插件 | 快速体验 一、 环境信息1.1 硬件信息1.2 软件信息 二、 审计日志插件介绍三、 快速 体验3.1 AuditLoader 配置3.1.1 下载 Audit Loader 插件3.1.2 解压安装包3.1.3 修改 plugin.conf 3.2 创建库表3.3 初始化3.4 验证 一、 环境信息 1.1 硬件信…

鸿蒙4.0正式版升级机型

官网支持升级机型入口:HarmonyOS 4支持机型 | 华为官网 (huawei.com) 正式版 手机 HUAWEI P60 HUAWEI P60 Pro HUAWEI P60 Art HUAWEI Mate X3 HUAWEI Mate X3 典藏版 HUAWEI Mate 50 HUAWEI Mate 50 Pro HUAWEI Mate 50 RS 保时捷设计 HUAWEI Mate 50E …

vscode文件夹折叠问题

今天发现一个vscode的文件夹显示的问题,首先是这样的,就是我的文件夹里又一个子文件夹,子文件夹里有一些文件,但是我发现无法折叠起这个子文件夹,总是显示全部的文件,这让我备份很难,具体参考 h…

C51--PC通过串口(中断)点亮LED

B4中的:REN允许 / 禁止串行接收控制位 REN 1为允许串行接收状态。 接收数据必须开启。所以SCON:0101 0000 ;即0x50 如何知道数据已经接收 RI位:当收到数据后 RI 1(由硬件置一) 硬件置一后必须用软件…

Docker - MySQL Database is uninitialized and password option is not specified

问题描述 docker run --namemaster -p 3306:3306 -d mysql 2022-11-11 08:03:0500:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.31-1.el8 started. 2022-11-11 08:03:0500:00 [Note] [Entrypoint]: Switching to dedicated user mysql 2022-11-11 08:03…

程序员崩溃瞬间

身为程序员哪一个瞬间让你最奔溃? 有一次我面临一个挑战,由于后续开发的需要,本来不需要同步块运行的部分突然需要进行同步块处理。为了避免重新设计同步块的耗时,我考虑使用一个资源占用标志代替。然而,事情并没有按…

【广州华锐互动】VR居家防火逃生模拟演练增强训练的真实性

VR软件开发公司广州华锐互动在消防培训领域已开发了多款VR产品,今天为大家介绍VR居家防火逃生模拟演练系统,这是一种基于虚拟现实技术的消防教育训练设备,通过模拟真实的火灾场景,让使用者身临其境地体验火灾逃生过程,…

搭建成功simulink-stm32硬件在环开发环境

本次实验所使用的软件版本和硬件平台参数如下: Matlab版本: 2021b STM32硬件平台:YF_STM32_Alpha 1R4(参考自STM32 Nucleo F103RB官方开发板) YF_STM32_Alpha开发板 STM32 Nucleo F103RB 开发板 2.1 STM32硬件支持包下载 读者朋友平时使用的是和谐版M…

【ceph】ceph集群中使用多路径(Multipath)方法

本站以分享各种运维经验和运维所需要的技能为主 《python零基础入门》:python零基础入门学习 《python运维脚本》: python运维脚本实践 《shell》:shell学习 《terraform》持续更新中:terraform_Aws学习零基础入门到最佳实战 《k8…

在vue项目里面使用index.ts进行统一导出

目录 一、概述 二、具体实践 2.1创建目录 2.2index.ts文件内容展示 2.2在需要的vue文件里面import 2.3vue全代码 三、实际效果 一、概述 一般我们在做项目的时候会发现vue文件里面没有export default 转而替代的是使用同目录下index.ts进行统一导出 好处:能…

Linux的root用户

拥有最大权限的用户名为root su和exit命令 su命令就是用于账户切换的系统命令Switch user 语法:su - [用户名] -符号可选,表示是否在切换用户后加载环境变量,建议带上 参数:用户名,表示要切换的用户,用…

Flutter有状态组件StatefulWidget生命周期

StatefulWidget是Flutter中的一个有状态的组件,它的生命周期相对复杂一些。下面是StatefulWidget的生命周期方法及其调用顺序: 1. createState(): 当StatefulWidget被插入到Widget树中时,会调用createState()方法来创建与之关联的State对象。…

【开源】基于Vue.js的校园二手交易系统的设计和实现

目录 一、摘要1.1 项目介绍1.2 项目详细录屏 二、功能模块2.1 数据中心模块2.2 二手商品档案管理模块2.3 商品预约管理模块2.4 商品预定管理模块2.5 商品留言板管理模块2.6 商品资讯管理模块 三、实体类设计3.1 用户表3.2 二手商品表3.3 商品预约表3.4 商品预定表3.5 留言表3.6…

如何正确使用GPT工具

引言 在快速发展的数字时代,人工智能(AI)已成为科研领域的一个不可或缺的工具。特别是像ChatGPT这样的AI聊天机器人,它通过高效的语言模型和深度学习算法,为科研工作者提供了前所未有的辅助。从文献搜索到数据分析&…

sqlmap requires ‘python-pymysql‘ third-party library

使用sqlmap进行udf提权报错: [14:06:04] [CRITICAL] sqlmap requires python-pymysql third-party library in order to directly connect to the DBMS MySQL. You can download it from https://github.com/PyMySQL/PyMySQL. Alternative is to use a package pyt…

asp.net core mvc之 过滤器

过滤器允许我们在Action执行之前和执行之后去执行一下业务代码 一、过滤器的作用域 1、全局过滤器, 在Startup.cs文件中注册 2、控制器过滤器, 在控制器类上面使用标注 3、action过滤器 二、全局过滤器使用 1、在 core 目录,添加 TestA…

MySQL(18):MySQL8.0的其它新特性

MySQL从5.7版本直接跳跃发布了8.0版本。 MySQL8.0 新增特征 1.更简便的NoSQL支持。 NoSQL泛指非关系型数据库和数据存储。随着互联网平台的规模飞速发展,传统的关系型数据库已经越来越不能满足需求。从5.6版本开始,MySQL就开始支持简单的NoSQL存储功能…

Servlet 常见的API

文章目录 写在前面Smart Tomcat 插件Servlet 中常见的API1. HttpServletinit 方法destroy 方法service 方法Servlet 的生命周期 使用 postman 构造请求使用 ajax 构造请求2. HttpServletRequest3. 前端给后端传参1). GET, query string2). POST, form3). json 4. HttpServletRe…