微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Tic查询中的MySQL OHLC

如何解决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 举报,一经查实,本站将立刻删除。