notes_works/new notes/freqtrade 策略窗口 训练窗口.md
2025-04-10 11:13:22 +08:00

5.8 KiB
Raw Permalink Blame History

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

freqtrade 策略 demo 代码拆解

😯: 什么叫窗口(策略和训练)

在 Freqtrade或其他交易和机器学习相关的上下文中窗口Window 是一个非常重要的概念,尤其在策略开发和模型训练中。让我分别从 策略窗口 和 训练窗口 的角度详细解释一下它们的含义,特别是结合 Freqtrade 和机器学习的背景。


  1. 策略窗口Strategy Window

在交易策略中,窗口 通常指的是计算技术指标或分析价格数据时所使用的一段历史数据的时间范围。这个窗口的大小决定了策略如何看待市场趋势或信号。

定义

  • 策略窗口 是指策略在某一时刻比如当前K线用来计算指标或做出交易决策的 历史数据长度。

  • 在 Freqtrade 中,这通常由你的策略代码中定义的 指标周期(如移动平均线的周期)或 startup_candle_count 参数决定。

举例

假设你用的是一个基于简单移动平均线SMA的策略

  • 短期 SMA计算过去 10 根K线的平均价格窗口大小是 10。

  • 长期 SMA计算过去 50 根K线的平均价格窗口大小是 50。

  • 交易信号:当短期 SMA 上穿长期 SMA 时买入,反之卖出。

在 Freqtrade 的策略文件中,你可能这样定义:

python

def populate_indicators(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
    dataframe['sma_short'] = ta.SMA(dataframe, timeperiod=10)  # 窗口大小为10
    dataframe['sma_long'] = ta.SMA(dataframe, timeperiod=50)   # 窗口大小为50
    return dataframe

窗口的作用

  • 短期窗口(如 10 或 20对市场短期波动更敏感适合高频交易或短线策略。

  • 长期窗口(如 50 或 200捕捉更长期的趋势适合趋势跟随策略。

  • 启动数据startup_candle_countFreqtrade 要求在回测或实时交易开始时加载足够的K线数据来“预热”这些指标。例如如果你的最大窗口是 50你需要至少 50 根K线才能让 SMA 正常工作。


  1. 训练窗口Training Window

在 Freqtrade 的 FreqAI 模块中,训练窗口 是指机器学习模型在训练时所使用的一段历史数据的时长。这个窗口决定了模型学习到的模式和预测能力。

定义

  • 训练窗口 是指在某个时间点FreqAI 从历史数据中提取的一段固定长度的数据,用于训练机器学习模型(如回归、分类或强化学习模型)。

  • 在配置文件中,通常通过 train_period_days训练周期天数或类似的参数指定。

配置示例

在 config.json 中:

json

"freqai": {
    "enabled": true,
    "train_period_days": 60,  // 训练窗口为60天
    "identifier": "my_model",
    "feature_parameters": {
        "include_timeframes": ["5m"]
    }
}

这表示 FreqAI 会使用过去 60 天的 5 分钟K线数据来训练模型。

训练窗口的作用

  • 数据范围训练窗口决定了模型能看到多少历史数据。例如60 天的数据可能包含约 17,280 根 5 分钟K线60 × 24 × 12

  • 学习模式:窗口内的数据被用来提取特征(比如价格、成交量、技术指标等),然后训练模型预测目标(如未来 1 小时的价格涨跌)。

  • 动态调整:在实时交易中,训练窗口会“滑动”,不断用最新的数据更新模型。例如,每小时重新训练时,窗口会向前移动一小时,丢弃最老的数据,加入最新的数据。

举例

假设当前是 2025 年 4 月 8 日:

  • train_period_days = 30模型会使用 3 月 10 日到 4 月 8 日的数据训练。

  • 训练完成后,模型预测 4 月 8 日之后的走势。

  • 如果设置了 live_retrain_hours = 24模型会在 4 月 9 日重新训练,使用 3 月 11 日到 4 月 9 日的数据。


策略窗口 vs 训练窗口

特性 策略窗口 训练窗口
定义 用于计算指标的固定历史数据长度 用于训练机器学习模型的历史数据范围
典型大小 10-200 根K线取决于指标 几天到几个月(取决于配置)
Freqtrade 参数 startup_candle_count

或指标周期
train_period_days
目的 生成交易信号 让模型学习市场模式
动态性 随着时间滑动,但长度固定 可滑动,通常长度固定

在 Freqtrade 中的实际应用

策略窗口

  • 你需要确保下载的历史数据足够覆盖最大的策略窗口。例如,如果你的策略用的是 200 周期的 EMAstartup_candle_count 至少设为 200建议 4 倍,即 800以保证稳定性

  • 下载命令:

    bash

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

训练窗口

  • FreqAI 需要更长的数据来训练模型。如果你设置 train_period_days = 60需要至少 60 天的数据。

  • 如果你还启用了回测,可能需要额外的数据来覆盖回测时间。例如,回测 2024 年 1 月到 3 月90 天),加上训练窗口 60 天,总共需要从 2023 年 11 月开始的数据。


总结

  • 策略窗口:是指标计算的“看回”范围,通常较短,决定了交易信号的生成。

  • 训练窗口:是机器学习模型的学习范围,通常较长,决定了模型对市场的理解能力。

在 Freqtrade 中,合理设置这两个窗口非常重要:

  • 策略窗口太小可能错过趋势,太大可能反应迟钝。

  • 训练窗口太短可能导致模型学不到足够模式,太长可能包含过时数据。

如果你有具体的策略代码或 FreqAI 配置需要分析,可以分享给我,我可以帮你进一步优化窗口设置!