Skip to article frontmatterSkip to article content
配置指南

配置 Freqtrade

完整的配置参数说明

配置机器人

Freqtrade 拥有众多可配置的功能和选项。

默认情况下,这些设置通过配置文件进行管理(见下文)。

Freqtrade 配置文件

机器人在运行过程中会使用一组配置参数,这些参数共同构成了机器人的配置。通常,机器人会从一个文件(Freqtrade 配置文件)中读取其配置。

默认情况下,机器人会从当前工作目录下的 config.json 文件加载配置。

你可以通过 -c/--config 命令行选项指定机器人使用的其他配置文件。

如果你使用了快速入门方法安装机器人,安装脚本应该已经为你创建了默认的配置文件(config.json)。

如果没有创建默认配置文件,建议使用 freqtrade new-config --config user_data/config.json 生成一个基础配置文件。

Freqtrade 配置文件需采用 JSON 格式编写。

除了标准的 JSON 语法外,你还可以在配置文件中使用单行 // ... 和多行 /* ... */ 注释,以及参数列表中的尾随逗号。

如果你不熟悉 JSON 格式也不用担心——只需用你喜欢的编辑器打开配置文件,修改你需要的参数,保存更改,最后重启机器人或在停止后重新运行即可。机器人在启动时会验证配置文件的语法,如果你编辑时出现错误,会在启动时警告并指出有问题的行。

环境变量

可以通过环境变量设置 Freqtrade 配置中的选项。 这会优先于配置文件或策略中的对应值。

环境变量必须以 FREQTRADE__ 为前缀,才能被 freqtrade 加载到配置中。

__ 作为层级分隔符,因此格式应为 FREQTRADE__{section}__{key}。 例如,定义 export FREQTRADE__STAKE_AMOUNT=200 会在配置中生成 {stake_amount: 200}

更复杂的例子如 export FREQTRADE__EXCHANGE__KEY=<yourExchangeKey>,用于保护你的交易所密钥安全。这样会将值放入配置的 exchange.key 部分。 使用这种方式,所有配置项都可以通过环境变量设置。

请注意,环境变量会覆盖配置文件中的对应设置,但命令行参数始终具有最高优先级。

常见示例:

FREQTRADE__TELEGRAM__CHAT_ID=<telegramchatid>
FREQTRADE__TELEGRAM__TOKEN=<telegramToken>
FREQTRADE__EXCHANGE__KEY=<yourExchangeKey>
FREQTRADE__EXCHANGE__SECRET=<yourExchangeSecret>

JSON 列表会被解析为 json,因此你可以如下设置交易对列表:

export FREQTRADE__EXCHANGE__PAIR_WHITELIST='["BTC/USDT", "ETH/USDT"]'

多配置文件

可以为机器人指定多个配置文件,或让机器人从标准输入流读取配置参数。

你可以在 add_config_files 中指定额外的配置文件。

该参数指定的文件会在初始配置文件加载后合并。

文件路径相对于初始配置文件解析。

这类似于使用多个 --config 参数,但更简单,无需每次都为所有命令指定所有文件。

编辑器自动补全与校验

如果你使用支持 JSON schema 的编辑器,可以通过在配置文件顶部添加以下内容,获得自动补全和校验功能:

{
    "$schema": "https://schema.freqtrade.io/schema.json",
}

配置参数

下表列出了所有可用的配置参数。

Freqtrade 也可以通过命令行(CLI)参数加载许多选项(可通过 --help 查看详情)。

配置项优先级

所有选项的优先级如下:

参数表

必填参数标记为 必需,表示必须通过某种方式设置。

策略中的参数

以下参数可在配置文件或策略中设置。

配置文件中的值会覆盖策略中的值。

每笔交易的金额配置

有多种方式配置机器人每笔交易使用的 stake 货币数量。所有方法都遵循可交易余额配置的说明。

最小交易金额

最小交易金额取决于交易所和交易对,通常可在交易所支持页面查到。

假设 XRP/USD 的最小可交易数量为 20 XRP(由交易所规定),价格为 0.6 美元,则买入该交易对的最小金额为 20 * 0.6 ~= 12

该交易所还规定所有订单必须大于 10 美元,但本例不受影响。

为保证安全执行,freqtrade 不允许用 10.1 美元买入,而是确保有足够空间在交易对下方设置止损(加上 amount_reserve_percent,默认 5%)。

预留 5% 后,最小交易金额约为 12.6 美元(12 * (1 + 0.05))。若再考虑 10% 止损,则为约 14 美元(12.6 / (1 - 0.1))。

为防止止损过大导致计算值过高,计算出的最小交易金额不会超过实际限制的 1.5 倍。

Dry-run 钱包

在 dry-run 模式下,机器人会用模拟钱包执行交易。该钱包的起始余额由 dry_run_wallet 定义(默认 1000)。

对于更复杂的场景,也可以为 dry_run_wallet 分配一个字典,分别定义每种货币的起始余额。

"dry_run_wallet": {
    "BTC": 0.01,
    "ETH": 2,
    "USDT": 1000
}

命令行参数(--dry-run-wallet)可覆盖配置值,但仅适用于浮点数,字典需在配置文件中设置。

可交易余额

默认情况下,机器人假定"总余额 - 1%"可用于交易,使用动态交易金额时,会将总余额按 max_open_trades 平均分配。

freqtrade 会为手续费预留 1%,默认不会动用。

可通过 tradable_balance_ratio 设置"保留"金额。

例如,钱包有 10 ETH,tradable_balance_ratio=0.5(50%),则机器人最多用 5 ETH 交易,其余不参与。

分配可用资金

若在同一交易所账户运行多个机器人,为充分利用复利,可为每个机器人限定起始余额。

可通过设置 available_capital 实现。

假设账户有 10000 USDT,想运行 2 个策略,则设 available_capital=5000,每个机器人初始资金 5000 USDT。

机器人会将该余额平均分配到 max_open_trades

盈利会增加该机器人的持仓,不影响其他机器人。

调整 available_capital 需重载配置。减少资金时不会平仓,差额在交易结束后返还钱包。实际效果取决于调整与平仓间的价格变动。

调整最后一笔交易金额

假设可交易余额 1000 USDT,stake_amount=400max_open_trades=3

机器人会开 2 单,最后一单因余额不足 400 USDT 无法开仓。

可通过 amend_last_stake_amount 设为 True,使机器人自动将最后一单金额降为可用余额。

如上例:

静态交易金额

stake_amount 静态配置每笔交易的金额。

最小配置值为 0.0001,但请查阅交易所最低限额。

该设置与 max_open_trades 联用,最大持仓为 stake_amount * max_open_trades

如配置 max_open_trades=3stake_amount=0.05,则最多用 (0.05 BTC x 3) = 0.15 BTC。

动态交易金额

也可用动态交易金额,自动将可用余额按允许交易数平均分配。

配置方法:stake_amount="unlimited",建议同时设 tradable_balance_ratio=0.99(99%),以预留手续费。

此时每笔交易金额为:

currency_balance / (max_open_trades - current_open_trades)

如需让机器人用尽所有 stake_currency(减去 tradable_balance_ratio),配置如下:

"stake_amount" : "unlimited",
"tradable_balance_ratio": 0.99,
动态交易金额与持仓调整

若需在无限持仓下用持仓调整,需在策略中实现 custom_stake_amount,返回合适的金额。

典型值为建议金额的 25%-50%,具体视策略和预留资金而定。

如持仓调整假设可加仓 2 次,则应预留 66.6667% 作为缓冲。

如假设可加仓 1 次且金额为原始的 3 倍,则 custom_stake_amount 应返回建议金额的 25%,其余 75% 预留。

订单使用的价格

常规订单的价格可以通过参数结构 entry_pricing(用于交易入场)和 exit_pricing(用于交易出场)来控制。 价格总是在下单前通过查询交易所行情或使用订单簿数据获取。

入场价格

入场价格方向

配置设置 entry_pricing.price_side 定义了机器人在买入时查看订单簿的哪一侧。

以下显示了一个订单簿:

...
103
102
101  # ask(卖价)
-------------当前价差
99   # bid(买价)
98
97
...

如果 entry_pricing.price_side 设置为 "bid",则机器人将使用 99 作为入场价格。
相应地,如果 entry_pricing.price_side 设置为 "ask",则机器人将使用 101 作为入场价格。

根据订单方向(做多/做空),这会导致不同的结果。因此,我们建议在此配置中使用 "same""other"。 这将产生以下价格矩阵:

方向订单设置价格是否跨越价差
做多买入ask101
做多买入bid99
做多买入same99
做多买入other101
做空卖出ask101
做空卖出bid99
做空卖出same101
做空卖出other99

使用订单簿的另一侧通常可以保证订单更快成交,但机器人也可能支付比必要更多的费用。 即使使用限价买单,也很可能适用吃单费用而不是挂单费用。 此外,价差"另一侧"的价格高于订单簿中"买价"侧的价格,因此订单行为类似于市价单(但有一个最高价格限制)。

启用订单簿的入场价格

当启用订单簿入场(entry_pricing.use_order_book=True)时,Freqtrade 从订单簿获取 entry_pricing.order_book_top 个条目,并使用在配置的订单簿侧(entry_pricing.price_side)上指定的条目作为入场价格。1 表示订单簿中最顶部的条目,2 将使用订单簿中的第二个条目,以此类推。

未启用订单簿的入场价格

以下部分使用 side 作为配置的 entry_pricing.price_side(默认为 "same")。

当不使用订单簿(entry_pricing.use_order_book=False)时,如果最佳 side 价格低于行情中的 last 成交价,Freqtrade 将使用行情中的最佳 side 价格。否则(当 side 价格高于 last 价格时),它将基于 entry_pricing.price_last_balance 计算 sidelast 价格之间的比率。

entry_pricing.price_last_balance 配置参数控制这一点。值为 0.0 将使用 side 价格,而 1.0 将使用 last 价格,介于两者之间的值将在卖价和最后价格之间进行插值。

检查市场深度

当启用检查市场深度(entry_pricing.check_depth_of_market.enabled=True)时,入场信号将基于订单簿每侧的深度(所有数量的总和)进行过滤。

订单簿 bid(买入)侧深度除以订单簿 ask(卖出)侧深度,然后将得到的差值与该参数的值 entry_pricing.check_depth_of_market.bids_to_ask_delta 进行比较。只有当订单簿差值大于或等于配置的差值时,才会执行入场订单。

出场价格

出场价格方向

配置设置 exit_pricing.price_side 定义了机器人在出场时查看价差的哪一侧。

以下显示了一个订单簿:

...
103
102
101  # ask(卖价)
-------------当前价差
99   # bid(买价)
98
97
...

如果 exit_pricing.price_side 设置为 "ask",则机器人将使用 101 作为出场价格。
相应地,如果 exit_pricing.price_side 设置为 "bid",则机器人将使用 99 作为出场价格。

根据订单方向(做多/做空),这会导致不同的结果。因此,我们建议在此配置中使用 "same""other"。 这将产生以下价格矩阵:

方向订单设置价格是否跨越价差
做多卖出ask101
做多卖出bid99
做多卖出same101
做多卖出other99
做空买入ask101
做空买入bid99
做空买入same99
做空买入other101
启用订单簿的出场价格

当启用订单簿出场(exit_pricing.use_order_book=True)时,Freqtrade 从订单簿获取 exit_pricing.order_book_top 个条目,并使用在配置的订单簿侧(exit_pricing.price_side)上指定的条目作为交易出场价格。

1 表示订单簿中最顶部的条目,2 将使用订单簿中的第二个条目,以此类推。

未启用订单簿的出场价格

以下部分使用 side 作为配置的 exit_pricing.price_side(默认为 "ask")。

当不使用订单簿(exit_pricing.use_order_book=False)时,如果最佳 side 价格高于行情中的 last 成交价,Freqtrade 将使用行情中的最佳 side 价格。否则(当 side 价格低于 last 价格时),它将基于 exit_pricing.price_last_balance 计算 sidelast 价格之间的比率。

exit_pricing.price_last_balance 配置参数控制这一点。值为 0.0 将使用 side 价格,而 1.0 将使用最后价格,介于两者之间的值将在 side 和最后价格之间进行插值。

市价单定价

使用市价单时,价格应配置为使用订单簿的"正确"一侧,以允许真实的价格检测。 假设入场和出场都使用市价单,必须使用类似以下的配置:

  "order_types": {
    "entry": "market",
    "exit": "market"
    // ...
  },
  "entry_pricing": {
    "price_side": "other",
    // ...
  },
  "exit_pricing":{
    "price_side": "other",
    // ...
  },

显然,如果只有一方使用限价单,则可以使用不同的价格组合。

更多配置细节

理解 minimal_roi

minimal_roi 配置参数为 JSON 对象,键为分钟数,值为最小收益率(比例)。 示例:

"minimal_roi": {
    "40": 0.0,    # 40 分钟后只要不亏损就退出
    "30": 0.01,   # 30 分钟后至少盈利 1% 就退出
    "20": 0.02,   # 20 分钟后至少盈利 2% 就退出
    "0":  0.04    # 立即盈利 4% 就退出
},

大多数策略文件已包含最优的 minimal_roi。 该参数可在策略或配置文件中设置,配置文件优先。 若两者都未设置,则默认 1000%({"0": 10}),即除非盈利 1000% 否则不退出。

理解 force_entry_enable

force_entry_enable 配置参数允许通过 Telegram 和 REST API 使用强制建仓命令(/forcelong/forceshort)。 出于安全考虑,默认禁用,启用时 freqtrade 会在启动时警告。 例如,发送 /forceenter ETH/BTC,机器人会买入该交易对并持有,直到出现常规退出信号(ROI、止损、/forceexit)。

部分策略下此功能风险较大,请谨慎使用。

详见 telegram 文档

忽略过期 K 线

使用较大周期(如 1h)且 max_open_trades 较低时,最后一根 K 线可能在交易位空出时被处理。此时买入信号可能已过最佳时机。

可通过设置 ignore_buying_expired_candle_after,指定买入信号过期秒数。

如策略用 1h 周期,只想在新 K 线前 5 分钟买入,可如下配置:

  {
    //...
    "ignore_buying_expired_candle_after": 300,
    // ...
  }

理解 order_time_in_force

order_time_in_force 配置参数定义订单在交易所的执行策略。

常见有:

GTC(Good Till Canceled):

默认策略,订单会一直保留,直到被用户取消。可全部或部分成交,未成交部分会一直挂单。

FOK(Fill Or Kill):

若订单未能立即且全部成交,则被交易所取消。

IOC(Immediate Or Canceled):

与 FOK 类似,但可部分成交,未成交部分自动取消。

PO(Post only):

仅作为挂单,若不能作为挂单则取消。即订单必须至少挂在盘口一段时间。

请查看交易所文档了解您的交易所支持的有效时间值。

time_in_force 配置

order_time_in_force 参数为字典,包含买入和卖出的策略。 可在配置文件或策略中设置。

配置文件中设置的值会覆盖策略中的值,遵循常规的优先级规则

可选值:GTC(默认)、FOKIOC

"order_time_in_force": {
    "entry": "GTC",
    "exit": "GTC"
},

法币转换

Freqtrade 使用 Coingecko API 将币值转换为法币,用于 Telegram 报告。 法币可通过配置文件的 fiat_display_currency 设置。

移除 fiat_display_currency 可跳过 coingecko 初始化,不会显示法币转换,对机器人运行无影响。

法币可用值

fiat_display_currency 配置参数设置 Telegram 报告中币转法币的基准货币。

可用值:

"AUD", "BRL", "CAD", "CHF", "CLP", "CNY", 
"CZK", "DKK", "EUR", "GBP", "HKD", "HUF", 
"IDR", "ILS", "INR", "JPY", "KRW", "MXN", 
"MYR", "NOK", "NZD", "PHP", "PKR", "PLN", 
"RUB", "SEK", "SGD", "THB", "TRY", "TWD", 
"ZAR", "USD"

除法币外,还支持部分加密货币:

"BTC", "ETH", "XRP", "LTC", "BCH", "BNB"
Coingecko 限流问题

部分 IP 段下,coingecko 限流严重。此时可在配置中添加 coingecko API key。

{
    "fiat_display_currency": "USD",
    "coingecko": {
        "api_key": "your-api",
        "is_demo": true
    }
}

Freqtrade 支持 Coingecko Demo 和 Pro API key。

Coingecko API key 非机器人运行必需,仅用于 Telegram 报告中的币转法币,通常无需 key 也可用。

使用交易所 Websocket

Freqtrade 可通过 ccxt.pro 消费交易所 websocket。

Freqtrade 旨在确保数据始终可用。

若 websocket 连接失败(或被禁用),机器人会回退到 REST API。

如遇到疑似 websocket 问题,可通过 exchange.enable_ws 关闭(默认 true)。

"exchange": {
    // ...
    "enable_ws": false,
    // ...
}

如需使用代理,详见代理配置

使用 Dry-run 模式

建议先用 Dry-run 模式运行机器人,观察策略表现。

Dry-run 模式下不会动用真实资金,仅做实时模拟。

  1. 编辑 config.json 配置文件。
  2. dry_run 设为 true,并指定 db_url
"dry_run": true,
"db_url": "sqlite:///tradesv3.dryrun.sqlite",
  1. 移除交易所 API keysecret(可填空或假值):
"exchange": {
    "name": "binance",
    "key": "key",
    "secret": "secret",
    //"password": "", // 可选,并非所有交易所都需要
    // ...
}

Dry-run 模式下满意后,可切换到生产模式。

Dry-run 注意事项

切换到生产模式

生产模式下,机器人会动用真实资金。请谨慎操作,错误策略可能导致全部亏损。

切换到生产模式时,建议使用不同/全新数据库,避免 dry-run 交易影响真实资金和统计。

配置交易所账户

需在交易所网站创建 API Key(通常为 keysecret,部分还需 password),并填入配置文件或通过 freqtrade new-config 命令输入。

API Key 仅在实盘(生产模式)下必需,dry-run 模式可填空。

切换到生产模式

编辑 config.json 文件。

将 dry_run 设为 false,并根据需要调整数据库 URL:

"dry_run": false,

填入交易所 API key(可用假 key):

{
    "exchange": {
        "name": "binance",
        "key": "af8ddd35195e9dc500b9a6f799f6f5c93d89193b",
        "secret": "08a9dc6db3d7b53e1acebd9275677f4b0a04f1a5",
        //"password": "", // 可选,并非所有交易所都需要
        // ...
    }
    //...
}

请务必阅读交易所文档,了解各交易所的特殊配置。

Freqtrade 使用代理

如需为 freqtrade 配置代理,导出 HTTP_PROXYHTTPS_PROXY 环境变量:

export HTTP_PROXY="http://addr:port"
export HTTPS_PROXY="http://addr:port"
freqtrade

代理交易所请求

如需为交易所连接配置代理,需在 ccxt 配置中指定:

{ 
  "exchange": {
    "ccxt_config": {
      "httpsProxy": "http://addr:port",
      "wsProxy": "http://addr:port",
    }
  }
}

更多代理类型请查阅 ccxt 代理文档

下一步

现在你已配置好 config.json,下一步请启动机器人