股票的量交易量排名的加密货币交易所- 加密货币所化中如何建立数据库如何构建数据存储和检索-3
2026-02-21交易所,交易所排名,交易所排行,加密货币是什么,加密货币交易平台,加密货币平台,币安交易所,火币交易所,欧意交易所,Bybit,Coinbase,Bitget,Kraken,全球交易所排名,交易所排行
我们可以将所有买入/卖出信息作为空格分隔的值存储在单个文件中。由于我们需要随机访问,因此我们将在每个自然日将这些数据分离到一个文件中。20 年来,最多可包含 7300 个文件,这绝对是任何现代操作系统可以处理的极限范围内的数字。
我们也许应该根据交易时段对数据进行分组。根据存储数据的经验,使用统一时区的自然日会好很多。如果我们想分析特定时间(例如 9:30 之后),我们可以在分析中执行此操作。但数据应按自然日存储。因为这样做最容易。您可能会提出“亚洲时段可以包括前一个自然日的结束和当前自然日的开始”或“我想处理正常和延长的交易时间并且延长的时间跨越两个自然日”等反对意见。所有的反对意见都可以尝试,但同样,即使在处理这些问题时,我们找到的最简单的答案总是相同的:存储按统一时区、自然天数分组为最简单。
UNIX 世界的一个伟大成就是目录结构。使用它是免费的而且零维护。因此可以按年和月或年和月和日将目录中的文件分组。我们一般选择了后者,因为我们打算进一步部署更多具有聚合信息的文件。
不要将数据存储在 CSV 中,建议使用固定大小的字段。这两者的初始区别是不大的,但后面会有很大的性能优势的区别。第一个字段的长度是可变的(1.1373 和 1.13732),在第二种情况下,我们可以为每个字段定义精确的长度,并在需要时用零填充(1.13730 和 1.13732)。在上面的例子中,我们知道 EURUSD 有 5 个小数位和 1 个自然位,所以每个价格正好需要 7 个字符。这会简化在 C 和 Java 中使用低级例程的过程,也会让我们的回测数据检索更快。这里不要使用逗号,因为在 UNIX 中列通常用空格分隔,并且因为当列用空格分隔时手动检查文件更容易。通过使用CSV技术和读取固定大小的字段,我们会得到很好的使用性能,宽度字段也是如此。
我们可以编写一个简单的、自包含的命令行工具来检索给定日期的所有数据并存储它。由于我们已经定义了每天数据的去向,因此可以轻松完成。有一个名为curl的工具,可以帮我们检索,我们还需要一个小脚本来迭代请求,因为每天可能有超过 10000 条记录。我们可以使用 Python 或仅使用 shell 脚本来完成。我们要重视用现有的工具来简化编程。
每天检索数据真的很耗时。所以我们可以写一个命令来检索一整年的数据。在这种情况下,在 Python 中解析日期更容易,因此可以在 Python 中编写命令。它只是在循环中调用前一个。
这个工具最好用 Python 编写,因为处理日期更容易。它遵循构建小型工具的 UNIX 方法,该方法仅解决一个具体需求。
在此系列中,我们简要回顾了在存储用于回测的财务数据方面通常如何着手,我们还介绍了一种非常简单的检索和存储数据的方法。通过两个简单的工具执行简单的步骤,我们已经有效地将数据存储和检索了。不仅如此,我们还介绍了一种存储数据的方式,这种方式非常易于交流、理解和记忆,并且零维护。这种想法在任何软件项目中都非常重要。
这些文件很紧凑,很容易在自然日内寻址。我们可以很容易地定位到任何特定的时间,因为每个文件都有固定宽度的记录,大约80Kbytes,这很容易解析,如果我们真的需要跳转到特定的位置,也很容易实现搜索算法。
使用分析所需的特定聚合数据创建新文件的进一步聚合阶段加强了这一点。如果我们把每条记录都设置为相同的长度,那么纯列固定宽度文件就可以在每种语言或工具(Octave、R、Python、C、Java、sed、awk 等)中使用了。
在自营交易运行分析和对历史数据的回溯测试的背景下尤其如此。主要关注点可能是访问时间,回测和分析通常涉及对顺序数据的大量计算,因此磁盘访问时间通常可以忽略不计。如果没有,数据总是可以放在缓存的 RAM 文件系统上,这样无需编写一行代码即可解决问题。
如果需要远程访问数据,可以使用简单的 NFS,或者可以部署 HTTP 服务器来分发文件。只需几行配置,我们将拥有一个 REST 服务,而无需编写一行简单的代码。结论是 UNIX 有许多旨在简化和重用的工具和服务,无论该技术看起来有多老:编程并不总是答案。
如果我们正在处理聚合的基本 OHLC 数据,则根本不存储数据并向数据提供者请求按需数据也是一种选择。一般情况下我们总是希望对数据、自定义计算或聚合进行处理。如我们正在迭代大量数据就需要下载数据并在本地访问它。


