介绍
均线图(MA)是一种用于股票、期货等市场交易分析的技术图表。简单来说,就是求出一段时间内价格(或收盘价)的平均值,根据平均值的变化趋势,辅助交易者分析判断价格走势的趋势、方向、支撑位和压力位等。在股票交易和期货交易中,均线图是非常常用和重要的技术工具。
在这篇文章中,我们将探讨如何使用SQL Server绘制股票的均线图。
数据源
首先需要准备数据。本文的数据是从Yahoo财经上获取的苹果公司(AAPL)的股票历史数据。下载数据后,我们需要将数据导入SQL Server。为了简化本文,我们将仅使用数据中的日期和收盘价两个字段。以下是简化后的示例数据:
CREATE TABLE [dbo].[AppleStock](
[Date] [date] NOT NULL,
[Close] [float] NOT NULL
)
INSERT INTO [dbo].[AppleStock] ([Date], [Close])
VALUES
('2020-08-10', 450.91),
('2020-08-07', 444.45),
('2020-08-06', 455.61),
('2020-08-05', 440.25),
('2020-08-04', 438.66),
('2020-08-03', 435.75),
('2020-07-31', 425.04),
('2020-07-30', 384.76),
('2020-07-29', 380.16),
('2020-07-28', 373.01)
计算均线
计算均线的方法很简单。我们可以按日期升序排列数据后,对每个日期的最后n个收盘价求平均值,即为第n日均线的值。以下是计算5日和20日均线的SQL代码:
SELECT
[Date],
[Close],
AVG([Close]) OVER (ORDER BY [Date] ROWS 4 PRECEDING) AS [MA5],
AVG([Close]) OVER (ORDER BY [Date] ROWS 19 PRECEDING) AS [MA20]
FROM [dbo].[AppleStock]
在上面的SQL语句中,我们使用了窗口函数AVG对每个收盘价求平均值。使用ORDER BY [Date]语句按日期升序排列数据,使用ROWS 4 PRECEDING表示取当前行及前4行的收盘价求平均值,即为5日均线。同理,ROWS 19 PRECEDING表示取当前行及前19行的收盘价求平均值,即为20日均线。
绘制均线图
有了均线数据,我们可以使用Power BI等工具绘制均线图。但是,本文的重点是探讨如何使用SQL Server绘制均线图。在SQL Server中,我们可以使用FOR XML方式将结果集转换成XML格式,再使用HTML、JavaScript等技术将XML数据绘制成图表。以下是绘制5日和20日均线图的SQL代码:
SELECT
[Date],
[Close],
(SELECT AVG([Close]) AS [MA5]
FROM [dbo].[AppleStock]
WHERE [Date] BETWEEN DATEADD(day, -4, t.[Date]) AND t.[Date]) AS [MA5],
(SELECT AVG([Close]) AS [MA20]
FROM [dbo].[AppleStock]
WHERE [Date] BETWEEN DATEADD(day, -19, t.[Date]) AND t.[Date]) AS [MA20]
FROM [dbo].[AppleStock] AS t
ORDER BY [Date]
FOR XML RAW('Data'), ROOT('ChartData'), ELEMENTS XSINIL
在上面的SQL语句中,我们使用了子查询和BETWEEN语句计算均线值。同样地,我们使用ORDER BY [Date]语句按日期升序排列数据。使用FOR XML语句将结果集输出为如下格式的XML数据:
<ChartData xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Data>
<Date>2020-07-28</Date>
<Close>373.01</Close>
<MA5>385.326</MA5>
<MA20>396.1195</MA20>
</Data>
<Data>
...
</Data>
...
</ChartData>
我们将上面的XML数据复制到一个HTML文件中,再使用JavaScript和Chart.js等图表库绘制均线图。以下是绘制均线图的HTML和JavaScript代码。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>均线图</title>
<script src="https://cdn.jsdelivr.net/npm/chart.js@2.9.3/dist/chart.js"></script>
</head>
<body>
<canvas id="myChart"></canvas>
<script>
fetch('data.xml') //从XML文件中获取数据
.then(response => response.text())
.then(text => {
let data = (new window.DOMParser()).parseFromString(text, "text/xml").querySelectorAll("Data")
let dates = [], closes = [], ma5s = [], ma20s = []
data.forEach(d => {
dates.push(d.querySelector("Date").textContent)
closes.push(parseFloat(d.querySelector("Close").textContent))
ma5s.push(parseFloat(d.querySelector("MA5").textContent))
ma20s.push(parseFloat(d.querySelector("MA20").textContent))
})
new window.Chart(document.getElementById("myChart"), {
type: 'line',
data: {
labels: dates,
datasets: [
{
label: '收盘价',
data: closes,
borderColor: 'rgb(255, 99, 132)',
tension: 0.1
},
{
label: '5日均线',
data: ma5s,
borderColor: 'rgb(54, 162, 235)',
tension: 0.1
},
{
label: '20日均线',
data: ma20s,
borderColor: 'rgb(255, 205, 86)',
tension: 0.1
}
]
},
options: {}
});
});
</script>
</body>
</html>
在上面的HTML和JavaScript代码中,我们使用XMLHttpRequest对象从XML文件中获取数据,并使用querySelectorAll和querySelector方法从XML数据中读取日期、收盘价和均线值。使用Chart.js的线性图表功能绘制均线图。
总结
本文介绍了使用SQL Server绘制股票的均线图的技巧。主要包括计算均线和绘制均线图两个方面。计算均线的方法是使用窗口函数或子查询,绘制均线图的方法是将结果集输出为XML格式,并使用JavaScript和图表库绘制均线图。在技术实现的基础上,本文也简要介绍了股票和均线图的基本概念。相信掌握了这些技能,读者可以更加灵活地应用SQL Server和其他工具进行股票交易的分析和决策。