[量化投资-学习笔记002]Python+TDengine从零开始搭建量化分析平台-MA均线的多种实现方式
MA 均线时最基本的技术指标,也是最简单,最不常用的(通常使用EMA、SMA)。
以下用两种不同的计算方法和两种不同的画图方法进行展示和说明。
MA 均线指标公式
MA (N)=(C1 +C2 +C3 +…+C N )/N
目录
- 方式一
- 1.SQL 直接查询均值
- 2.使用 pyplot 进行绘图
- 3.使用 Grafana 绘图
- 方式二
- 1.使用 Python 计算 MA
- 2.使用 pyplot 进行绘图
- 高能预警
- 题外话
方式一
1.SQL 直接查询均值
TDengine 提供了很多时间相关函数,其中有个窗口函数 interval 可以进行滑动时间窗口的运算。函数说明见官方文档。
直接查询 2022-08-01 到 2022-10-01 时间段的 5 日 MA,SQL 如下:
selectma
from(select_wend as ts,avg(close) as mafrom(select_wstart,last(close) as closefromtrade_data_a.tdatawherefcode = "000001" interval(1d) // 获取每日最后一分钟的收盘价作为当日收盘价) interval(5d) sliding(1d) //计算5日的收盘价平均值,滑动窗口为1天。)
wherets >= "2022-08-01" and ts <= "2022-10-01" //选取指定时间范围内数据
数据结构见之前的文章《[量化投资-学习笔记001]Python+TDengine从零开始搭建量化分析平台-数据存储》
Python 代码如下:
def request_get(resInfo):load_data = json.loads(resInfo)data = load_data.get("data")datalist= []for i in range(len(data)):datalist.append(float(data[i][0]))return datalistdef get_ma(sql):ma = []rt = request_post(tdurl,sql,username,password)if check_return(rt) == 'error':print(rt)else:ma = request_get(rt)return ma
2.使用 pyplot 进行绘图
if __name__ == '__main__':ma5 = get_ma(ma5_sql)ma10 = get_ma(ma10_sql)plt.title("MA")plt.plot(ma5,'b',linewidth=1.0,label='MA5')plt.plot(ma10,'y',linewidth=1.0,label='MA10')plt.legend()plt.grid()plt.show()

3.使用 Grafana 绘图
Grafana 可以直接访问 TDengine 数据库,我们直接添加一张时间序列图即可。
SQL 如下:
select ts,ma from (select _wend as ts,avg(close) as ma from (select _wstart,last(close) as close from trade_data_a.tdata where fcode="000001" interval(1d)) interval(5d) sliding(1d) )where ts>=$from and ts<=$to

注意:
Grafana 中的时间序列图必须带上时间。
时间范围可以使用 Grafana 自带函数 $from 和 $to,方便图形的缩放。
方式二
1.使用 Python 计算 MA
通过查询 TDengine 数据库获取原数据,然后使用 Python 计算 MA。
原始数据获取:
selectclose
from(select_wstart as ts,last(close) as closefromtrade_data_a.tdatawherefcode = "000001" interval(1d) //获取每日收盘价)
wherets >= "2022-08-01" and ts <= "2022-10-01" //获取指定日期收盘价
这里计算 MA 时取巧,使用了 numpy 的均值函数。
def calc_ma(days,ma):ma_n = []days = days-1for i in range(len(ma)):if i >= days:ma_n.append(np.mean(ma[i-days:i+1]))else:if i == 0:ma_n.append(ma[i])else:ma_n.append(np.mean(ma[:i]))return ma_n
注意:
以上对初始的几个值按实际个数进行了平均,因此结果与方式一存在偏差。
2.使用 pyplot 进行绘图
if __name__ == '__main__':ma5_n = calc_ma(5,get_ma(sql_ma))ma10_n = calc_ma(10,get_ma(sql_ma))plt.title("MA")plt.plot(ma5_n,'g',linewidth=1.0,label='MA5_N')plt.plot(ma10_n,'r',linewidth=1.0,label='MA10_N')plt.legend()plt.grid()plt.show()

高能预警
从图形上来看,不管哪种方式,展示出的图形都相差不大,但为了对比,我们讲方式一和方式二的图形放到一起进行对比。
if __name__ == '__main__':ma5 = get_ma(ma5_sql)ma10 = get_ma(ma10_sql)ma5_n = calc_ma(5,get_ma(sql_ma))ma10_n = calc_ma(10,get_ma(sql_ma))plt.title("MA")plt.plot(ma5,'b',linewidth=1.0,label='MA5')plt.plot(ma10,'y',linewidth=1.0,label='MA10')plt.plot(ma5_n,'g',linewidth=1.0,label='MA5_N')plt.plot(ma10_n,'r',linewidth=1.0,label='MA10_N')plt.legend()plt.grid()plt.show()

WTF!!
大坑出现了!!
为何图形形状差不多,但是数据却对不上??
问题就出在 TDengine 的滑动时间窗口函数上面,这个函数是按照时间维度顺序滑动的,默认时间是连续的。
但是
交易时间是不连续的!
交易时间是不连续的!
交易时间是不连续的!
这就造成了方式一中不仅相同时间段的数据条数多了,数值计算也错了。
所以,TDengine 的时间窗口函数对于这种不连续的时间真是无能为力,只能老老实实自己进行计算了。
但如果只是想看看趋势什么的,不考虑精确性,用 TDengine+Grafana 还是挺方便的。
题外话
MA 是技术分析指标。对于技术分析有时模糊的准确比精准的错误更重要。
我之前有个课后作业对技术分析的多解性做了说明,有兴趣的同学可以看两眼:https://www.zhihu.com/question/34886985/answer/3264087568
技术分析除了具有多解性,还具有反身性,这就造成了技术分析的误差非常大,而且越追求精准,误差越大。
相关文章:
[量化投资-学习笔记002]Python+TDengine从零开始搭建量化分析平台-MA均线的多种实现方式
MA 均线时最基本的技术指标,也是最简单,最不常用的(通常使用EMA、SMA)。 以下用两种不同的计算方法和两种不同的画图方法进行展示和说明。 MA 均线指标公式 MA (N)(C1 C2 C3 …C N )/N目录 方式一1.SQL 直接查询均值2.使用 pyp…...
c语言 判断两个文件是否相同
使用strcmp比较: #include <stdio.h> #include <string.h>int Compare(const char * file1, const char* file2) {FILE* f1, * f2;int size1, size2;unsigned char buffer1[1024], buffer2[1024];f1 fopen(file1, "rb");f2 fopen(file2, &…...
【2021集创赛】Arm杯三等奖:基于FPGA的人脸检测SoC设计
本作品参与极术社区组织的有奖征集|秀出你的集创赛作品风采,免费电子产品等你拿~活动。 团队介绍 参赛单位:合肥工业大学 队伍名称:芯创之家 指导老师:邓红辉、尹勇生 参赛杯赛:Arm杯 参赛人员:王亮 李嘉燊 金京 获奖情…...
Java电商平台 - API 接口设计之 token、timestamp、sign 具体架构与实现|电商API接口接入
一:token 简介 Token:访问令牌access token, 用于接口中, 用于标识接口调用者的身份、凭证,减少用户名和密码的传输次数。一般情况下客户端(接口调用方)需要先向服务器端申请一个接口调用的账号,服务器会给出一个appId和一个key, …...
【带头学C++】----- 1.基础知识 ---- 1.23 运算符概述
1.23 运算符概述 运算符,在数学中常见的加减乘除之类的符号,那么在C在编程语言中呢,将使用特定的符号或标记对操作数进行操作以生成结果。用算术运算符将运算对象(也称操作数)连接起来的、符合C 语法规则的式子,称为C 算术表达式运…...
python爬虫分析基于python图书馆书目推荐数据分析与可视化
收藏关注不迷路 文章目录 前言一、项目介绍二、开发环境三、功能介绍四、核心代码五、效果图六、文章目录 前言 随着电子技术的普及和快速发展,线上管理系统被广泛的使用,有很多商业机构都在实现电子信息化管理,图书推荐也不例外,…...
Java零基础入门-关系运算符
前言 Java作为一门广受欢迎的开发语言,其在企业级应用和移动应用开发中有着广泛的应用。如果你是一个Java零基础的初学者,那么你来到了一个正确的地方。在本篇文章中,我们会详细介绍Java中的关系运算符,帮助你快速入门。 摘要 …...
1200*A. Trust Nobody(贪心)
Problem - 1826A - Codeforces 解析: 从大到小枚举说谎人的个数x,然后查看是否有 x个人说谎即可。 #include<bits/stdc.h> using namespace std; #define int long long const int N2e55; int t,n,a[N]; signed main(){scanf("%lld",&a…...
二维码智慧门牌管理系统升级解决方案:采集项目的建立与运用
文章目录 前言一、采集项目的建立二、采集项目的运用三、采集项目的意义 前言 在二维码智慧门牌管理系统的升级过程中,一个至关重要的环节是采集项目的建立与运用。采集项目是新建采集任务的前提,同时也是整个系统升级的关键步骤。其意义近似于现实中的…...
Azure - 机器学习:创建机器学习所需资源,配置工作区
目录 一、Azure机器学习工作区与计算实例简要介绍工作区计算实例 二、创建工作区1. 登录到 Azure 机器学习工作室2. 选择“创建工作区”3. 提供以下信息来配置新工作区:4. 选择“创建”以创建工作区 三、创建计算实例四、工作室实战4.1 工作室快速导览4.2 从示例笔记…...
电脑监控软件哪些比较好用
电脑监控软件在当今信息化时代越来越受到人们的关注,它们可以用于保护公司的商业机密,防止员工在工作中做一些不恰当的事情,以及在家庭中监控孩子的上网行为等。 本文将介绍一些比较好用的电脑监控软件: 一、域之盾软件 这款软件…...
数据结构与算法之排序: 选择排序 (Javascript版)
排序 排序:把某个乱序的数组变成升序或降序的数组 (这里用数组来做举例) 选择排序 该排序属于 贪心 策略关注的是局部,是一种苟且的东西 算法实现 // 随机数组,选择排序 Array.prototype.selectionSort function() {let len this.leng…...
【前端】NodeJS核心知识点整理
1.Node.js入门案例 1.1.什么是Node.js JS是脚本语言,脚本语言都需要一个解析器才能运行。对于写在HTML页面里的JS,浏览器充当了解析器的角色。而对于需要独立运行的JS,NodeJS就是一个解析器。 每一种解析器都是一个运行环境,不但…...
计算机操作系统重点概念整理-第三章 进程同步【期末复习|考研复习】
第三章 进程同步 【期末复习|考研复习】 计算机操作系统系列文章传送门: 第一章 计算机系统概述 第二章 进程管理 第三章 进程同步 第四章 内存管理 第五章 文件管理 第六章 输出输出I/O管理 文章目录 第三章 进程同步 【期末复习|考研复习】前言三、进程同步3.1 临…...
day06-Flex布局
Flex布局 目标:熟练使用 Flex 完成结构化布局 01-标准流 标准流也叫文档流,指的是标签在页面中默认的排布规则,例如:块元素独占一行,行内元素可以一行显示多个。 02-浮动 基本使用 作用:让块元素水平排…...
架构整洁之道摘录
软件架构 软件架构规则和其他变量完全⽆关。 软件设计的终极⽬标是⽤最⼩的成本来满⾜构建和维护系统的需求。 程序设计重要的是软件架构的灵活性⽽不是先实现功能。 软件系统的第⼀价值体系是系统⾏为,第⼆价值体系是系统架构 编程范式 结构化编程 利⽤if/else…...
流程引擎-自定义函数的应用
背景: 某些业务需求比较特殊,需要在表单中校验或实现一些功能,泛微流程表单配置时实现的方式多种多样:JS脚本、SQL语句、公式以及其他一些标准化拖拽功能,本次给大家分享一下流程表单中的公式实现的一些需求场景。泛微…...
ChatGLM系列二:ChatGLM2的介绍及代码实践
一、介绍 2023年06月25日,清华大学开源了 ChatGLM2-6B 模型,是 ChatGLM 模型的升级版本。ChatGLM2-6B 在多个方面有显著提升:模型性能更强,在各种测试集上的表现更好;支持更长的上下文,最大上下文长度提升…...
JDBC对数据库进行操作
一.使用JDBC查询数据库表t_user的所有数据 1.User表 名称 数据类型 主键 是否为空 说明 ID number 是 用户编号 NAME Varchar2(50) 用户名 AGE varchar2(5) 用户年龄 BIRTH date 用户生日 PWD varchar2(20) 否 用户密码 import java.sql.Connection; import java.sql.Date; …...
unity 使用Image的RectTransform来进行判断是否点击到
public RectTransform LeftTouchArea;public RectTransform RightTouchArea;private void Update(){if (Input.GetMouseButtonDown(0)){//获取鼠标的位置Vector2 mousePos Input.mousePosition;//判断Image的坐标是否包含点击的坐标if (RectTransformUtility.RectangleContain…...
Python|GIF 解析与构建(5):手搓截屏和帧率控制
目录 Python|GIF 解析与构建(5):手搓截屏和帧率控制 一、引言 二、技术实现:手搓截屏模块 2.1 核心原理 2.2 代码解析:ScreenshotData类 2.2.1 截图函数:capture_screen 三、技术实现&…...
Appium+python自动化(十六)- ADB命令
简介 Android 调试桥(adb)是多种用途的工具,该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具,其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利,如安装和调试…...
在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能
下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能,包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...
23-Oracle 23 ai 区块链表(Blockchain Table)
小伙伴有没有在金融强合规的领域中遇见,必须要保持数据不可变,管理员都无法修改和留痕的要求。比如医疗的电子病历中,影像检查检验结果不可篡改行的,药品追溯过程中数据只可插入无法删除的特性需求;登录日志、修改日志…...
Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)
概述 在 Swift 开发语言中,各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过,在涉及到多个子类派生于基类进行多态模拟的场景下,…...
STM32标准库-DMA直接存储器存取
文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA(Direct Memory Access)直接存储器存取 DMA可以提供外设…...
如何为服务器生成TLS证书
TLS(Transport Layer Security)证书是确保网络通信安全的重要手段,它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书,可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...
Psychopy音频的使用
Psychopy音频的使用 本文主要解决以下问题: 指定音频引擎与设备;播放音频文件 本文所使用的环境: Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...
Spring AI与Spring Modulith核心技术解析
Spring AI核心架构解析 Spring AI(https://spring.io/projects/spring-ai)作为Spring生态中的AI集成框架,其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似,但特别为多语…...
Python 包管理器 uv 介绍
Python 包管理器 uv 全面介绍 uv 是由 Astral(热门工具 Ruff 的开发者)推出的下一代高性能 Python 包管理器和构建工具,用 Rust 编写。它旨在解决传统工具(如 pip、virtualenv、pip-tools)的性能瓶颈,同时…...
