Skip to content

📘 抢先掌握!Freqtrade 策略"启动+循环"双核,交易机器人逆袭秘籍!

在 Freqtrade 策略框架中,bot_start()bot_loop_start() 是两个重要的生命周期回调函数,它们为开发者提供了在机器人启动及主循环开始时插入自定义逻辑的能力。理解和合理利用这两个函数,可以帮助你更灵活地控制交易机器人行为,提升策略表现与扩展性。

⚙️ bot_start() - 机器人启动

作用

在机器人启动并完成初始化后调用一次

适合放置启动时需要执行的逻辑,如:

  • 预加载数据
  • 初始化自定义资源或服务
  • 发送启动通知
  • 打印欢迎信息或日志

注意点

  • 只调用一次,启动时触发
  • 该函数不应阻塞太久,避免影响启动效率

示例代码

python
def bot_start(self, **kwargs):
    """
    机器人启动时调用,仅执行一次。
    """
    print("[bot_start] 机器人启动,初始化资源...")
    # 示例:加载额外数据
    self.custom_data = self.load_custom_data()
    print("[bot_start] 自定义数据加载完成。")

def load_custom_data(self):
    # 假设自定义数据加载函数
    return {"key": "value"}

⚙️ bot_loop_start() - 机器人循环执行

作用

在每个主交易循环开始时调用(即每个新轮次的事件循环开始)

适合用于:

  • 每轮开始时的状态刷新
  • 监控或日志打印
  • 动态参数调整
  • 周期性外部API调用

注意点

  • 可能被多次调用,执行逻辑需轻量,避免阻塞
  • 可以通过该函数实现动态调整策略运行时的配置

示例代码

python
def bot_loop_start(self, **kwargs):
    """
    每次主交易循环开始时调用。
    """
    print("[bot_loop_start] 新一轮交易循环开始。")
    # 示例:动态刷新某个状态
    self.dynamic_factor = self.calculate_dynamic_factor()

def calculate_dynamic_factor(self):
    # 伪代码:计算一个动态因子
    return 42

🔍 结合示例:实用应用场景

python
class MyStrategy(IStrategy):
    def bot_start(self, **kwargs):
        print("[bot_start] 策略启动,加载配置。")
        self.trade_count = 0

    def bot_loop_start(self, **kwargs):
        print("[bot_loop_start] 新循环开始,已完成交易次数:", self.trade_count)
        # 每轮清理或刷新某些状态
        self.refresh_market_data()

    def refresh_market_data(self):
        # 模拟刷新
        print("[bot_loop_start] 市场数据刷新完毕。")

    def populate_entry_trend(self, dataframe, metadata):
        # 简单示例策略信号
        dataframe['enter_long'] = dataframe['close'] > dataframe['open']
        return dataframe

    def populate_exit_trend(self, dataframe, metadata):
        dataframe['exit_long'] = dataframe['close'] < dataframe['open']
        return dataframe

    def order_filled(self, trade, order):
        self.trade_count += 1
        print(f"[order_filled] 成交数量: {order.amount_filled}")

🧠 总结

回调函数触发时机典型用途注意事项
bot_start()机器人启动后调用一次初始化数据、自定义资源、发送通知不宜阻塞,执行快速
bot_loop_start()每个交易主循环开始时调用动态刷新状态、日志打印、外部数据拉取多次调用,轻量级操作

通过合理利用 bot_start()bot_loop_start(),你可以在 Freqtrade 交易机器人生命周期的关键节点插入自定义逻辑,提升策略灵活性和运行效率。这两个函数属于策略类回调接口的核心组成部分,熟练掌握后可以有效支持复杂交易策略的开发和调试。