據(jù)(Trades)存儲(chǔ)格式轉(zhuǎn)換與 Kraken CSV 導(dǎo)入模式)
freqtrade convert-trade-data 深度解析成交數(shù)據(jù)Trades存儲(chǔ)格式轉(zhuǎn)換與 Kraken CSV 導(dǎo)入模式【免費(fèi)下載鏈接】freqtradeFree, open source crypto trading bot項(xiàng)目地址: https://gitcode.com/GitHub_Trending/fr/freqtradefreqtrade convert-trade-data是 freqtrade 數(shù)據(jù)工具鏈中專門用于在不同存儲(chǔ)格式之間轉(zhuǎn)換逐筆成交數(shù)據(jù)trades的命令。本文基于倉(cāng)庫(kù)文檔 convert-trade-data.md 的完整參數(shù)說明結(jié)合 start_convert_data 與 convert_trades_format 的源碼實(shí)現(xiàn)系統(tǒng)講解該命令的參數(shù)含義、底層數(shù)據(jù)流轉(zhuǎn)路徑、kraken_csv特殊導(dǎo)入模式以及--erase的刪除語(yǔ)義與邊界行為幫助你在數(shù)據(jù)格式遷移、Kraken 歷史成交導(dǎo)入等場(chǎng)景中正確且安全地使用它。命令定位它處理的是 Trades 數(shù)據(jù)而非 OHLCVfreqtrade 提供了三個(gè)相鄰但職責(zé)不同的數(shù)據(jù)命令在使用前需要先厘清邊界參見 arguments.py 中的子命令注冊(cè)命令作用對(duì)象入口函數(shù)convert-dataOHLCV 蠟燭數(shù)據(jù)start_convert_data(ohlcvTrue)convert-trade-data逐筆成交trades數(shù)據(jù)start_convert_data(ohlcvFalse)trades-to-ohlcv將 trades 聚合為 OHLCVstart_convert_trades三者的注冊(cè)邏輯如下convert-data與convert-trade-data共用同一個(gè)入口函數(shù)start_convert_data僅通過ohlcv參數(shù)區(qū)分分支而trades-to-ohlcv走獨(dú)立的start_convert_trades流程其文檔見 trades-to-ohlcv.mdOHLCV 轉(zhuǎn)換見 convert-data.md。之所以需要轉(zhuǎn)換 trades 格式是因?yàn)橹鸸P成交數(shù)據(jù)通常由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.核心參數(shù)逐一說明如下取值范圍以 cli_options.py 中的實(shí)際定義為準(zhǔn)參數(shù)必填取值/說明--format-from是源格式可選json、jsongz、feather、parquet、kraken_csv。注意kraken_csv僅能作為源格式出現(xiàn)--format-to是目標(biāo)格式可選json、jsongz、feather、parquet不含kraken_csv-p/--pairs否空格分隔的交易對(duì)列表將轉(zhuǎn)換范圍限定為指定交易對(duì)--erase否轉(zhuǎn)換后刪除源格式數(shù)據(jù)。源碼層面僅在源格式與目標(biāo)格式不同時(shí)才真正執(zhí)行刪除--exchange否交易所名稱僅在未提供配置文件時(shí)有效該命令以RunMode.UTIL_NO_EXCHANGE啟動(dòng)不連接交易所-c/--config否指定配置文件默認(rèn)取userdir/config.json或config.json可多次指定疊加-d/--datadir否數(shù)據(jù)根目錄trades 數(shù)據(jù)文件位于其中的\exchange\子目錄下--userdir否用戶數(shù)據(jù)目錄userdata路徑-v/--verbose否日志詳細(xì)度-vv/-vvv逐級(jí)提高--no-color/--logfile/-V否禁用彩色輸出 / 輸出日志到文件或 syslog、journald / 打印版本號(hào)其中四種二進(jìn)制/文本格式的合法性由 constants.py 中的常量統(tǒng)一約束AVAILABLE_DATAHANDLERS [json, jsongz, feather, parquet]--format-from在其基礎(chǔ)上額外加入了kraken_csv而--format-to嚴(yán)格限定為這四種標(biāo)準(zhǔn)格式——這與下文源碼中kraken_csv分支單獨(dú)提前返回、不復(fù)用 datahandler 通道的實(shí)現(xiàn)方式完全一致。底層實(shí)現(xiàn)路徑從 CLI 參數(shù)到 DataHandler命令分發(fā)在 arguments.py 中convert-trade-data子命令被注冊(cè)為start_convert_data的部分應(yīng)用partialohlcvFalse標(biāo)志決定了后續(xù)走 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)入口函數(shù)配置裝配與分支data_commands.py 的start_convert_data負(fù)責(zé)裝配配置并分派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])兩個(gè)值得注意的細(xì)節(jié)trades 分支不做migrate_data。OHLCV 分支在轉(zhuǎn)換前會(huì)調(diào)用migrate_data修復(fù)歷史數(shù)據(jù)文件命名而 trades 分支不執(zhí)行這一步——從源碼結(jié)構(gòu)看trades 文件的命名約定見下文文件模式相對(duì)簡(jiǎn)單無需額外遷移邏輯。參數(shù)名差異trades 分支讀取的源格式參數(shù)鍵是format_from_trades對(duì)應(yīng) CLI 上同一個(gè)--format-from選項(xiàng)與 OHLCV 分支的format_from區(qū)分開避免兩個(gè)子命令共享命名空間時(shí)沖突。RunMode.UTIL_NO_EXCHANGE表明該命令不初始化交易所連接純本地文件操作因此--exchange只在無配置文件時(shí)用于確定數(shù)據(jù)子目錄名。核心轉(zhuǎn)換函數(shù)convert_trades_format真正的轉(zhuǎn)換邏輯位于 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)這段源碼揭示了四個(gè)關(guān)鍵行為交易對(duì)自動(dòng)發(fā)現(xiàn)未指定-p/--pairs時(shí)通過src.trades_get_pairs(datadir)掃描源格式下所有可識(shí)別的交易對(duì)。其實(shí)現(xiàn)idatahandler.py是按擴(kuò)展名 glob 匹配*trades.ext文件并用正則^(\S)(?\-trades\.ext)反解文件名——也就是說trades 數(shù)據(jù)文件的命名模式固定為\PAIR\-trades.\ext如XRP_ETH-trades.json.gz倉(cāng)庫(kù)測(cè)試數(shù)據(jù) XRP_ETH-trades.json.gz 即為例證。這也解釋了為什么源目錄中混放的非 trades 文件不會(huì)被誤轉(zhuǎn)換。加載即清洗trades_loadidatahandler.py在讀取文件后會(huì)自動(dòng)調(diào)用trades_df_remove_duplicates按timestamp與id兩列去重并通過trades_convert_types按TRADES_DTYPES規(guī)整數(shù)據(jù)類型、追加date列。因此轉(zhuǎn)換產(chǎn)出的目標(biāo)文件天然去重且類型規(guī)范。存儲(chǔ)只保留標(biāo)準(zhǔn)列trades_storeidatahandler.py在落盤前過濾為DEFAULT_TRADES_COLUMNS即去掉加載時(shí)追加的date列保證各格式間列結(jié)構(gòu)一致timestamp、id、type、side、price、amount、cost見 test_converter.py 中的列序斷言。--erase的雙重條件只有當(dāng)eraseTrue且源格式不等于目標(biāo)格式時(shí)才刪除源文件。這一條件在代碼中顯式保護(hù)了同格式轉(zhuǎn)換這種雖然少見但合法的調(diào)用防止把剛讀出來的數(shù)據(jù)立即刪掉。kraken_csv 特殊模式--format-from kraken_csv是一條獨(dú)立的導(dǎo)入通道它不經(jīng)過 datahandler 的trades_load/trades_store管道而是直接調(diào)用 trade_converter_kraken.py 中的import_kraken_trades_from_csv(config, convert_to)將 Kraken 官方導(dǎo)出的 CSV 成交記錄解析并寫入--format-to指定的標(biāo)準(zhǔn) trades 格式。兩個(gè)硬性約束需要牢記源碼中直接拋出OperationalException僅 Kraken 可用config[exchange][name]必須為kraken否則命令直接報(bào)錯(cuò)退出。這意味著你必須在配置文件中或通過--exchange kraken將交易所設(shè)為 kraken僅能作為源格式kraken_csv不出現(xiàn)在--format-to的可選值中即不存在導(dǎo)出為 Kraken CSV的方向。從源碼結(jié)構(gòu)看該模式的定位是對(duì)于不提供歷史 OHLCV 接口的交易所用 CSV 成交導(dǎo)入 trades-to-ohlcv聚合構(gòu)成一條完整的歷史數(shù)據(jù)自建鏈路。erase 語(yǔ)義的測(cè)試驗(yàn)證對(duì)--erase行為的完整往返驗(yàn)證可見于 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文件被刪除目標(biāo)jsongz文件存在該測(cè)試用XRP_ETH-trades.json.gz與XRP_OLD-trades.json.gz兩份測(cè)試數(shù)據(jù)tests/testdata/驗(yàn)證了eraseFalse時(shí)雙格式共存、eraseTrue時(shí)源格式文件被清除——與convert_trades_format源碼中if erase and convert_from ! convert_to的判定邏輯一一對(duì)應(yīng)。實(shí)操建議與常見組合結(jié)合上述源碼行為給出幾個(gè)可直接復(fù)制的用法假設(shè)數(shù)據(jù)目錄為默認(rèn)user_data/data/exchange/交易所為 kraken# 1. 將 feather 格式 trades 轉(zhuǎn)為壓縮的 jsongz轉(zhuǎn)換后刪除源文件 freqtrade convert-trade-data --format-from feather --format-to jsongz --erase # 2. 僅轉(zhuǎn)換指定交易對(duì)保留源數(shù)據(jù) freqtrade convert-trade-data --format-from feather --format-to json -p XRP/ETH ADA/ETH # 3. 無配置文件時(shí)用 --exchange 指定交易所數(shù)據(jù)子目錄 freqtrade convert-trade-data --exchange kraken --format-from feather --format-to parquet # 4. Kraken CSV 成交導(dǎo)入配置文件 exchange 需為 kraken導(dǎo)入為 feather 后再聚合為 OHLCV freqtrade convert-trade-data --format-from kraken_csv --format-to feather freqtrade trades-to-ohlcv幾點(diǎn)注意事項(xiàng)數(shù)據(jù)文件命名是自動(dòng)識(shí)別的前提。如果你的 trades 文件不符合\PAIR\-trades.\ext模式idatahandler.py 的正則約定不會(huì)被自動(dòng)發(fā)現(xiàn)需先用-p顯式指定或修正文件名轉(zhuǎn)換是逐交易對(duì)、逐文件格式獨(dú)立進(jìn)行的每個(gè)交易對(duì)轉(zhuǎn)換時(shí)都會(huì)打印Converting N trades for pair日志便于核對(duì)成交量級(jí)是否異常feather 與 parquet 均依賴對(duì)應(yīng) Python 包pyarrow 等見 requirements.txt缺失時(shí)應(yīng)在安裝階段解決而不是轉(zhuǎn)換中途失敗同格式轉(zhuǎn)換--format-from與--format-to相同雖然允許但配合--erase時(shí)源碼保證不會(huì)刪除源文件這一防自毀行為值得在自動(dòng)化腳本中依賴該命令純本地操作、不連接交易所RunMode.UTIL_NO_EXCHANGE可安全地在數(shù)據(jù)準(zhǔn)備流水線中反復(fù)執(zhí)行。小結(jié)freqtrade convert-trade-data是 freqtrade 數(shù)據(jù)管理鏈路中 trades 數(shù)據(jù)的格式遷移入口參數(shù)層面通過--format-from/--format-to含kraken_csv專屬源格式與--erase控制轉(zhuǎn)換方向與清理策略實(shí)現(xiàn)層面經(jīng)由 start_convert_data 分派至 convert_trades_format依托 datahandler 抽象完成按文件模式發(fā)現(xiàn)交易對(duì) → 去重規(guī)整 → 標(biāo)準(zhǔn)列落盤 → 可選刪除源文件的完整流程并由 tests/data/test_converter.py 的往返測(cè)試鎖定其行為邊界。理解這些內(nèi)部機(jī)制后無論是跨格式遷移、壓縮存儲(chǔ)還是 Kraken 歷史成交自建鏈路都可以有依據(jù)地選擇參數(shù)組合并預(yù)判結(jié)果?!久赓M(fèi)下載鏈接】freqtradeFree, open source crypto trading bot項(xiàng)目地址: https://gitcode.com/GitHub_Trending/fr/freqtrade創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考