Skip to content

Freqtrade基础知识

本页面提供有关Freqtrade工作和运作方式的一些基本概念。

Freqtrade术语

  • 策略: 您的交易策略,告诉机器人应该怎么做。
  • 交易: 开仓位。
  • 未成交订单: 当前下在交易所的订单,尚未完成。
  • 交易对: 可交易的货币对,通常格式为Base/Quote(例如,现货交易对为 XRP/USDT,期货交易对为 XRP/USDT:USDT)。
  • 时间周期: 使用的蜡烛图时间长度(例如 "5m""1h",...)。
  • 技术指标: 技术指标(SMA,EMA,RSI,...)。
  • 限价单: 以指定的限价或更优价格执行的限价订单。
  • 市价单:确保成交,可能根据订单大小使价格波动。
  • 当前利润: 当前未实现的利润。主要在机器人和用户界面中使用。
  • 已实现利润: 已经实现的利润。只有与部分成交相关时才相关 - 该页面还解释了此计算逻辑。
  • 总利润: 合并已实现和未实现的利润。相对数值(%)是根据此交易的总投资计算的。

费用处理

Freqtrade的所有利润计算都包括费用。对于回测/超参优化/模拟交易模式,使用交易所的默认费用(交易所的最低费率)。对于实际操作,使用交易所实际应用的费用(包括BNB折扣等)。

货币对命名

Freqtrade遵循ccxt命名约定进行命名。 在错误的市场中使用错误的命名约定通常会导致机器人无法识别交易对,从而导致错误,例如“此交易对不可用”。

现货交易对命名

对于现货交易对,命名格式为base/quote(例如 ETH/USDT)。

期货对命名

对于期货对来说,命名将会是 base/quote:settle (例如 ETH/USDT:USDT)。

机器人执行逻辑

以干运行或实盘模式启动 freqtrade(使用 freqtrade trade)将启动机器人并开始机器人的迭代循环。 这也将运行 bot_start() 回调函数。

默认情况下,机器人循环每隔几秒运行一次(internals.process_throttle_secs)并执行以下操作:

  • 从持久化存储中获取开放的交易。
  • 计算当前可交易的交易对列表。
  • 下载包括所有信息交易对的 OHLCV 数据
    此步骤一次仅执行一次,以避免不必要的网络流量。
  • 调用 bot_loop_start() 策略回调函数。
  • 分析每个交易对的策略。
    • 调用 populate_indicators()
    • 调用 populate_entry_trend()
    • 调用 populate_exit_trend()
  • 检查开放订单的超时。
    • 对于开放的入场订单,调用 check_entry_timeout() 策略回调函数。
    • 对于开放的出场订单,调用 check_exit_timeout() 策略回调函数。
    • 对于开放的入场订单,调用 adjust_entry_price() 策略回调函数。
  • 验证现有仓位并最终下达出场订单。
    • 考虑止损、ROI 和出场信号、custom_exit()custom_stoploss()
    • 根据 exit_pricing 配置设置或使用 custom_exit_price() 回调函数确定出场价格。
    • 在下达出场订单之前,会调用 confirm_trade_exit() 策略回调函数。
  • 如果启用了,通过调用 adjust_trade_position() 检查开放交易的仓位调整情况并根据需要下达其他订单。
  • 检查交易槽是否仍可用(如果达到了 max_open_trades)。
  • 验证入场信号,尝试进入新的仓位。
    • 根据 entry_pricing 配置设置或使用 custom_entry_price() 回调函数确定入场价格。
    • 在保证金和期货模式下,调用 leverage() 策略回调函数确定所需杠杆。
    • 通过调用 custom_stake_amount() 回调函数来确定仓位的规模。
    • 在下达入场订单之前,会调用 confirm_trade_entry() 策略回调函数。

直到机器人停止,这个循环将会不断地重复。

回测 / Hyperopt 执行逻辑

回测Hyperopt 只会执行上述逻辑的一部分,因为大部分交易操作都是完全模拟的。

  • 加载配置的交易对列表的历史数据。
  • 一次调用 bot_start()
  • 计算指标(每个交易对调用 populate_indicators())。
  • 计算入场 / 出场信号(每个交易对调用 populate_entry_trend()populate_exit_trend())。
  • 对于每个蜡烛图的循环模拟入场和出场点。
    • 调用 bot_loop_start() 策略回调函数。
    • 检查订单超时,可以通过 unfilledtimeout 配置或通过 check_entry_timeout() / check_exit_timeout() 策略回调函数。
    • 对于开放的入场订单,调用 adjust_entry_price() 策略回调函数。
    • 检查交易入场信号(enter_long / enter_short 列)。
    • 确认交易的入场和出场(如果策略中实现了,则调用 confirm_trade_entry()confirm_trade_exit())。
    • 调用 custom_entry_price()(如果策略中实现了)来确定入场价格(价格被移动到开盘蜡烛图中)。
    • 在保证金和期货模式下,调用 leverage() 策略回调函数来确定所需杠杆。
    • 通过调用 custom_stake_amount() 回调函数来确定仓位的规模。
    • 如果启用了,通过调用 adjust_trade_position() 检查开放交易的仓位调整情况以及是否需要下达其他订单。
    • 调用 custom_stoploss()custom_exit() 来找到自定义的出场点。
    • 对于基于出场信号、自定义出场和部分出场的出场:调用 custom_exit_price() 来确定出场价格(价格被移动到收盘蜡烛图中)。
  • 生成回测报告输出!!! 注意 回测和Hyperopt在计算中包含了交易所默认的手续费。可以通过指定 --fee 参数来传递自定义的手续费给回测/超参优化。

回调调用频率

回测将每个回调函数最多调用一次每个蜡烛 (--timeframe-detail 可以修改为每个详细蜡烛调用一次)。 大多数回调函数在实时环境中每次迭代都会被调用一次(通常每 ~5 秒) - 这可能导致回测不匹配。