如何解决Tic查询中的MySQL OHLC
| 我有一个表格,其中包含各种公司的单个价格的列表。 + ------- + --------- + --------- + ------ + |符号| TTime | TPrice |数量| + ------- + --------- + --------- + ------ + | AAM | 101549 | 1303.15 | 100 | | AAM | 120405 | 1308.23 | 2 | | AAM | 132142 | 1302.16 | 11 | | AAM | 145120 | 1307.75 | 1 | + ------- + --------- + --------- + ------ + (有多个符号,但我可以解决这些问题) 我正在使用以下SELECT tic.Symbol,tic.TDate,(Case when
tic.TTime = Min(tic.TTime)
then tic.TPrice end) as `Open`,Max(tic.TPrice) AS High,Min(tic.TPrice) AS Low,(Case when
tic.TTime = Max(tic.TTime)
then tic.TPrice end ) as `Close`,Sum(Volume) AS Volume,Max(tic.TTime)
FROM tblfinalasxtic AS tic GROUP BY Symbol LIMIT 10;
我遇到一个重大问题
仅当全天只有一次或同时只有多个条目时才会产生收盘价。如果以时间范围为例,则没有收盘价。
根据我的假设,开放的工作方式很好,那就是最大的方式可以工作,但没有成功。
解决方法
本质上我达到了这样的分辨率
1://为tic值创建表格**确保创建ID列**
CREATE TABLE price_tic (
`id` INT(10) NULL AUTO_INCREMENT,`T` VARCHAR(3) NULL,`SysDateTime` DATETIME NULL,`TIC` FLOAT NULL,`Volume` FLOAT NULL,PRIMARY KEY (`id`)
)
COLLATE=\'latin1_bin\'
ENGINE=MEMORY
ROW_FORMAT=DEFAULT
2:/接下来创建一个用于打开高低,成交量,OI等的临时表
CREATE TEMPORARY TABLE symbol_ohl
(ExchDate DATE,ExchTime TIME )
ENGINE = MEMORY
AS(SELECT
DATE_FORMAT(`SysDateTime`,\'%Y-%m-%d\') AS ExchDate,DATE_FORMAT(`SysDateTime`,\'%H:%i:00\') AS ExchTime,\'%Y-%m-%d %H:%i:00\') AS ExchDateTime,`TIC` AS `OPEN`,MAX(`TIC`) AS `HIGH`,MIN(`TIC`) AS `LOW`,SUM(Volume) AS `Volume`,COUNT(`TIC`) AS `OpnInt`
FROM symbol_tic
GROUP BY ExchDateTime
ORDER BY ExchDateTime)
3://接下来,为收盘价创建一个临时表,该表使用ID号与其自身相连,以便您可以正确订购它。
CREATE TEMPORARY TABLE symbol_cls
(SysDate DATE,SysTime TIME,ExchTime TIME )
ENGINE = MEMORY
AS(SELECT
`TIC` AS `CLOSE`,\'%Y-%m-%d\') AS `SysDate`,\'%H:%i:00\') AS SysTime,\'%Y-%m-%d %H:%i:00\') AS ExchDateTime
FROM symbol_tic
INNER JOIN
(SELECT MAX(id) AS id
FROM symbol_tic
GROUP BY DATE_FORMAT(`SysDateTime`,\'%Y-%m-%d %H:%i:00\'))
ids ON symbol_tic.id = ids.id)
4:/最后合并生成的临时表,出于各种原因,我正在使用Replace INTO,但您知道了
REPLACE INTO symbol_working
(`ExchDate`,`ExchTime`,`SysDate`,`SysTime`,`ExchDateTime`,`SysDateTime`,`OPEN`,`HIGH`,`LOW`,`CLOSE`,`Volume`,`OpnInt`)
SELECT
symbol_ohl.`ExchDate` AS ExchDate,symbol_ohl.`ExchTime` AS ExchTime,symbol_cls.`SysDate` AS \'SysDate\',symbol_cls.`SysTime` AS \'SysTime\',symbol_ohl.`ExchDateTime` As ExchDateTime,CONCAT(symbol_cls.`SysDate`,\' \',symbol_cls.`SysTime`) As SysDateTime,symbol_ohl.`OPEN`,symbol_ohl.`HIGH`,symbol_ohl.`LOW`,symbol_cls.`CLOSE`,symbol_ohl.Volume AS `Volume`,symbol_ohl.OpnInt AS `OpnInt`
FROM
(symbol_ohl JOIN symbol_cls
ON (symbol_ohl.ExchDateTime = symbol_cls.ExchDateTime))
希望这对某人有帮助。
当我在S&P emini的每日输出中运行它时,它运行很快,并且要花几秒钟的时间才能运行。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。