配置机器人¶
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"]'
注意
检测到的环境变量会在启动时被记录下来——因此,如果你无法确定某个值为何与配置中预期的不同,请检查它是否被环境变量加载了。
验证合并后的结果
你可以使用 show-config 子命令 查看最终合并后的完整配置。
加载顺序
环境变量是在初始配置加载之后才读取的。因此,你不能通过环境变量提供配置文件路径。请使用 --config path/to/config.json 来指定路径。这一点在一定程度上也适用于 user_dir。虽然用户目录可以通过环境变量设置,但配置文件不会从该位置加载。
多个配置文件¶
机器人可以指定并使用多个配置文件,也可以从进程的标准输入流读取其配置参数。
你可以在 add_config_files 中指定额外的配置文件。此参数中列出的文件将被加载,并与初始配置文件合并。这些文件的路径是相对于初始配置文件解析的。这类似于使用多个 --config 参数,但在使用上更简单,因为你无需为每个命令都指定所有文件。
验证合并后的结果
你可以使用 show-config 子命令 查看最终合并后的完整配置。
使用多个配置文件来保护敏感信息
你可以使用第二个配置文件来存放你的敏感信息(如 API 密钥)。这样你就可以分享你的“主”配置文件,同时仍能保留自己的密钥。第二个文件只需包含你希望覆盖的配置项即可。如果某个键存在于多个配置文件中,则“最后指定的配置”生效(在上述示例中为 config-private.json)。
对于一次性命令,你也可以通过指定多个 --config 参数来使用如下语法。
freqtrade trade --config user_data/config1.json --config user_data/config-private.json <...>
以下命令等同于上面的例子——但通过在配置中引入两个文件,便于重复使用。
"add_config_files": [
"config1.json",
"config-private.json"
]
freqtrade trade --config user_data/config.json <...>
配置冲突处理
如果相同的配置项同时出现在 config.json 和 config-import.json 中,则父配置文件中的值优先。在下面的例子中,合并后 max_open_trades 的值将是 3,因为可复用的“导入”配置文件覆盖了该键。
{
"max_open_trades": 3,
"stake_currency": "USDT",
"add_config_files": [
"config-import.json"
]
}
{
"max_open_trades": 10,
"stake_amount": "unlimited",
}
最终合并后的配置:
{
"max_open_trades": 3,
"stake_currency": "USDT",
"stake_amount": "unlimited"
}
如果 add_config_files 中包含多个文件,则它们被视为处于相同层级,后出现的配置会覆盖先前的配置(除非该键已被父级定义)。
编辑器自动补全和验证¶
如果你使用的编辑器支持 JSON 模式,可以通过在配置文件顶部添加以下行来使用 Freqtrade 提供的模式,从而获得配置文件的自动补全和验证功能:
{
"$schema": "https://schema.freqtrade.io/schema.json",
}
开发版本
开发版模式可通过 https://schema.freqtrade.io/schema_dev.json 获取,但我们建议为了最佳体验使用稳定版本。
配置参数¶
下表将列出所有可用的配置参数。
Freqtrade 还可以通过命令行(CLI)参数加载许多选项(详情请查看命令 --help 的输出)。
配置选项优先级¶
所有选项的优先级如下:
- 命令行参数优先级最高,会覆盖其他任何选项
- 环境变量
- 配置文件按顺序加载(后一个文件的设置优先),并覆盖策略中的配置。
- 仅当未通过配置文件或命令行参数设置时,才会使用策略中的配置。这些选项在下表中标记为 策略覆盖。
参数表格¶
必填参数标记为 必需,表示必须通过某种方式设置该参数。
| 参数 | 描述 |
|---|---|
max_open_trades |
必需。 允许你的机器人同时持有的开放交易数量。每个交易对只能有一个开放交易,因此你的交易对列表长度也可能构成限制。若设置为 -1,则忽略此限制(即可能无限开仓,仅受交易对列表限制)。详见下方说明。策略覆盖。 数据类型: 正整数或 -1。 |
stake_currency |
必需。 用于交易的加密货币。 数据类型: 字符串 |
stake_amount |
必需。 你的机器人每笔交易使用的加密货币数量。设置为 "unlimited" 可允许机器人使用全部可用余额。详见下方说明。数据类型: 正浮点数或 "unlimited"。 |
tradable_balance_ratio |
机器人被允许用于交易的账户总余额比例。详见下方说明。 默认值为 0.99(99%)。数据类型: 介于 0.1 和 1.0 之间的正浮点数。 |
available_capital |
机器人可用的起始资金。在同一个交易所账户上运行多个机器人时非常有用。详见下方说明。 数据类型: 正浮点数。 |
amend_last_stake_amount |
如有必要,使用减少后的最后一笔投注金额。详见下方说明。 默认值为 false。 数据类型: 布尔值 |
last_stake_amount_min_ratio |
定义必须保留并执行的最小投注金额比例。仅当最后一笔投注金额被调整为减少值时生效(即当 amend_last_stake_amount 设置为 true 时)。详见下方说明。默认值为 0.5。 数据类型: 浮点数(以比率形式表示) |
amount_reserve_percent |
在最小交易对下注金额中预留一定比例。机器人在计算最小交易对下注金额时,会预留 amount_reserve_percent 加上止损值,以避免可能的交易拒绝。默认值为 0.05(5%)。数据类型:正浮点数(比例)。 |
时间周期 |
要使用的时间周期(例如 1m、5m、15m、30m、1h 等)。通常不在配置中指定,而是在策略中定义。策略覆盖。数据类型:字符串 |
法币显示货币 |
用于显示收益的法币货币。下方更多信息。 数据类型:字符串 |
模拟运行 |
必填项。定义机器人是否处于模拟运行或实盘模式。 默认值为 true。数据类型:布尔值 |
模拟运行钱包金额 |
定义机器人在模拟运行模式下所使用的模拟钱包的初始金额(以质押货币计)。下方更多信息 默认值为 1000。数据类型:浮点数或字典 |
退出时取消未成交订单 |
当发出 /stop RPC 命令、按下 Ctrl+C 或机器人意外终止时,取消所有未成交的订单。设置为 true 时,可在市场崩盘等情况下使用 /stop 来取消未成交或部分成交的订单。此设置不影响已开仓位。默认值为 false。数据类型:布尔值 |
仅处理新蜡烛图 |
仅在新蜡烛图数据到达时才进行指标计算。如果设为 false,则每次循环都会重新计算指标,这意味着同一根蜡烛会被多次处理,增加系统负载;但如果您的策略依赖于逐笔交易数据而非仅蜡烛图数据,则可能有用。策略覆盖。 默认值为 true。数据类型:布尔值 |
最小 ROI |
必填项。 设置机器人用于退出交易的收益率阈值(比例)。下方更多信息。策略覆盖。 数据类型:字典 |
止损 |
必填项。 机器人使用的止损值(比例形式)。更多详情请参见止损文档。策略覆盖。 数据类型:浮点数(比例) |
移动止损 |
启用移动止损功能(基于配置文件或策略文件中的 stoploss)。更多详情请参见止损文档。策略覆盖。数据类型:布尔值 |
盈利后移动止损 |
当利润达到设定值后调整止损位。更多详情请参见止损文档。策略覆盖。 数据类型:浮点数 |
盈利后移动止损触发偏移 |
设定何时应用 trailing_stop_positive 的偏移量。应为正数的百分比值。更多详情请参见止损文档。策略覆盖。默认值为 0.0(无偏移)。数据类型:浮点数 |
仅当达到偏移量后才启用移动止损 |
仅当达到偏移量时应用移动止损。止损文档。策略覆盖。 默认为 false。 数据类型: 布尔值 |
手续费 |
回测/模拟运行期间使用的手续费。通常不应配置此项,以便 Freqtrade 回退到交易所默认手续费。以比率形式设置(例如 0.001 = 0.1%)。每笔交易会应用两次手续费,买入和卖出各一次。 数据类型: 浮点数(比率) |
期货资金费率 |
当交易所无法提供历史资金费率时,用户指定的资金费率。此设置不会覆盖真实的历史费率。除非您正在测试特定币种并了解资金费率如何影响 Freqtrade 的利润计算,否则建议将其设置为 0。更多信息请参见此处 默认为 None。数据类型: 浮点数 |
交易模式 |
指定您是想进行普通交易、杠杆交易,还是交易价格由匹配的加密货币价格衍生而来的合约。杠杆文档。 默认为 "spot"。 数据类型: 字符串 |
保证金模式 |
进行杠杆交易时,此选项决定交易者的抵押品是与各交易对共享还是隔离。杠杆文档。 数据类型: 字符串 |
强平缓冲 |
一个比率,用于指定在强平价格和止损之间保留多大的安全余量,以防止仓位触及强平价格。杠杆文档。 默认为 0.05。 数据类型: 浮点数 |
| 未成交超时 | |
unfilledtimeout.entry |
必填项。 机器人在等待未成交的入场订单完成时的等待时间(以分钟或秒为单位),超时后订单将被取消。策略覆盖。 数据类型: 整数 |
unfilledtimeout.exit |
必填项。 机器人在等待未成交的出场订单完成时的等待时间(以分钟或秒为单位),超时后订单将被取消,并在当前(新)价格重新下单,只要仍有信号存在。策略覆盖。 数据类型: 整数 |
unfilledtimeout.unit |
在未成交超时设置中使用的单位。注意:如果将 unfilledtimeout.unit 设置为“seconds”(秒),则“internals.process_throttle_secs”必须小于或等于超时时间。策略覆盖。 默认为 "minutes"。 数据类型: 字符串 |
unfilledtimeout.exit_timeout_count |
出场订单最多可超时多少次。一旦达到此超时次数,将触发紧急出场。设为 0 可禁用此功能,允许无限次取消订单。策略覆盖。 默认为 0。 数据类型: 整数 |
| 定价 | |
entry_pricing.price_side |
选择机器人应查看盘口的哪一侧来获取入场价格。下方有更多信息。 默认为 "same"。 数据类型: 字符串(可选值: ask、bid、same 或 other)。 |
entry_pricing.price_last_balance |
必填项。 插值计算出价。更多信息见下方。 |
entry_pricing.use_order_book |
启用根据订单簿入场中的费率进行交易。 默认值为 true。数据类型:布尔值 |
entry_pricing.order_book_top |
机器人将使用订单簿中“price_side”方向的前 N 个价格来入场交易。例如,值为 2 时,机器人将选择订单簿入场中的第 2 个价位。 默认值为 1。数据类型:正整数 |
entry_pricing. check_depth_of_market.enabled |
当订单簿中买卖订单的差值达到设定条件时,禁止入场。检查市场深度。 默认值为 false。数据类型:布尔值 |
entry_pricing. check_depth_of_market.bids_to_ask_delta |
订单簿中买单与卖单的数量差异比率。小于 1 表示卖单量更大,大于 1 表示买单量更高。检查市场深度 默认值为 0。数据类型:浮点数(比率) |
exit_pricing.price_side |
选择机器人在价差的哪一侧查看退出价格。更多信息见下方。 默认值为 "same"。数据类型:字符串(可选 ask、bid、same 或 other)。 |
exit_pricing.price_last_balance |
插值计算退出价格。更多信息见下方。 |
exit_pricing.use_order_book |
启用基于订单簿退出来平仓。 默认值为 true。数据类型:布尔值 |
exit_pricing.order_book_top |
机器人将使用订单簿中“price_side”方向的前 N 个价格来退出交易。例如,值为 2 时,机器人将选择订单簿退出中的第 2 个卖价。 默认值为 1。数据类型:正整数 |
custom_price_max_distance_ratio |
设置当前价格与自定义入场或出场价格之间的最大距离比率。 默认值为 0.02(2%)。数据类型:正浮点数 |
| 订单/信号处理 | |
use_exit_signal |
除 minimal_roi 外,还使用策略生成的退出信号。设为 false 将禁用 "exit_long" 和 "exit_short" 列的使用。不影响其他退出方式(止损、ROI、回调函数)。策略覆盖。默认值为 true。数据类型:布尔值 |
exit_profit_only |
仅当机器人收益达到 exit_profit_offset 后才考虑退出信号。策略覆盖。默认值为 false。数据类型:布尔值 |
exit_profit_offset |
仅当收益高于此值时,退出信号才生效。仅在 exit_profit_only=True 时启用。策略覆盖。默认值为 0.0。数据类型:浮点数(比率) |
ignore_roi_if_entry_signal |
如果入场信号仍然有效,则不退出。此设置优先于 minimal_roi 和 use_exit_signal。策略覆盖。默认值为 false。数据类型: 布尔值 |
ignore_buying_expired_candle_after |
指定买入信号不再被使用的秒数。 数据类型: 整数 |
order_types |
根据操作类型配置订单类型("entry"、"exit"、"stoploss"、"stoploss_on_exchange")。详见下方。策略覆盖。数据类型: 字典 |
order_time_in_force |
为入场和出场订单配置订单时效(Time in Force)。详见下方。策略覆盖。 数据类型: 字典 |
position_adjustment_enable |
启用策略以使用仓位调整(追加买入或卖出)。更多信息请点击此处。 策略覆盖。 默认值为 false。数据类型: 布尔值 |
max_entry_position_adjustment |
每笔开放交易在首次入场订单基础上最多可追加的订单数量。设为 -1 表示不限制追加订单数。更多信息请点击此处。策略覆盖。 默认值为 -1。数据类型: 正整数或 -1 |
| 交易所 | |
exchange.name |
必填项。 要使用的交易所类名称。 数据类型: 字符串 |
exchange.key |
用于交易所的 API 密钥。仅在生产模式下需要。 请保密,切勿公开。 数据类型: 字符串 |
exchange.secret |
用于交易所的 API 密钥密钥。仅在生产模式下需要。 请保密,切勿公开。 数据类型: 字符串 |
exchange.password |
用于交易所的 API 密码。仅在生产模式下且针对使用密码进行 API 请求的交易所才需要。 请保密,切勿公开。 数据类型: 字符串 |
exchange.uid |
用于交易所的 API 用户 ID。仅在生产模式下且针对使用 UID 进行 API 请求的交易所才需要。 请保密,切勿公开。 数据类型: 字符串 |
exchange.pair_whitelist |
机器人用于交易以及回测时检查潜在交易的交易对列表。支持正则表达式匹配,例如 .*/BTC。VolumePairList 不使用此列表。更多信息。数据类型: 列表 |
exchange.pair_blacklist |
机器人必须绝对避免交易和回测的交易对列表。更多信息。 数据类型: 列表 |
exchange.ccxt_config |
传递给两个 ccxt 实例(同步和异步)的额外 CCXT 参数。这通常是放置额外 ccxt 配置的正确位置。不同交易所的参数可能不同,具体请参见ccxt 文档。请避免在此处添加交易所密钥(应使用专用字段),因为它们可能会被记录在日志中。 数据类型:字典 |
exchange.ccxt_sync_config |
传递给常规(同步)ccxt 实例的额外 CCXT 参数。不同交易所的参数可能不同,具体请参见ccxt 文档。 数据类型:字典 |
exchange.ccxt_async_config |
传递给异步 ccxt 实例的额外 CCXT 参数。不同交易所的参数可能不同,具体请参见ccxt 文档。 数据类型:字典 |
exchange.enable_ws |
启用交易所的 Websocket 功能。 更多信息。 默认值为 true。数据类型:布尔值 |
exchange.markets_refresh_interval |
市场信息重新加载的时间间隔(单位:分钟)。 默认值为 60 分钟。数据类型:正整数 |
exchange.skip_open_order_update |
如果交易所引发问题,在启动时跳过未完成订单的更新。仅在实盘交易环境中相关。 默认值为 false数据类型:布尔值 |
exchange.unknown_fee_rate |
计算交易手续费时的备用值。对于手续费以不可交易货币计价的交易所,此设置非常有用。此处提供的值将与“手续费金额”相乘。 默认值为 None数据类型:浮点数 |
exchange.log_responses |
记录相关的交易所响应。仅用于调试模式——请谨慎使用。 默认值为 false数据类型:布尔值 |
exchange.only_from_ccxt |
禁止从 data.binance.vision 下载数据。保持此选项为 false 可显著加快下载速度,但如果该网站不可用则可能导致问题。 默认值为 false数据类型:布尔值 |
experimental.block_bad_exchanges |
屏蔽已知无法与 freqtrade 正常工作的交易所。除非你想测试某个交易所当前是否可用,否则建议保持默认设置。 默认值为 true。数据类型:布尔值 |
| 插件 | |
pairlists |
定义一个或多个要使用的交易对列表。更多信息。 默认值为 StaticPairList。数据类型:字典列表 |
| Telegram | |
telegram.enabled |
启用 Telegram 功能。 数据类型:布尔值 |
telegram.token |
你的 Telegram 机器人令牌。只有当 telegram.enabled 为 true 时才需要填写。请严格保密,切勿公开。 数据类型:字符串 |
telegram.chat_id |
你的个人 Telegram 账号 ID。只有当 telegram.enabled 为 true 时才需要填写。请严格保密,切勿公开。 数据类型:字符串 |
telegram.balance_dust_level |
尘埃级别(以质押货币计)——余额低于此值的货币将不会在/balance中显示。数据类型:浮点数 |
telegram.reload |
允许在 Telegram 消息上显示“重新加载”按钮。 默认值为 true。数据类型:布尔值 |
telegram.notification_settings.* |
详细的通知设置。详情请参阅Telegram 文档。 数据类型:字典 |
telegram.allow_custom_messages |
启用策略通过 dataprovider.send_msg() 函数发送 Telegram 消息的功能。 数据类型:布尔值 |
| Webhook | |
webhook.enabled |
启用 Webhook 通知功能 数据类型:布尔值 |
webhook.url |
Webhook 的 URL。仅当 webhook.enabled 为 true 时需要。更多细节请参见Webhook 文档。数据类型:字符串 |
webhook.entry |
开仓时发送的有效载荷。仅当 webhook.enabled 为 true 时需要。更多细节请参见Webhook 文档。数据类型:字符串 |
webhook.entry_cancel |
开仓订单取消时发送的有效载荷。仅当 webhook.enabled 为 true 时需要。更多细节请参见Webhook 文档。数据类型:字符串 |
webhook.entry_fill |
开仓订单成交时发送的有效载荷。仅当 webhook.enabled 为 true 时需要。更多细节请参见Webhook 文档。数据类型:字符串 |
webhook.exit |
平仓时发送的有效载荷。仅当 webhook.enabled 为 true 时需要。更多细节请参见Webhook 文档。数据类型:字符串 |
webhook.exit_cancel |
平仓订单取消时发送的有效载荷。仅当 webhook.enabled 为 true 时需要。更多细节请参见Webhook 文档。数据类型:字符串 |
webhook.exit_fill |
平仓订单成交时发送的有效载荷。仅当 webhook.enabled 为 true 时需要。更多细节请参见Webhook 文档。数据类型:字符串 |
webhook.status |
状态调用时发送的有效载荷。仅当 webhook.enabled 为 true 时需要。更多细节请参见Webhook 文档。数据类型:字符串 |
webhook.allow_custom_messages |
启用策略通过 dataprovider.send_msg() 函数发送 Webhook 消息的功能。 数据类型:布尔值 |
| REST API / FreqUI / 生产者-消费者 | |
api_server.enabled |
启用 API 服务器。更多详情请参阅API 服务器文档。 数据类型:布尔值 |
api_server.listen_ip_address |
绑定 IP 地址。更多详情请参阅API 服务器文档。 数据类型:IPv4 |
api_server.listen_port |
绑定端口。更多详情请参阅API 服务器文档。 数据类型:介于 1024 到 65535 之间的整数 |
api_server.verbosity |
日志详细程度。info将打印所有 RPC 调用,而"error"仅显示错误信息。数据类型:枚举类型,可选 info或error,默认为info。 |
api_server.username |
API 服务器用户名。更多详情请参阅API 服务器文档。 请保密,切勿公开。 数据类型:字符串 |
api_server.password |
API 服务器密码。更多详情请参阅API 服务器文档。 请保密,切勿公开。 数据类型:字符串 |
api_server.ws_token |
消息 WebSocket 的 API 令牌。更多详情请参阅API 服务器文档。 请保密,切勿公开。 数据类型:字符串 |
bot_name |
机器人的名称。通过 API 传递给客户端,可用于区分或命名机器人。 默认为 freqtrade数据类型:字符串 |
external_message_consumer |
启用生产者/消费者模式以获取更多详情。 数据类型:字典 |
| 其他 | |
initial_state |
定义初始应用程序状态。若设置为 stopped,则必须通过/start RPC 命令显式启动机器人。默认为 stopped。数据类型:枚举类型,可选 running、paused或stopped |
force_entry_enable |
启用 RPC 命令以强制进入交易。更多信息见下文。 数据类型:布尔值 |
disable_dataframe_checks |
禁用对策略方法返回的 OHLCV 数据框进行正确性检查。仅在有意修改数据框并清楚自己操作的情况下使用。策略覆盖。 默认为 False。数据类型:布尔值 |
internals.process_throttle_secs |
设置处理节流时间,即单个机器人迭代循环的最小持续时间。单位为秒。 默认为 5秒。数据类型:正整数 |
internals.heartbeat_interval |
每隔 N 秒打印一次心跳消息。设为 0 可禁用心跳消息。 默认为 60秒。数据类型:正整数或 0 |
internals.sd_notify |
启用 sd_notify 协议,向 systemd 服务管理器报告机器人状态变化并发送保持活动的 ping 消息。详见此处。 数据类型:布尔值 |
策略 |
必需 定义要使用的策略类。建议通过 --strategy 名称 设置。数据类型: 类名 |
strategy_path |
添加额外的策略查找路径(必须是一个目录)。 数据类型: 字符串 |
recursive_strategy_search |
设为 true 可在 user_data/strategies 目录内的子目录中递归搜索策略。数据类型: 布尔值 |
user_data_dir |
包含用户数据的目录。 默认为 ./user_data/。数据类型: 字符串 |
db_url |
声明要使用的数据库 URL。注意:如果 dry_run 为 true,则默认使用 sqlite:///tradesv3.dryrun.sqlite;生产环境实例则默认使用 sqlite:///tradesv3.sqlite。数据类型: 字符串,SQLAlchemy 连接字符串 |
logfile |
指定日志文件名。采用滚动策略进行日志文件轮换,最多保留 10 个文件,每个文件大小限制为 1MB。 数据类型: 字符串 |
add_config_files |
额外的配置文件。这些文件将被加载并与当前配置文件合并。文件路径相对于初始配置文件解析。 默认为 []。数据类型: 字符串列表 |
dataformat_ohlcv |
用于存储历史 K 线(OHLCV)数据的数据格式。 默认为 feather。数据类型: 字符串 |
dataformat_trades |
用于存储历史交易数据的数据格式。 默认为 feather。数据类型: 字符串 |
reduce_df_footprint |
将所有数值列重新转换为 float32/int32,旨在减少内存/磁盘使用量(并缩短回测、超参数优化以及 FreqAI 中的训练/推理时间)。 数据类型: 布尔值。 默认值: False。 |
log_config |
包含 Python 日志配置的字典。更多信息 数据类型: 字典。 默认值: FtRichHandler |
策略中的参数¶
以下参数可以在配置文件或策略中设置。配置文件中设置的值始终会覆盖策略中设置的值。
最小 ROI时间周期止损max_open_trades移动止损盈利后移动止损盈利后移动止损触发偏移仅当达到偏移量后才启用移动止损use_custom_stoploss仅处理新蜡烛图order_typesorder_time_in_forceunfilledtimeoutdisable_dataframe_checksuse_exit_signalexit_profit_onlyexit_profit_offsetignore_roi_if_entry_signalignore_buying_expired_candle_afterposition_adjustment_enablemax_entry_position_adjustment
配置每笔交易的投入金额¶
有多种方法可以配置机器人进入交易时使用的下注货币数量。所有方法均遵守下文所述的可用余额配置。
最小交易下注额¶
最小下注金额取决于交易所和交易对,通常可在交易所支持页面中查到。
假设 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))。
为了避免因止损值过大而导致计算结果过高,计算出的最低投注限制永远不会超过实际限制的 50%。
警告
由于交易所的限制通常较为稳定且不常更新,某些交易对可能会显示非常高的最低限制,这仅仅是因为自交易所上次调整限制以来价格大幅上涨。Freqtrade 会将投注金额调整为此值,但如果该值比计算/期望的投注金额高出 > 30%,则交易将被拒绝。
模拟交易钱包¶
在模拟运行模式下,机器人将使用一个模拟钱包来执行交易。该钱包的初始余额由 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 进行交易,并将其视为可用余额。钱包其余部分将保持不变。
危险
当在同一账户上运行多个机器人时,不应使用此设置。请参阅分配给机器人的可用资金。
警告
tradable_balance_ratio 设置适用于当前总余额(可用余额 + 已投入交易的资金)。因此,假设起始余额为 1000,若配置为 tradable_balance_ratio=0.99,并不能保证交易所始终保留 10 个单位货币可用。例如,如果总余额因连续亏损或提现而降至 500,则可用余额可能减少至 5 个单位。
分配可用资金¶
为了在同一个交易所账户上使用多个机器人时充分利用复利收益,您需要为每个机器人设定特定的起始资金。这可以通过将 available_capital 设置为您期望的起始余额来实现。
假设您的账户有 10000 USDT,并希望在此交易所运行 2 种不同的策略。您可以设置 available_capital=5000,为每个机器人分配 5000 USDT 的初始资金。机器人会将此初始余额平均分配到 max_open_trades 个仓位中。盈利的交易将增加该机器人的投注金额,而不会影响另一个机器人的投注金额。
available_capital 的调整需要重新加载配置才能生效。调整 available_capital 时,系统会加上新旧值之间的差额。当已有持仓存在时减少可用资金,不会导致平仓。差额部分将在交易结束后返还至钱包。最终结果取决于调整资金与结束交易期间的价格波动情况。
与 tradable_balance_ratio 不兼容
启用此选项将覆盖 tradable_balance_ratio 的任何配置。
调整最后一笔投注金额¶
假设我们有 1000 USDT 的可交易余额,stake_amount=400,且 max_open_trades=3。机器人将开立 2 笔交易,无法填满最后一个交易仓位,因为所需的 400 USDT 已不可用(800 USDT 已被其他交易占用)。
为解决此问题,可将选项 amend_last_stake_amount 设置为 True,这将允许机器人将投注金额减少至剩余可用余额,以填满最后一个交易仓位。
以上示例中的情况将变为:
- 交易 1:400 USDT
- 交易 2:400 USDT
- 交易 3:200 USDT
注意
可以使用 last_stake_amount_min_ratio 配置最后一笔投注的最小金额,默认值为 0.5(50%)。这意味着最低投注金额为 stake_amount * 0.5。这可以避免因投注金额过低(接近交易对的最小可交易量)而被交易所拒绝。
静态投注金额¶
stake_amount 配置项用于静态设定您的机器人每笔交易使用的投注货币数量。
最小配置值为 0.0001,但请检查您所使用的交易所对当前投注货币的最小交易限额,以避免出现问题。
此设置与 max_open_trades 协同工作。交易中投入的最大资金为 stake_amount * max_open_trades。例如,若配置为 max_open_trades=3 且 stake_amount=0.05,则机器人最多使用 (0.05 BTC × 3) = 0.15 BTC。
注意
此设置遵循可用余额配置。
动态投注金额¶
您也可以选择使用动态投注金额,它会根据交易所的可用余额,将其平均分配给允许的最大交易数量(max_open_trades)。
要启用此功能,请设置 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,
复利收益
此配置将根据机器人的表现动态调整投注金额(当机器人亏损时降低投注额,当机器人盈利时提高投注额,因为可用余额更高),从而实现利润的复利增长。
使用模拟运行模式时
当在模拟运行、回测或超参数优化中使用 "stake_amount" : "unlimited", 时,系统会从 dry_run_wallet 的初始资金开始模拟余额变化。因此,务必将 dry_run_wallet 设置为合理值(例如,BTC 可设为 0.05 或 0.01,USDT 可设为 1000 或 100)。否则,系统可能会模拟一次性交易 100 BTC(或更多)或 0.05 USDT(或更少)的情况——这可能与你实际可用余额不符,或低于交易所对标的货币订单金额的最低限制。
带仓位调整的动态投注金额¶
当你希望在使用无限投注金额的同时启用仓位调整功能时,还必须实现 custom_stake_amount,使其根据你的策略返回一个具体数值。通常该值可设定为建议投注金额的 25% 至 50%,但具体比例取决于你的策略以及你希望在钱包中保留多少资金作为仓位调整缓冲。
例如,如果你的仓位调整机制假设还能以相同的投注金额再进行两次买入,则你的缓冲区应为最初建议的无限投注金额的 66.6667%。
又或者,如果你的仓位调整机制假设还能以原始投注金额的 3 倍再进行一次买入,则 custom_stake_amount 应返回建议投注金额的 25%,并保留 75% 用于后续可能的仓位调整。
订单所用价格¶
普通订单的价格可通过参数结构 entry_pricing(用于开仓交易)和 exit_pricing(用于平仓交易)进行控制。价格总是在下单前获取,方式为查询交易所行情数据或使用盘口(orderbook)数据。
注意
Freqtrade 使用的盘口数据是通过 ccxt 的 fetch_order_book() 函数从交易所获取的数据,通常是 L2 汇总盘口数据;而行情数据则是 ccxt 的 fetch_ticker()/fetch_tickers() 函数返回的结构。更多详情请参考 ccxt 库的文档。
使用市价单
使用市价单时,请阅读市价单定价章节。
开仓价格¶
开仓价格方向¶
配置项 entry_pricing.price_side 定义了机器人买入时参考的盘口一侧。
以下展示了一个盘口示例。
...
103
102
101 # ask
-------------Current spread
99 # bid
98
97
...
如果 entry_pricing.price_side 设置为 "bid",则机器人将使用 99 作为开仓价格。
相应地,如果设置为 "ask",则机器人将使用 101 作为开仓价格。
根据订单方向(做多/做空),这将导致不同的结果。因此我们建议在此配置中使用 "same" 或 "other",从而得到如下定价矩阵:
| direction | 订单 | 设置 | 价格 | 是否穿过价差 |
|---|---|---|---|---|
| 做多 | 买入 | 卖一价 | 101 | 是 |
| 做多 | 买入 | 买盘 | 99 | 否 |
| 做多 | 买入 | 相同 | 99 | 否 |
| 做多 | 买入 | 其他 | 101 | 是 |
| 短 | 卖出 | 卖一价 | 101 | 否 |
| 短 | 卖出 | 买盘 | 99 | 是 |
| 短 | 卖出 | 相同 | 101 | 否 |
| 短 | 卖出 | 其他 | 99 | 是 |
使用订单簿的另一侧通常能保证订单更快成交,但机器人最终可能支付比必要金额更高的价格。即使使用限价买入订单,也极有可能适用吃单手续费而非挂单手续费。此外,订单簿中‘另一侧’的价格高于‘买盘(bid)’一侧的价格,因此该订单的行为类似于市价单(但设有最高价格限制)。
启用订单簿时的入场价格¶
当启用订单簿进行交易入场时(entry_pricing.use_order_book=True),Freqtrade 会从订单簿获取 entry_pricing.order_book_top 指定数量的档位,并使用配置的订单簿一侧(entry_pricing.price_side)上第 entry_pricing.order_book_top 个价位作为入场价。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 的设置,在 side 价格与 last 价格之间计算一个加权价格。
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 参数设定的阈值进行比较。只有当订单簿的该比值大于或等于设定值时,才会执行入场下单操作。
注意
比值小于 1 表示卖盘(ask)侧的订单簿深度大于买盘(bid)侧;而比值大于 1 则表示相反情况(即买方深度高于卖方深度)。
退出价格¶
退出价格方向¶
配置项 exit_pricing.price_side 定义了机器人在平仓时参考订单簿哪一侧的价格。
以下是某个订单簿的示例:
...
103
102
101 # ask
-------------Current spread
99 # bid
98
97
...
如果 exit_pricing.price_side 设置为 "ask",则机器人将使用 101 作为退出价格。
相应地,如果 exit_pricing.price_side 设置为 "bid",则机器人将使用 99 作为退出价格。
根据订单方向(做多/做空),这将导致不同的结果。因此我们建议在此配置中使用 "same" 或 "other",从而得到如下定价矩阵:
| 方向 | 订单 | 设置 | 价格 | 是否穿过价差 |
|---|---|---|---|---|
| 做多 | 卖出 | 卖一价 | 101 | 否 |
| 做多 | 卖出 | 买盘 | 99 | 是 |
| 做多 | 卖出 | 相同 | 101 | 否 |
| 做多 | 卖出 | 其他 | 99 | 是 |
| 短 | 买入 | 卖一价 | 101 | 是 |
| 短 | 买入 | 买盘 | 99 | 否 |
| 短 | 买入 | 相同 | 99 | 否 |
| 短 | 买入 | 其他 | 101 | 是 |
启用订单簿时的退出价格¶
当启用订单簿退出定价(exit_pricing.use_order_book=True)并退出交易时,Freqtrade 会获取订单簿中的前 exit_pricing.order_book_top 条记录,并使用配置的侧边(exit_pricing.price_side)中第 exit_pricing.order_book_top 条记录作为交易的退出价格。
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 在 side 和 last 价格之间计算一个加权价格。
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 对象,其中键表示持续时间(单位为分钟),值表示最小投资回报率(ROI,以比率形式表示)。参见以下示例:
"minimal_roi": {
"40": 0.0, # Exit after 40 minutes if the profit is not negative
"30": 0.01, # Exit after 30 minutes if there is at least 1% profit
"20": 0.02, # Exit after 20 minutes if there is at least 2% profit
"0": 0.04 # Exit immediately if there is at least 4% profit
},
大多数策略文件已包含最优的 minimal_roi 值。该参数可在策略文件或配置文件中设置。若在配置文件中设置,将覆盖策略文件中的 minimal_roi 值。如果策略和配置文件中均未设置,则默认使用 1000% 的 ROI(即 {"0": 10}),这意味着除非交易盈利达到 1000%,否则不会触发最小 ROI 退出。
强制退出的特殊情况(在特定时间后)
一种特殊情况是使用 "<N>": -1 作为 ROI 设置。这将强制机器人在 N 分钟后退出交易,无论盈亏如何,相当于一个限时强制退出机制。
理解 force_entry_enable¶
force_entry_enable 配置参数允许通过 Telegram 和 REST API 使用强制入场命令(/forcelong、/forceshort)。出于安全考虑,默认情况下该功能是禁用的,启用时 freqtrade 启动时会显示警告信息。例如,你可以向机器人发送 /forceenter ETH/BTC,这将使 freqtrade 立即买入该交易对,并持有直到出现正常的退出信号(如 ROI 触发、止损或 /forceexit 命令)。
某些策略下此功能可能存在风险,请谨慎使用。
有关使用详情,请参阅 Telegram 文档。
忽略过期的 K 线数据¶
在使用较长时间周期(例如 1 小时或更长)并设置较低的 max_open_trades 值时,一旦有交易仓位空闲,最后一个 K 线就可能立即被处理。在处理最后一个 K 线时,可能会导致不希望在此 K 线上使用买入信号的情况。例如,当你的策略中使用了金叉条件时,该交叉点可能已经过去太久,此时再开仓已不合适。
在这种情况下,你可以通过将 ignore_buying_expired_candle_after 设置为一个正数来启用忽略超时 K 线的功能,该数值表示买入信号过期的秒数。
例如,如果你的策略使用的是 1 小时时间周期,并且你只希望在新 K 线出现后的前 5 分钟内买入,可以在策略中添加以下配置:
{
//...
"ignore_buying_expired_candle_after": 300,
// ...
}
注意
此设置会随着每个新 K 线重置,因此不会阻止持续有效的信号在它们激活的第 2 或第 3 根 K 线上执行。建议为买入信号使用仅在单根 K 线上有效的“触发型”条件。
了解 order_types¶
order_types 配置参数用于将操作(entry、exit、stoploss、emergency_exit、force_exit、force_entry)映射到订单类型(market、limit 等),同时配置是否在交易所设置止损,以及设置交易所止损订单更新的时间间隔(秒)。
这使得你可以使用限价单开仓,使用限价单平仓,并使用市价单创建止损单。此外,还可以将止损设置为“在交易所执行”,这意味着一旦买入订单成交,止损单将立即在交易所下单。
在配置文件中设置的 order_types 会覆盖策略中设置的值,因此你需要在一处完整地配置整个 order_types 字典。
如果进行了此项配置,则必须包含以下四个值(entry、exit、stoploss 和 stoploss_on_exchange),否则机器人将无法启动。
有关(emergency_exit、force_exit、force_entry、stoploss_on_exchange、stoploss_on_exchange_interval、stoploss_on_exchange_limit_ratio)的更多信息,请参阅止损文档 交易所内止损。
策略中的语法:
order_types = {
"entry": "limit",
"exit": "limit",
"emergency_exit": "market",
"force_entry": "market",
"force_exit": "market",
"stoploss": "market",
"stoploss_on_exchange": False,
"stoploss_on_exchange_interval": 60,
"stoploss_on_exchange_limit_ratio": 0.99,
}
配置:
"order_types": {
"entry": "limit",
"exit": "limit",
"emergency_exit": "market",
"force_entry": "market",
"force_exit": "market",
"stoploss": "market",
"stoploss_on_exchange": false,
"stoploss_on_exchange_interval": 60
}
市价单支持
并非所有交易所都支持“市价单”。如果你使用的交易所不支持市价单,将会显示以下消息:"Exchange <yourexchange> does not support market orders.",并且机器人将拒绝启动。
使用市价单
使用市价单时,请仔细阅读 市价单定价 章节。
交易所内止损
order_types.stoploss_on_exchange_interval 不是必填项。如果你不确定其作用,请勿更改该值。有关止损机制的更多详情,请参考 止损文档。
如果启用了 order_types.stoploss_on_exchange,并且你在交易所手动取消了止损单,机器人将自动重新创建一个新的止损单。
警告:order_types.stoploss_on_exchange 失败
如果由于某些原因在交易所创建止损单失败,则会触发“紧急退出”。默认情况下,这将使用市价单退出交易。可以通过设置 order_types 字典中的 emergency_exit 值来更改紧急退出的订单类型——但不建议这样做。
理解订单时效(order_time_in_force)¶
order_time_in_force 配置参数定义了订单在交易所执行时遵循的策略。
常见的时效类型包括:
GTC(持续有效,Good Till Canceled):
这通常是默认的时效策略。意味着订单将一直保留在交易所,直到用户手动取消为止。订单可以全部或部分成交;若部分成交,剩余未成交部分将继续挂单直至被取消。
FOK(立即全部成交否则取消,Fill Or Kill):
表示如果订单不能立即且完全成交,则该订单将被交易所自动取消。
IOC(立即成交剩余取消,Immediate Or Canceled):
与 FOK 类似,但允许部分成交。未成交的部分将由交易所自动取消。
PO(仅挂单,Post only):
仅作为挂单(maker)提交的订单。如果无法以挂单身份进入订单簿,则该订单会被取消。这意味着订单必须至少在一段时间内以未成交状态存在于订单簿中。
请查阅交易所文档,了解您的交易所支持哪些订单时效(time in force)值。
time_in_force 配置¶
order_time_in_force 参数包含一个字典,用于设置入场和出场的订单时效策略。该参数可在配置文件或策略中设置。配置文件中的设置会覆盖策略中的设置,遵循常规的优先级规则。
可能的取值为:GTC(默认)、FOK 或 IOC。
"order_time_in_force": {
"entry": "GTC",
"exit": "GTC"
},
警告
除非您清楚自己在做什么,并已研究过不同取值对特定交易所的影响,否则请勿更改默认值。
法币转换¶
Freqtrade 使用 Coingecko API 将币种价值转换为对应的法定货币价值,用于 Telegram 报告。FIAT 货币可以在配置文件中通过 fiat_display_currency 参数进行设置。
如果从配置文件中完全移除 fiat_display_currency,则不会初始化 Coingecko,也不会显示任何法币转换结果。这对机器人的正常运行没有任何影响。
fiat_display_currency 可使用哪些值?¶
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 密钥。
{
"fiat_display_currency": "USD",
"coingecko": {
"api_key": "your-api",
"is_demo": true
}
}
Freqtrade 同时支持 Coingecko 的 Demo 和 Pro 版 API 密钥。
Coingecko API 密钥并非机器人正常运行所必需。它仅用于 Telegram 报告中的币种到法币转换,而这些转换通常即使没有 API 密钥也能正常工作。
接入交易所 Websocket 数据流¶
Freqtrade 可通过 ccxt.pro 使用 Websocket。
Freqtrade 旨在确保数据始终可用。如果 Websocket 连接失败(或被禁用),机器人将自动回退到 REST API 调用。
如果您遇到疑似由 Websocket 引起的问题,可以通过设置 exchange.enable_ws 来禁用它,默认值为 true。
"exchange": {
// ...
"enable_ws": false,
// ...
}
如果您需要使用代理,请参阅 代理章节 获取更多信息。
逐步上线
我们正在逐步实施此功能,以确保您机器人的稳定性。目前仅限于 ohlcv 数据流的使用,并且仅支持部分交易所,新交易所将持续增加。
使用模拟运行模式¶
我们建议先以模拟运行模式启动机器人,观察其行为表现以及策略的实际效果。在模拟运行模式下,机器人不会动用您的资金,仅进行无实际交易的实时模拟。
- 编辑您的
config.json配置文件。 - 将
dry-run设置为true,并指定db_url作为持久化数据库。
"dry_run": true,
"db_url": "sqlite:///tradesv3.dryrun.sqlite",
- 移除您的交易所 API 密钥和密钥(将其更改为空值或伪造凭证):
"exchange": {
"name": "binance",
"key": "key",
"secret": "secret",
...
}
当您对机器人在模拟运行模式下的表现感到满意后,即可切换至生产模式。
注意
在模拟运行模式期间会启用一个模拟钱包,默认假设起始资金为 dry_run_wallet(默认值为 1000)。
模拟运行注意事项¶
- API 密钥可提供也可不提供。在模拟运行模式下,仅执行不会更改账户状态的只读操作。
- 钱包余额(
/balance)基于dry_run_wallet进行模拟。 - 订单为模拟下单,不会真正提交到交易所。
- 市价单根据下单时刻订单簿中的成交量立即成交,最大滑点为 5%。
- 限价单将在价格达到设定水平时成交,或根据
unfilledtimeout设置超时失效。 - 如果限价单价格超过市场价 1% 以上,则会被转换为市价单,并立即按照市价单规则成交(见上述市价单说明)。
- 结合
stoploss_on_exchange使用时,止损价格将被视为已成交。 - 未成交的订单(非交易记录,交易记录存储在数据库中)在机器人重启后仍保持开启状态,假设其在离线期间未被成交。
切换到生产模式¶
在生产模式下,机器人将使用您的真实资金进行交易。请务必谨慎,错误的策略可能导致全部资金亏损。运行生产模式前,请确保充分了解其风险。
切换至生产模式时,请务必使用不同的或全新的数据库,避免模拟运行期间的交易记录干扰您的真实资金,进而污染统计数据。
设置您的交易所账户¶
你需要在交易所网站上创建 API 密钥(通常你会获得 key 和 secret,部分交易所还需要额外的 password),然后将这些信息填入配置文件中的相应字段,或在 freqtrade new-config 命令提示时输入。API 密钥通常仅在实盘交易(使用真实资金交易,机器人运行在“生产模式”下,向交易所发送真实订单)时需要,在模拟交易(dry-run)模式下运行机器人时则不需要。当你将机器人设置为模拟模式时,可以将这些字段留空。
将你的机器人切换到生产模式¶
编辑你的 config.json 文件。
将 dry-run 设置为 false,并记得如果已设置,请相应调整你的数据库 URL:
"dry_run": false,
插入你的交易所 API 密钥(可使用伪造的 API 密钥代替):
{
"exchange": {
"name": "binance",
"key": "af8ddd35195e9dc500b9a6f799f6f5c93d89193b",
"secret": "08a9dc6db3d7b53e1acebd9275677f4b0a04f1a5",
//"password": "", // Optional, not needed by all exchanges)
// ...
}
//...
}
你还应阅读文档中的 交易所 章节,了解与你所用交易所相关的特定配置细节。
确保你的密钥保密
为了保护你的密钥安全,我们建议使用第二个配置文件来存放 API 密钥。只需将上述代码片段放入一个新的配置文件中(例如 config-private.json),并将你的敏感设置保存在此文件中。然后你可以通过命令 freqtrade trade --config user_data/config.json --config user_data/config-private.json <...> 启动机器人,从而加载你的密钥。
绝不要与任何人分享你的私有配置文件或交易所密钥!
在 Freqtrade 中使用代理¶
要在 Freqtrade 中使用代理,请使用环境变量 "HTTP_PROXY" 和 "HTTPS_PROXY" 导出你的代理设置,并将其值设为正确的代理地址。这会使代理设置应用于所有组件(如 Telegram、CoinGecko 等),但不包括交易所请求。
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,下一步是 启动你的机器人。