Skip to content

📘「揭秘」Freqtrade 策略全生命周期,教你打造稳定盈利的量化交易机器人!

Freqtrade 是一款开源的加密货币量化交易机器人,支持自动化策略执行、回测和实盘交易。理解其策略的完整生命周期,对于开发稳定且高效的量化策略至关重要。

本文将结合核心流程,逐步解读 Freqtrade 策略从启动到平仓的全流程,帮助你掌握策略运行的核心逻辑与关键节点。

策略生命周期概览

Freqtrade 的策略执行是一个有序的循环过程,主要围绕K线周期触发、技术指标计算、买卖信号生成、订单执行与状态监控、持仓管理与平仓处理展开。

以下伪代码简要描述了核心逻辑:

python
while 策略运行中:
    if 有新K线:
        计算技术指标()
        生成买入信号()
        生成卖出信号()
        if 满足买入条件:
            计算仓位()
            确认并下单()
            检查买单状态()
            if 买单失败:
                重试或取消
            else:
                更新持仓
        if 持仓中:
            持仓动态管理()
            更新止损()
            检查卖出条件()
            if 满足卖出条件:
                确认并执行平仓
                检查卖单状态()
                if 卖单失败:
                    重试或取消
    else:
        等待下一周期

下面通过流程图,更直观地展示 Freqtrade 策略的执行流程:

mermaid
flowchart TD
    Start([策略初始化 bot_start]) --> LoopStart[主循环开始 bot_loop_start]
    LoopStart --> NewCandle{新K线到达?<br/>按配置的timeframe触发}
    
    NewCandle -->|是| Indicators[计算技术指标<br/>populate_indicators]
    NewCandle -->|否| LoopStart
    
    Indicators --> EntrySignal[生成买入信号<br/>populate_entry_trend]
    EntrySignal --> ExitSignal[生成卖出信号<br/>populate_exit_trend]
    
    ExitSignal --> CheckEntry{满足买入条件?}
    
    CheckEntry -->|是| CalcStake[计算动态仓位<br/>custom_stake_amount]
    CheckEntry -->|否| Monitor
    
    CalcStake --> ConfirmEntry[订单最终确认<br/>confirm_trade_entry]
    ConfirmEntry --> PlaceOrder[执行下单<br/>类型由order_types配置]
    
    PlaceOrder --> OrderStatus{订单状态<br/>K}
    OrderStatus -->|成功| UpdatePosition[更新持仓数据<br/>order_filled]
    OrderStatus -->|失败| CheckTimeout1[检查超时<br/>check_entry_timeout]
    
    CheckTimeout1 --> RetryCancel1{重试或取消}
    RetryCancel1 -->|重试| PlaceOrder
    RetryCancel1 -->|取消| LoopStart
    
    UpdatePosition --> Monitor[持续监控持仓]
    
    Monitor --> AdjustPosition[动态调仓<br/>adjust_trade_position]
    AdjustPosition --> UpdateStoploss[更新止损位<br/>custom_stoploss]
    UpdateStoploss --> CheckExit[检查退出条件<br/>custom_exit]
    
    CheckExit --> ShouldExit{满足卖出条件?}
    ShouldExit -->|是| ConfirmExit[平仓确认<br/>confirm_trade_exit]
    ShouldExit -->|否| CheckTerminate
    
    ConfirmExit --> ExecuteExit[执行平仓<br/>类型由order_types配置]
    
    ExecuteExit --> ExitStatus{订单状态<br/>T}
    ExitStatus -->|成功| ExitFilled[更新持仓数据<br/>order_filled]
    ExitStatus -->|失败| CheckTimeout2[检查超时<br/>check_exit_timeout]
    
    CheckTimeout2 --> RetryCancel2{重试或取消}
    RetryCancel2 -->|重试| ExecuteExit
    RetryCancel2 -->|取消| LoopStart
    
    ExitFilled --> CheckTerminate
    
    CheckTerminate{收到终止信号?}
    CheckTerminate -->|否| LoopStart
    CheckTerminate -->|是| End([清理资源并退出])

标识符命名由来

标识符含义说明
K买单状态检查(K线检查)判断买入订单是否成交或失败
T卖单状态检查(Trade检查)判断卖出订单是否成交或失败
M买单失败处理(Missed)处理买入订单失败或超时
V卖单失败处理(Voided)处理卖出订单失败或超时
L买单成交回调(Long)买入订单成交后触发回调
U卖单成交回调(Unwind)卖出订单成交后触发回调

注意:这些标识符仅用于简化流程图的表示,实际代码中需调用对应的策略函数,如 order_filled()

关键节点详解

1. 策略初始化(bot_start)

  • 机器人启动时调用,负责初始化策略相关参数、环境和数据结构。
  • 这一阶段为后续的交易循环提供基础保障,确保策略处于正确状态。

2. 主循环开始(bot_loop_start)

  • 每根 K 线周期开始时触发,作为策略执行的节奏节点。
  • 判断是否有新 K 线数据,确保所有计算和决策基于最新市场行情。

3. 技术指标计算(populate_indicators)

  • 计算所有自定义或内置的技术指标(如MA、RSI、MACD等)。
  • 指标数据用于后续信号生成和策略判断。

4. 买卖信号生成(populate_entry_trend / populate_exit_trend)

  • 根据指标和策略逻辑,判断是否满足买入或卖出条件。
  • 买入信号触发买单流程,卖出信号用于持仓中的平仓判断。

5. 买入流程

计算动态仓位(custom_stake_amount)
根据账户余额、风险偏好和策略规则动态计算买入数量。

订单确认(confirm_trade_entry)
对订单价格和数量做最后确认。

执行下单(order_types 配置决定限价或市价)
向交易所提交买单。

订单状态检测(节点K)

  • 成功成交:更新持仓数据,触发 order_filled 回调。
  • 失败或超时:调用超时检查(check_entry_timeout),选择取消订单或重试下单。

6. 持仓监控

  • 持仓期间,持续监控行情和仓位状态。
  • 动态调整仓位(adjust_trade_position)、更新止损(custom_stoploss)。
  • 持续判断是否满足平仓条件(custom_exit)。

7. 平仓流程

平仓确认(confirm_trade_exit)
确认平仓订单参数。

执行平仓(根据 order_types 配置)
提交卖单进行平仓。

订单状态检测(节点T)

  • 成功成交:更新持仓数据,回到主循环。
  • 失败或超时:调用超时检查(check_exit_timeout),重试或取消订单。

8. 循环与终止

  • 每根新 K 线都触发以上流程,持续执行。
  • 当策略收到终止信号时,执行资源清理和安全退出。

总结

Freqtrade 策略生命周期包含:

  1. 策略初始化
  2. 行情驱动的技术指标和信号生成
  3. 订单执行与状态管理(含重试机制)
  4. 持仓动态管理和止损调整
  5. 平仓及循环
  6. 策略安全退出

这一流程保证策略在自动化交易中具备良好的稳定性和灵活性,能够应对复杂多变的市场环境。

掌握此生命周期,能帮助你更有效地设计和优化量化策略,提高实盘表现。


提示:以上内容已转换为标准 Markdown 格式,包含完整的流程图(使用 Mermaid 语法),可以直接复制使用。如果你的 Markdown 编辑器支持 Mermaid,流程图将自动渲染显示。