notes_works/new notes/freqtrade 机器学习和数据落盘.md
2025-04-10 11:13:22 +08:00

6.8 KiB
Raw Blame History

date tags title from
2025-04-08 21:49:37
量化
qna
freqtrade
https://x.com/i/grok?conversation=1909584053176877095

😯: 实现机器学习, Freqtrade需要某个币对多久的历史数据,放到本地机器,以何种形式落盘?

在 Freqtrade 中实现机器学习(特别是通过其 FreqAI 模块进行自适应预测建模)时,对历史数据的需求和存储方式取决于你的具体策略、模型训练需求以及回测或实时交易的时间范围。以下是对你的问题的详细解答:


  1. 需要某个币对多久的历史数据?

Freqtrade 的机器学习功能FreqAI并没有固定的历史数据时长要求而是由以下因素决定

a. 策略和模型的需求

  • 指标计算你的策略中使用的指标如移动平均线、RSI 等)需要一定数量的初始数据(即 startup_candle_count。比如如果你用的是 100 周期的 EMA指数移动平均线至少需要 400 根K线根据 Freqtrade 文档建议4倍周期以确保指标稳定

  • 训练窗口FreqAI 需要足够的数据来训练机器学习模型。训练窗口的大小由你在配置文件中定义的参数 train_period_days 或 live_retrain_hours 决定。例如,如果你设置 train_period_days = 30就需要至少 30 天的数据。

  • 特征工程:如果你启用了复杂的特征工程(如 FreqAI 的自动特征生成,可能生成数千个特征),可能需要更多数据来确保模型不过拟合。

b. 回测或实时交易的需求

  • 回测:回测时需要覆盖整个测试时间段的数据,外加 startup_candle_count 的预热数据。例如,如果你想回测 2024 年 1 月 1 日到 4 月 1 日的 3 个月,使用 5 分钟K线且 startup_candle_count = 400那么需要从 2023 年 12 月中旬开始的数据(约额外 2 天)。

  • 实时交易实时模式下FreqAI 会定期重新训练模型(例如每小时或每天),需要下载足够的历史数据来支持初始训练和后续更新。通常建议至少准备数周到数月的数据,具体取决于你的 train_period_days 设置。

c. 交易所限制

  • 不同交易所提供的历史数据量有限。例如Binance 通常提供较长的 OHLCV 数据历史,而 Kraken 只提供 720 根K线需要用 --dl-trades 下载更多)。你需要确保下载的数据量满足策略和模型的最低要求。

典型建议

  • 短期策略:至少 1-3 个月的数据5 分钟或 1 小时K线

  • 长期策略6 个月到 1 年甚至更长时间的数据。

  • FreqAI 默认示例:文档中常建议从 30 天到 90 天开始,具体取决于你的目标(如预测短期价格波动还是长期趋势)。


  1. 如何放到本地机器?

Freqtrade 提供了一个命令行工具 freqtrade download-data 来下载历史数据并存储到本地。以下是实现步骤:

a. 下载数据的命令

假设你想为某个币对(如 BTC/USDT下载数据

bash

freqtrade download-data --exchange binance --pairs BTC/USDT --timeframes 5m --days 90
  • --exchange指定交易所如 binance、kraken 等)。

  • --pairs指定币对可以用正则表达式如 ".*/USDT" 下载所有 USDT 交易对)。

  • --timeframes指定K线时间框架如 1m、5m、1h默认是 1m 和 5m

  • --days指定下载的天数如 90 天)。

  • --timerange可选指定具体时间范围如 20240101-20240401

b. 增量更新

Freqtrade 支持增量下载。如果你已经下载了数据,可以定期运行类似以下命令更新:

bash

freqtrade download-data --exchange binance --pairs BTC/USDT --timeframes 5m --days 7

这会下载最近 7 天的数据并追加到已有数据中。

c. 数据存储位置

下载的数据默认存储在用户数据目录下的 user_data/data/ 文件夹中,例如:

~/.freqtrade/user_data/data/binance/

  1. 以何种形式落盘?

Freqtrade 默认使用高效的 Feather 文件格式(基于 Apache Arrow存储历史数据。这种格式具有以下特点

  • 高效性:相比 CSV 或 JSONFeather 文件读写速度更快,适合大数据处理。

  • 压缩性:文件大小较小,节省磁盘空间。

  • 兼容性:与 Python 的 Pandas 库无缝集成,方便数据分析。

文件命名约定

  • OHLCV 数据(开盘、高点、低点、收盘、成交量)存储为:

    <pair>-<timeframe>.feather
    

    例如BTC_USDT-5m.feather

  • 如果下载了交易数据trades则存储为

    <pair>-trades.feather
    

    例如BTC_USDT-trades.feather

可选格式

  • 如果你需要其他格式,可以用 freqtrade convert-data 将数据转换为 JSON 或 Parquet。例如

    bash

    freqtrade convert-data --format-from feather --format-to json
    
  • 对于某些特殊交易所(如 Kraken可能需要先下载 trades 数据并转换为 OHLCV 数据:

    bash

    freqtrade trades-to-ohlcv --exchange kraken --pairs BTC/USD --timeframes 5m
    

  1. 实际操作示例

假设你想为 BTC/USDT 下载 90 天的 5 分钟K线数据并用于 FreqAI

  1. 下载数据:

    bash

    freqtrade download-data --exchange binance --pairs BTC/USDT --timeframes 5m --days 90
    
  2. 检查文件: 数据会存储在 ~/.freqtrade/user_data/data/binance/BTC_USDT-5m.feather。

  3. 配置 FreqAI 在 config.json 中设置:

    json

    "freqai": {
        "enabled": true,
        "train_period_days": 60,
        "identifier": "my_model",
        "feature_parameters": {
            "include_timeframes": ["5m"]
        }
    }
    
  4. 运行回测或实时交易:

    bash

    freqtrade backtesting --strategy MyStrategy --freqai
    

  1. 注意事项
  • 磁盘空间5 分钟K线数据每币对每天约产生 288 根K线90 天约为 26,000 根K线一个 Feather 文件大小通常在几 MB 到几十 MB 之间。准备足够的存储空间。

  • 数据完整性:运行 freqtrade list-data 检查下载的数据是否完整。

  • 交易所限制:某些交易所可能需要额外的 API 调用或特殊配置,详见 Freqtrade 文档的“Exchange-specific Notes”部分。


总结

  • 时长:通常需要 1-12 个月的历史数据,具体取决于策略和训练窗口(建议从 30-90 天开始)。

  • 下载方式:使用 freqtrade download-data 命令,存储到本地 user_data/data/ 目录。

  • 存储格式:默认使用 Feather 文件格式,高效且适合机器学习处理。

如果你有更具体的策略或币对需求,可以告诉我,我可以帮你进一步细化!