如何用 CCXT 下载数字货币历史价格数据

量化课堂 量化课堂
2023年9月19日 15:21

CCXT 简介

CCXT 是一个支持多交易所的加密货币交易库,它集成了 100 多个交易所的 API。

今天用这个库来获取 BTC 合约的历史数据。

其实不用 CCXT 而使用 requests 直接发送请求也可以获取到数据,但是为了保持后续代码的一致性,还是使用 CCXT 来获取数据。

安装 CCXT

使用 Anaconda 在界面安装,或者在命令行内输入:

pip install ccxt

流程

数据获取过程

  1. 初始化 CCXT:CCXT 是下载数据的库,使用前需要进行交易所类的实例化,供后续调用,在此我使用的是某安的合约;
  2. 加载或新建 DataFrame:价格数据以 pandas 的 DataFrame 格式的文件进行保存,如果文件存在则说明存在之前获取的价格数据,否则新建一个空的 DataFrame
  3. 循环获取价格数据:先确定时间范围,每次批量获取 1000 条数据,直到取完所有数据;
  4. 检查重复数据:如果存在时间重复的数据,则报错退出;
  5. 检查缺失数据:如果存在时间缺失的数据,则报错退出;
  6. 保存 DataFrame 为文件。

数据获取

数据获取过程

上面这段代码展示了循环获取价格数据,直到结束的过程。

  1. 代码片段 1:用来确定获取的数据的起止时间范围,停止时间为当前时间。如果是在之前获取的数据后面追加数据,则开始时间是之前数据的最后一条的时间;如果是从头获取,则开始时间设定为 2019 年 10 月 1 日,这个时间是某安合约板块开通的时间。

  2. 代码片段 2:在起止时间范围内,循环获取数据,每次 1000 条,解析后追加到 data 变量中。如果获取的数据条数小于等于 1,则知道数据已经取空了,可以停止。

  3. 代码片段3:将新获取的数据和老数据进行合并,生成新的 DataFramegroup().tail() 这一组语句的目的,是把新旧数据的重复数据进行去重,留下交易量 volume 高的那一条。产生重复的原因是,每次获取 1000 条数据后,简单进行了追加,没有和已有数据进行去重。

数据缺失和重复检查

数据检查

检查缺失数据的方法,是按起止时间范围,生成出每一条时间,和 DataFrame 中的每一条时间对比,看是否有差异。

检查重复数据,使用了 DataFrame 的 duplicated() 函数,它能直接找出重复项。

数据结果样例

数据检查

获取的 BTC 价格数据的 DataFrame 像上面这样。

总结

整个代码中的主要部分,是数据循环获取。

需要着重处理的部分,是新旧数据的拼接和去重问题。

其他辅助部分包括加载旧数据和重复缺失检查。

量化交易体系

本文位于搭建量化交易体系中的获取「数据」下的「获取币圈数据」部分。

如果需要完整代码文件,可以加我的微信「wuzaoquant」发给你。

评论
暂无评论