当前位置:  开发笔记 > 编程语言 > 正文

用于组织历史股票数据的数据库模式

如何解决《用于组织历史股票数据的数据库模式》经验,为你挑选了2个好方法。

我正在创建一个用于存储历史股票数据的数据库模式.我目前有一个架构,如下所示.

我的要求是为多个股票代码存储"条形数据"(日期,开盘价,最高价,最低价,收盘价).每个符号也可能有多个时间范围(例如Google Weekly bars和Google Daily bar).

我当前的架构将大部分数据放在OHLCV表中.我远非数据库专家,如果这太天真,我很好奇.建设性的投入非常受欢迎.

CREATE TABLE Exchange (exchange TEXT UNIQUE NOT NULL);

CREATE TABLE Symbol (symbol TEXT UNIQUE NOT NULL, exchangeID INTEGER NOT NULL);

CREATE TABLE Timeframe (timeframe TEXT NOT NULL, symbolID INTEGER NOT NULL);

CREATE TABLE OHLCV (date TEXT NOT NULL CHECK (date LIKE '____-__-__ __:__:__'),
    open REAL NOT NULL,
    high REAL NOT NULL,
    low REAL NOT NULL,
    close REAL NOT NULL,
    volume INTEGER NOT NULL,
    timeframeID INTEGER NOT NULL);

这意味着我的查询当前类似于:查找给定符号/时间范围的timeframeID,然后在timeframeID匹配的OHLCV表上执行选择.



1> boe100..:

我们试图找到一个适当的数据库结构,用于长时间存储大量数据.以下解决方案是超过6年经验的结果.它现在可以完美地进行定量分析.

我们已经能够在SQL Server中使用此方案存储数百GB的日内和日常数据:

 Symbol -  char 6
 Date -  date
 Time -  time
 Open -  decimal 18, 4
 High -  decimal 18, 4
 Low -  decimal 18, 4
 Close -  decimal 18, 4
 Volume -  int

所有交易工具都存储在一个表中.我们还在符号,日期和时间列上有一个聚簇索引.

对于每日数据,我们有一个单独的表,不使用时间列.卷数据类型也是bigint而不是int.

表现?我们可以在几毫秒内从服务器获取数据.请记住,数据库大小几乎是1太字节.

我们从Kibot网站购买了所有历史市场数据:http://www.kibot.com/


我们每天跟踪拆分和股息,并删除然后批量插入需要更改的每个符号的数据.
那么你如何迎合股票分割?

2> Michiel Budd..:

好吧,从积极的方面来说,你首先要求输入是有道理的.这使您领先于不熟悉数据库设计的90%的人.

没有明确的外键关系.我把它与之timeframeID相关symbolID

目前还不清楚你如何能够以这种方式找到任何东西.阅读上述外键可以轻松提高您的理解力.

您将时间范围数据存储为TEXT.从性能和可用性的角度来看,这是一个禁忌.

您当前的方案无法适应最终会发生的股票拆分.最好在价格数据表和符号之间再添一个间接层

open,high,low,close价格更好存储为小数或货币类型,或者,优选地,作为INTEGER与单独的字段INTEGER字段,其存储所述除数,作为最小价格分数(美分,一元等的八分)允许每交换而变化.

由于您支持多个交易,因此您应支持多种货币.

如果所有这些看起来都不具有"建设性",我很抱歉,特别是因为我现在太困了,建议一个更有用的选择.我希望上面的内容足以让你顺利上路.

推荐阅读
爱唱歌的郭少文_
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有