ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

freqtrade convert-trade-data 深度解析:成交数据(Trades)存储格式转换与 Kraken CSV 导入模式

freqtrade convert-trade-data 深度解析:成交数据(Trades)存储格式转换与 Kraken CSV 导入模式 freqtrade convert-trade-data 深度解析成交数据Trades存储格式转换与 Kraken CSV 导入模式【免费下载链接】freqtradeFree, open source crypto trading bot项目地址: https://gitcode.com/GitHub_Trending/fr/freqtradefreqtrade convert-trade-data是 freqtrade 数据工具链中专门用于在不同存储格式之间转换逐笔成交数据trades的命令。本文基于仓库文档 convert-trade-data.md 的完整参数说明结合 start_convert_data 与 convert_trades_format 的源码实现系统讲解该命令的参数含义、底层数据流转路径、kraken_csv特殊导入模式以及--erase的删除语义与边界行为帮助你在数据格式迁移、Kraken 历史成交导入等场景中正确且安全地使用它。命令定位它处理的是 Trades 数据而非 OHLCVfreqtrade 提供了三个相邻但职责不同的数据命令在使用前需要先厘清边界参见 arguments.py 中的子命令注册命令作用对象入口函数convert-dataOHLCV 蜡烛数据start_convert_data(ohlcvTrue)convert-trade-data逐笔成交trades数据start_convert_data(ohlcvFalse)trades-to-ohlcv将 trades 聚合为 OHLCVstart_convert_trades三者的注册逻辑如下convert-data与convert-trade-data共用同一个入口函数start_convert_data仅通过ohlcv参数区分分支而trades-to-ohlcv走独立的start_convert_trades流程其文档见 trades-to-ohlcv.mdOHLCV 转换见 convert-data.md。之所以需要转换 trades 格式是因为逐笔成交数据通常由download-data --dl-trades下载而来见>usage: freqtrade convert-trade-data [-h] [-v] [--no-color] [--logfile FILE] [-V] [-c PATH] [-d PATH] [--userdir PATH] [-p PAIRS [PAIRS ...]] --format-from {json,jsongz,feather,parquet,kraken_csv} --format-to {json,jsongz,feather,parquet} [--erase] [--exchange EXCHANGE] options: -h, --help show this help message and exit -p, --pairs PAIRS [PAIRS ...] Limit command to these pairs. Pairs are space- separated. --format-from {json,jsongz,feather,parquet,kraken_csv} Source format for data conversion. --format-to {json,jsongz,feather,parquet} Destination format for data conversion. --erase Clean all existing data for the selected exchange/pairs/timeframes. --exchange EXCHANGE Exchange name. Only valid if no config is provided. Common arguments: -v, --verbose Verbose mode (-vv for more, -vvv to get all messages). --no-color Disable colorization of hyperopt results. May be useful if you are redirecting output to a file. --logfile, --log-file FILE Log to the file specified. Special values are: syslog, journald. See the documentation for more details. -V, --version show programs version number and exit -c, --config PATH Specify configuration file (default: userdir/config.json or config.json whichever exists). Multiple --config options may be used. Can be set to - to read config from stdin. -d, --datadir, --data-dir PATH Path to the base directory of the exchange with historical backtesting data. To see futures data, use trading-mode additionally. --userdir, --user-data-dir PATH Path to userdata directory.核心参数逐一说明如下取值范围以 cli_options.py 中的实际定义为准参数必填取值/说明--format-from是源格式可选json、jsongz、feather、parquet、kraken_csv。注意kraken_csv仅能作为源格式出现--format-to是目标格式可选json、jsongz、feather、parquet不含kraken_csv-p/--pairs否空格分隔的交易对列表将转换范围限定为指定交易对--erase否转换后删除源格式数据。源码层面仅在源格式与目标格式不同时才真正执行删除--exchange否交易所名称仅在未提供配置文件时有效该命令以RunMode.UTIL_NO_EXCHANGE启动不连接交易所-c/--config否指定配置文件默认取userdir/config.json或config.json可多次指定叠加-d/--datadir否数据根目录trades 数据文件位于其中的\exchange\子目录下--userdir否用户数据目录userdata路径-v/--verbose否日志详细度-vv/-vvv逐级提高--no-color/--logfile/-V否禁用彩色输出 / 输出日志到文件或 syslog、journald / 打印版本号其中四种二进制/文本格式的合法性由 constants.py 中的常量统一约束AVAILABLE_DATAHANDLERS [json, jsongz, feather, parquet]--format-from在其基础上额外加入了kraken_csv而--format-to严格限定为这四种标准格式——这与下文源码中kraken_csv分支单独提前返回、不复用 datahandler 通道的实现方式完全一致。底层实现路径从 CLI 参数到 DataHandler命令分发在 arguments.py 中convert-trade-data子命令被注册为start_convert_data的部分应用partialohlcvFalse标志决定了后续走 trades 分支convert_trade_data_cmd subparsers.add_parser( convert-trade-data, helpConvert trade data from one format to another., parents[_common_parser], ) convert_trade_data_cmd.set_defaults(funcpartial(start_convert_data, ohlcvFalse)) self._build_args(optionlistARGS_CONVERT_DATA_TRADES, parserconvert_trade_data_cmd)入口函数配置装配与分支data_commands.py 的start_convert_data负责装配配置并分派def start_convert_data(args: dict[str, Any], ohlcv: bool True) - None: config setup_utils_configuration(args, RunMode.UTIL_NO_EXCHANGE) if ohlcv: migrate_data(config) convert_ohlcv_format(config, convert_fromargs[format_from], convert_toargs[format_to], eraseargs[erase]) else: convert_trades_format(config, convert_fromargs[format_from_trades], convert_toargs[format_to], eraseargs[erase])两个值得注意的细节trades 分支不做migrate_data。OHLCV 分支在转换前会调用migrate_data修复历史数据文件命名而 trades 分支不执行这一步——从源码结构看trades 文件的命名约定见下文文件模式相对简单无需额外迁移逻辑。参数名差异trades 分支读取的源格式参数键是format_from_trades对应 CLI 上同一个--format-from选项与 OHLCV 分支的format_from区分开避免两个子命令共享命名空间时冲突。RunMode.UTIL_NO_EXCHANGE表明该命令不初始化交易所连接纯本地文件操作因此--exchange只在无配置文件时用于确定数据子目录名。核心转换函数convert_trades_format真正的转换逻辑位于 trade_converter.pydef convert_trades_format(config: Config, convert_from: str, convert_to: str, erase: bool): if convert_from kraken_csv: if config[exchange][name] ! kraken: raise OperationalException( Converting from csv is only supported for kraken. Please refer to the documentation for details about this special mode. ) from freqtrade.data.converter.trade_converter_kraken import import_kraken_trades_from_csv import_kraken_trades_from_csv(config, convert_to) return from freqtrade.data.history import get_datahandler src get_datahandler(config[datadir], convert_from) trg get_datahandler(config[datadir], convert_to) if pairs not in config: config[pairs] src.trades_get_pairs(config[datadir]) logger.info(fConverting trades for {config[pairs]}) trading_mode: TradingMode config.get(trading_mode, TradingMode.SPOT) for pair in config[pairs]: data src.trades_load(pair, trading_mode) logger.info(fConverting {len(data)} trades for {pair}) trg.trades_store(pair, data, trading_mode) if erase and convert_from ! convert_to: logger.info(fDeleting source Trade data for {pair}.) src.trades_purge(pair, trading_mode)这段源码揭示了四个关键行为交易对自动发现未指定-p/--pairs时通过src.trades_get_pairs(datadir)扫描源格式下所有可识别的交易对。其实现idatahandler.py是按扩展名 glob 匹配*trades.ext文件并用正则^(\S)(?\-trades\.ext)反解文件名——也就是说trades 数据文件的命名模式固定为\PAIR\-trades.\ext如XRP_ETH-trades.json.gz仓库测试数据 XRP_ETH-trades.json.gz 即为例证。这也解释了为什么源目录中混放的非 trades 文件不会被误转换。加载即清洗trades_loadidatahandler.py在读取文件后会自动调用trades_df_remove_duplicates按timestamp与id两列去重并通过trades_convert_types按TRADES_DTYPES规整数据类型、追加date列。因此转换产出的目标文件天然去重且类型规范。存储只保留标准列trades_storeidatahandler.py在落盘前过滤为DEFAULT_TRADES_COLUMNS即去掉加载时追加的date列保证各格式间列结构一致timestamp、id、type、side、price、amount、cost见 test_converter.py 中的列序断言。--erase的双重条件只有当eraseTrue且源格式不等于目标格式时才删除源文件。这一条件在代码中显式保护了同格式转换这种虽然少见但合法的调用防止把刚读出来的数据立即删掉。kraken_csv 特殊模式--format-from kraken_csv是一条独立的导入通道它不经过 datahandler 的trades_load/trades_store管道而是直接调用 trade_converter_kraken.py 中的import_kraken_trades_from_csv(config, convert_to)将 Kraken 官方导出的 CSV 成交记录解析并写入--format-to指定的标准 trades 格式。两个硬性约束需要牢记源码中直接抛出OperationalException仅 Kraken 可用config[exchange][name]必须为kraken否则命令直接报错退出。这意味着你必须在配置文件中或通过--exchange kraken将交易所设为 kraken仅能作为源格式kraken_csv不出现在--format-to的可选值中即不存在导出为 Kraken CSV的方向。从源码结构看该模式的定位是对于不提供历史 OHLCV 接口的交易所用 CSV 成交导入 trades-to-ohlcv聚合构成一条完整的历史数据自建链路。erase 语义的测试验证对--erase行为的完整往返验证可见于 test_converter.py 中的test_convert_trades_format用例convert_trades_format(default_conf, convert_fromjsongz, convert_tojson, eraseFalse) # 断言新文件存在且源文件仍然存在 convert_trades_format(default_conf, convert_fromjson, convert_tojsongz, eraseTrue) # 断言源json文件被删除目标jsongz文件存在该测试用XRP_ETH-trades.json.gz与XRP_OLD-trades.json.gz两份测试数据tests/testdata/验证了eraseFalse时双格式共存、eraseTrue时源格式文件被清除——与convert_trades_format源码中if erase and convert_from ! convert_to的判定逻辑一一对应。实操建议与常见组合结合上述源码行为给出几个可直接复制的用法假设数据目录为默认user_data/data/exchange/交易所为 kraken# 1. 将 feather 格式 trades 转为压缩的 jsongz转换后删除源文件 freqtrade convert-trade-data --format-from feather --format-to jsongz --erase # 2. 仅转换指定交易对保留源数据 freqtrade convert-trade-data --format-from feather --format-to json -p XRP/ETH ADA/ETH # 3. 无配置文件时用 --exchange 指定交易所数据子目录 freqtrade convert-trade-data --exchange kraken --format-from feather --format-to parquet # 4. Kraken CSV 成交导入配置文件 exchange 需为 kraken导入为 feather 后再聚合为 OHLCV freqtrade convert-trade-data --format-from kraken_csv --format-to feather freqtrade trades-to-ohlcv几点注意事项数据文件命名是自动识别的前提。如果你的 trades 文件不符合\PAIR\-trades.\ext模式idatahandler.py 的正则约定不会被自动发现需先用-p显式指定或修正文件名转换是逐交易对、逐文件格式独立进行的每个交易对转换时都会打印Converting N trades for pair日志便于核对成交量级是否异常feather 与 parquet 均依赖对应 Python 包pyarrow 等见 requirements.txt缺失时应在安装阶段解决而不是转换中途失败同格式转换--format-from与--format-to相同虽然允许但配合--erase时源码保证不会删除源文件这一防自毁行为值得在自动化脚本中依赖该命令纯本地操作、不连接交易所RunMode.UTIL_NO_EXCHANGE可安全地在数据准备流水线中反复执行。小结freqtrade convert-trade-data是 freqtrade 数据管理链路中 trades 数据的格式迁移入口参数层面通过--format-from/--format-to含kraken_csv专属源格式与--erase控制转换方向与清理策略实现层面经由 start_convert_data 分派至 convert_trades_format依托 datahandler 抽象完成按文件模式发现交易对 → 去重规整 → 标准列落盘 → 可选删除源文件的完整流程并由 tests/data/test_converter.py 的往返测试锁定其行为边界。理解这些内部机制后无论是跨格式迁移、压缩存储还是 Kraken 历史成交自建链路都可以有依据地选择参数组合并预判结果。【免费下载链接】freqtradeFree, open source crypto trading bot项目地址: https://gitcode.com/GitHub_Trending/fr/freqtrade创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表