第 5 章 · 02 数据格式转换 本节摘要:本节讲清 freqtrade 支持的几种历史数据存储格式,以及如何在它们之间互相转换。freqtrade 同时支持 (基于 Apache Arrow,默认推荐)、 (纯文本)、 (gzip 压缩的 json)、 (列式存储)。同一个数据集,不同格式的体积和读取速度差异巨大——以一份 6 个交易对/周期组合(约 1600 万根 K 线)的实测为例:feather 115MB / 1.6 秒,而 json 要 265MB / 17.1 秒。本节先对比四种格式的优劣,讲清为什么默认推荐 feather;再讲 和 两个转换命令的用法;最后说怎么把格式偏好固化进配置文件,避免每次都敲一长串参数。
本节摘要:本节讲清 freqtrade 支持的几种历史数据存储格式,以及如何在它们之间互相转换。freqtrade 同时支持
feather(基于 Apache Arrow,默认推荐)、json(纯文本)、jsongz(gzip 压缩的 json)、parquet(列式存储)。同一个数据集,不同格式的体积和读取速度差异巨大——以一份 6 个交易对/周期组合(约 1600 万根 K 线)的实测为例:feather 115MB / 1.6 秒,而 json 要 265MB / 17.1 秒。本节先对比四种格式的优劣,讲清为什么默认推荐 feather;再讲convert-data和convert-trade-data两个转换命令的用法;最后说怎么把格式偏好固化进配置文件,避免每次都敲一长串参数。
内容来源:原项目文档
docs/data-download.md的 Data format 与 convert-data 章节,汉化并套用体系化模板。
阅读完本节,你应当能够:
freqtrade 的 K 线数据可以落成四种格式:
| 格式 | 本质 | 特点 |
|---|---|---|
feather |
Apache Arrow 列式二进制 | 默认推荐;体积小、读取极快 |
json |
纯文本 JSON | 可读性好,但体积大、慢 |
jsongz |
gzip 压缩的 JSON | 体积最小,但解压慢 |
parquet |
列式存储(仅 OHLCV) | 体积适中、读取快;不支持 trades |
下载时通过 --data-format-ohlcv 和 --data-format-trades 分别指定 OHLCV 与 trades 数据的格式:
freqtrade download-data --exchange binance --pairs BTC/USDT --timeframes 5m \ --data-format-ohlcv feather --data-format-trades feather
OHLCV 与 trades 是两种独立的数据,trades 是逐笔成交(详见第 01 节末),通常只在 Kraken 等无历史 OHLCV 的交易所才用。
官方用一份约 1600 万根 K 线(BTC/ETH/XRP 的 1m + 5m,跨度数年)做的实测对比:
| 格式 | 体积 | 读取时间(list-data --show-timerange) |
|---|---|---|
feather |
115 MB | 1.6 s |
parquet |
149 MB | 2.5 s |
jsongz |
83 MB | 23.6 s |
json |
265 MB | 17.1 s |
结论很清楚:
💡 没有特殊理由就用 feather。下文讲的转换命令,主要用途就是把历史上为了「可读性」存的 json 转成 feather。
convert-data 把磁盘上已有的 OHLCV 数据从一种格式转成另一种。典型场景:早期下载的 json 太大太慢,转成 feather。
# 把 binance 上所有 5m、15m 的 OHLCV 从 json 转成 jsongz,并删除原 json freqtrade convert-data \ --format-from json --format-to jsongz \ --datadir user_data/data/binance \ -t 5m 15m --erase
关键参数:
| 参数 | 说明 |
|---|---|
--format-from |
源格式(json / jsongz / feather / parquet) |
--format-to |
目标格式 |
--datadir |
数据所在目录 |
-t / --timeframes |
只转指定周期;不指定则全转 |
--erase |
转换后删除源格式文件 |
⚠️ --erase 谨慎用:
--erase会删源文件,建议先不加--erase跑一遍,确认目标格式生成无误,再删源文件释放磁盘。
逐笔成交(trades)数据与 OHLCV 是两套独立文件,转换用 convert-trade-data:
# 把 kraken 上的 trades 数据从 jsongz 转回 json freqtrade convert-trade-data \ --format-from jsongz --format-to json \ --datadir user_data/data/kraken --erase
参数与 convert-data 一致,只是作用于 -trades.feather / -trades.json 这类文件。trades 数据本身很大(逐笔),强烈建议用 feather 或 jsongz,不要用纯 json。
如果你之前用 --dl-trades 拉了逐笔成交,又想生成多个周期的 OHLCV(不必重新下载),用 trades-to-ohlcv:
freqtrade trades-to-ohlcv --exchange kraken -t 5m 1h 1d --pairs BTC/EUR ETH/EUR
这会把已有的 trades 数据重采样成指定的多个周期。这通常是 Kraken 用户下载流程的「最后一步」:先 download-data --dl-trades,再 trades-to-ohlcv 生成各周期。
每次敲 --data-format-ohlcv feather 太啰嗦。把它写进 config.json 即可一劳永逸:
{ // ... 其他配置 "dataformat_ohlcv": "feather", "dataformat_trades": "feather" // ... }
写入后,download-data、backtesting、list-data 等所有命令默认就按 feather 读写,不必再传命令行参数。
💡 格式与命令要一致:如果你在配置里改了
dataformat_ohlcv,记得后续所有命令(backtesting、list-data等)都会按新格式找文件。如果磁盘上还是旧格式的数据,会找不到。这时用convert-data先把存量数据转成新格式。
BTC_USDT-5m-feather 又有 BTC_USDT-5m-json,freqtrade 只读配置指定那一种,另一个会被忽略或造成困惑。统一格式,用 list-data 确认。convert-data。--datadir 指错目录,或现货/合约数据混在一个目录,导致回测读到错的数据类型。建议按 <exchange>-<mode> 分目录。parquet 只支持 OHLCV;如果你下 trades,别选 parquet。--format-from --format-to --datadir -t --erase,转 OHLCV;--erase 谨慎用。dataformat_ohlcv / dataformat_trades 写进 config.json,避免每次手敲。convert-data 转存量。下一节,我们用
list-data看本地有哪些数据,用plot-dataframe把 K 线+指标+买卖点画出来,用plot-profit看资金曲线。