首页 文章

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

提问于
浏览
28

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

我的要求是为多个股票代码存储“条形数据”(日期,开盘价,最高价,最低价,收盘价) . 每个符号也可能有多个时间范围(例如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表上执行选择 .

3 回答

  • 4

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

    • 没有明确的外键关系 . 我把它 timeframeIDsymbolID 有关?

    • 它's unclear how you'能够以这种方式找到任何东西 . 阅读上述外键可以轻松提高您的理解力 .

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

    • 您当前的方案可以更好地在价格数据表和符号之间添加一个间接层

    • openhighlowclose 价格最好存储为十进制或货币类型,或者最好作为 INTEGER 字段存储除数的单独 INTEGER 字段,作为最小价格分数(美分,美元等八个等) . )允许每次交换不同 .

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

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

  • 29

    我们试图找到一个适当的数据库结构,用于长时间存储大量数据 . 以下解决方案是超过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/

  • 26

    我不确定 Timeframe 增加了什么 Value - 这似乎是一种不必要的并发症,但这可能是我认为它们被合并的东西 .

    我还要注意,由于各种原因,股票代码会不时变化 . 这不是一个经常发生的事件,但它确实发生了 . 如果您正在考虑将数据作为时间序列处理,那么您应该知道这个问题,以便在它到来时(如果不是之前)处理它 . 如果你没有跟踪股票(你可能正在研究期货应用程序,比如说),那么这个建议可以用适量的盐来进行 .

    再次主要与股票相关,其他地方已经提到了拆分,你可能想要考虑股息 - 股票的价格通常会在除息日除以股息金额(或者更确切地说是其现值),这可能会被误解为你不知道确认的未来现金流是什么原因 . 权利问题也很有趣 .

    如果您计划查看特定符号的一系列数据,我建议您研究一下您将获得的性能 . 至少,确保您有适当的索引 .

相关问题