Navicat Premium 8.1.12激活(SQL金融_使用MySQL窗口函数计算简单移动平均(SMA)值)

Navicat Premium 8.1.12激活(SQL金融_使用MySQL窗口函数计算简单移动平均(SMA)值)

Navicat

SQL金融_使用MySQL窗口函数计算简单移动平均(SMA)值

1. 前言

滑动 / 移动平均 (Moving Average, MA), 又称移动平均线,是技术分析中一种分析时间序列的常用工具。

常见的移动平均包括简单移动平均 (Simple Moving Average, SMA)、权重移动平均 (Weight Moving Average, WMA) 和指数移动平均 (Exponential Moving Average,EMA)等。

它们的主要区别是计算平均值的公式不同。

2. 准备

  • 安装 MySQL 8.0.18

  • 安装 Navicat Premium

2.1 安装 MySQL

由于 MySQL 在 8.0 以后的版本才开始支持窗口函数 (OLAP),所以推荐安装 8.0.18 及以上版本,本文不过多涉及 MySQL 的安装,下载官方的安装包安装即可。

https://www.mysql.com/

2.2 安装 Navicat Premium

安装 Navicat Premium 是为了更加方便编写 SQL 查询语句,否则需要在命令行下编写 SQL 语句。

3. 准备股票数据

本篇文章以梳理思路,演示方法为主,所以直接使用以下简单的测试数据即可。

正常情况下的股票历年数据可通过 API 等接口获取。

测试数据:


4. 计算 30 日简单移动平均 (SMA) 值

语句释义:

  • AVG(stk_close): 求平均值的 AVG 可作为聚合函数使用,表示将所有收盘价 (Close) 汇总成一个平均值。

  • OVER: OVER 表明 AVG() 是一个窗口函数。OVER 后的括号内为空,表示将所有数据作为一个分区进行汇总。

  • (PARTITION BY stk_code): 表示按 stk_code 也就是股票代码分区 (PARTITION BY),如果有多个股票,则窗口会分别在各自分区内进行滑动、取值。

  • (ORDER BY stk_date ASC): 表示按 stk_date 进行升序 (ASC) 排序 (ORDER BY),因为移动平均是按时间顺序计算的。

  • (ROWS BETWEEN 29 PRECEDING AND CURRENT ROW): 表示窗口大小 (Frame Clause),这里表示取前 29 行到当前 (Current) 行,也即共 30 行。


输出:


通过以上的计算,验证后发现,前 29 行,也即 2015-08-05 至 2015-09-16 的数据并不是 30 日均值。

虽然设定了窗口帧范围为前 29 行到当前行,但当前面不足 29 行的时候,则会有多少行取多少行。

也就是 2015-08-05 前面有 0 行,则 2015-08-05 的 SMA30 就是 2015-08-05 的 stk_close 本身 (8.0300 / 1 = 8.0300)

2015-08-06 前面有 1 行,则 2015-08-06 的 SMA30 就是 2015-08-05 至 2015-08-06 的 stk_close 的平均值 ((8.0300 + 8.0700) / 2 = 8.050)

结语

以上就是使用 MySQL 窗口函数 (OLAP) 计算简单移动平均 (Simple Moving Average) 值的全部内容。

更多内容可以访问我的代码仓库:

https://gitee.com/goufeng928/public

https://github.com/goufeng928Navicat Premium 8.1.12激活/public

今天的文章
Navicat Premium 8.1.12激活(SQL金融_使用MySQL窗口函数计算简单移动平均(SMA)值)分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/121716.html

(0)
编程小号编程小号
上一篇 2024-07-06
下一篇 2024-07-06

相关推荐