数据源升级-4.0
对之前的数据源进行结构上的优化,实用性上增加缠论的箱体框架逻辑
待完善的 -
- 实时监控模块的搭建
- 箱体数据的清洗
- 测试方案性能
以下是SQL查询语句的备份
股价信息查询_2.0-增加涨停信息
SELECT
dq.日期,
LEFT(dq.股票代码, 6) AS 股票代码,
gb.股票名称,
gb.所属同花顺行业 AS 同花顺板块,
gb.所属东方财富行业 AS 东财板块,
CASE
WHEN dq.股票代码前缀 IN ('300', '301') THEN '创业板'
WHEN dq.股票代码前缀 IN ('000', '001', '002', '003', '600', '601', '603', '605') THEN '主板'
WHEN dq.股票代码前缀 IN ('430', '830', '870', '920') THEN '北证'
WHEN dq.股票代码前缀 IN ('688', '689') THEN '科创'
ELSE '其他'
END AS 证券划分,
dq.开盘,
dq.成交量,
dq.收盘,
dq.最低,
dq.最高,
dq.振幅,
dq.换手率,
dq.涨跌幅,
dq.涨跌额,
ROUND(dq.收盘 - dq.涨跌额, 2) AS 昨日收盘价,
CASE
WHEN ROUND((dq.收盘 - dq.涨跌额) * 1.2, 2) - dq.最高 = 0 THEN '涨停'
ELSE '其他'
END AS 涨停状态,
CASE
WHEN dq.最高 = ROUND((dq.昨日收盘价) * 1.2, 2) THEN '触涨停'
WHEN dq.最低 = ROUND((dq.昨日收盘价) * 0.8, 2) THEN '触跌停'
WHEN dq.收盘 >= dq.开盘 THEN '涨'
ELSE '跌'
END AS 涨跌情况,
CASE
WHEN dq.昨日收盘价 = 0 THEN NULL
ELSE ROUND((dq.最低 - dq.昨日收盘价) / dq.昨日收盘价, 4)
END AS 最低跌幅,
CASE
WHEN dq.昨日收盘价 = 0 THEN NULL
ELSE ROUND((dq.最高 - dq.昨日收盘价) / dq.昨日收盘价, 4)
END AS 最高涨幅,
dq.收盘 - dq.开盘 AS 收开盘价差,
dq.最高 - dq.最低 AS 高低差,
tb.涨停原因类别,
tb.几天几板,
tb.涨停类型
FROM
(
SELECT
`日期`,
`股票代码`,
LEFT(`股票代码`, 3) AS 股票代码前缀,
`开盘`,
`收盘`,
`最低`,
`成交量`,
`最高`,
`振幅`,
`换手率`,
`涨跌幅`,
`涨跌额`,
ROUND(`收盘` - `涨跌额`, 2) AS 昨日收盘价
FROM
`每日行情查询`
WHERE
`日期` >= CURDATE() - INTERVAL 100 DAY
AND LEFT(`股票代码`, 3) IN ('300', '301')
) AS dq
LEFT JOIN
`股票基础信息` AS gb ON dq.股票代码 = gb.股票代码
LEFT JOIN
`每日触板` AS tb ON dq.日期 = tb.日期 AND dq.股票代码 = tb.股票代码
ORDER BY
dq.日期 DESC,
dq.股票代码;
股价信息查询_2.0
SELECT
dq.日期,
LEFT(dq.股票代码, 6) AS 股票代码,
gb.股票名称,
gb.所属同花顺行业 AS 同花顺板块,
gb.所属东方财富行业 AS 东财板块,
CASE
WHEN dq.股票代码前缀 IN ('300', '301') THEN
'创业板'
WHEN dq.股票代码前缀 IN ('000', '001', '002', '003', '600', '601', '603', '605') THEN
'主板'
WHEN dq.股票代码前缀 IN ('430', '830', '870', '920') THEN
'北证'
WHEN dq.股票代码前缀 IN ('688', '689') THEN
'科创' ELSE '其他'
END AS 证券划分,
dq.开盘,
dq.成交量,
dq.收盘,
dq.最低,
dq.最高,
dq.振幅,
dq.换手率,
dq.涨跌幅,
dq.涨跌额,
ROUND(dq.收盘 - dq.涨跌额, 2) AS 昨日收盘价,
CASE
WHEN ROUND((dq.收盘 - dq.涨跌额) * 1.2, 2) - dq.最高 = 0 THEN
'涨停' ELSE '其他'
END AS 涨停状态,
CASE
WHEN dq.最高 = ROUND((dq.昨日收盘价) * 1.2, 2) THEN
'触涨停'
WHEN dq.最低 = ROUND((dq.昨日收盘价) * 0.8, 2) THEN
'触跌停'
WHEN dq.收盘 >= dq.开盘 THEN
'涨' ELSE '跌'
END AS 涨跌情况,
CASE
WHEN dq.昨日收盘价 = 0 THEN
NULL ELSE ROUND((dq.最低 - dq.昨日收盘价) / dq.昨日收盘价, 4)
END AS 最低跌幅,
CASE
WHEN dq.昨日收盘价 = 0 THEN
NULL ELSE ROUND((dq.最高 - dq.昨日收盘价) / dq.昨日收盘价, 4)
END AS 最高涨幅,
dq.收盘 - dq.开盘 AS 收开盘价差,-- 新增字段:收盘与开盘的差值
dq.最高 - dq.最低 AS 高低差 -- 新增字段:最高与最低的差值
FROM
(
SELECT
`日期`,
`股票代码`,
LEFT(`股票代码`, 3) AS 股票代码前缀,
`开盘`,
`收盘`,
`最低`,
`成交量`,
`最高`,
`振幅`,
`换手率`,
`涨跌幅`,
`涨跌额`,
ROUND(`收盘` - `涨跌额`, 2) AS 昨日收盘价 -- 提前计算昨日收盘价
FROM
`每日行情查询`
WHERE
`日期` >= CURDATE() - INTERVAL 100 DAY
AND LEFT(`股票代码`, 3) IN ('300', '301') -- 筛选出创业板的股票
) AS dq
LEFT JOIN `股票基础信息` AS gb ON dq.股票代码 = gb.股票代码
ORDER BY
dq.日期 DESC,
dq.股票代码;
最高最低价箱体框架
WITH 涨停日期 AS (
SELECT
LEFT(dq.股票代码, 6) AS 股票代码,
dq.日期 AS 涨停日期
FROM
(
SELECT
`日期`,
`股票代码`,
`最高`,
ROUND(`收盘` - `涨跌额`, 2) AS 昨日收盘价
FROM
`每日行情查询`
WHERE
`日期` >= CURDATE() - INTERVAL 100 DAY
AND LEFT(`股票代码`, 3) IN ('300', '301')
) AS dq
WHERE
dq.最高 = ROUND(dq.昨日收盘价 * 1.2, 2)
),
价格区间 AS (
SELECT
LEFT(dq.股票代码, 6) AS 股票代码,
dq.日期,
dq.开盘,
dq.收盘,
zd.涨停日期
FROM
`每日行情查询` AS dq
JOIN
涨停日期 AS zd
ON
LEFT(dq.股票代码, 6) = zd.股票代码
WHERE
dq.日期 BETWEEN zd.涨停日期 AND DATE_ADD(zd.涨停日期, INTERVAL 10 DAY)
),
最高最低价 AS (
SELECT
股票代码,
涨停日期,
MAX(GREATEST(开盘, 收盘)) AS 最高价, -- 开盘价和收盘价的最大值
MIN(CASE WHEN 日期 > 涨停日期 THEN LEAST(开盘, 收盘) END) AS 最低价 -- 排除涨停当天的最低价
FROM
价格区间
GROUP BY
股票代码,
涨停日期
),
最高最低价日期 AS (
SELECT
p.股票代码,
p.涨停日期,
h.最高价,
h.最低价,
MAX(CASE WHEN GREATEST(p.开盘, p.收盘) = h.最高价 THEN p.日期 END) AS 最高价日期,
MIN(CASE WHEN LEAST(p.开盘, p.收盘) = h.最低价 AND p.日期 > p.涨停日期 THEN p.日期 END) AS 最低价日期 -- 排除涨停当天的最低价日期
FROM
价格区间 AS p
JOIN
最高最低价 AS h
ON
p.股票代码 = h.股票代码
AND p.涨停日期 = h.涨停日期
GROUP BY
p.股票代码,
p.涨停日期,
h.最高价,
h.最低价
)
SELECT
股票代码,
涨停日期,
最高价,
最低价,
最高价日期,
最低价日期,
CASE
WHEN 最低价 = 0 THEN NULL
ELSE ROUND((最高价 - 最低价) / 最低价, 4)
END AS 比例
FROM
最高最低价日期
ORDER BY
涨停日期 DESC;