Freqtrade 常见问题解答¶
支持的市场¶
Freqtrade 支持现货交易,以及部分选定交易所的(隔离)合约交易。请参阅文档首页以获取当前支持的交易所列表。
我的机器人可以开空头仓位吗?¶
Freqtrade 可以在期货市场中开空头仓位。这要求策略为此设计,并且配置中包含 "trading_mode": "futures"。请务必先阅读相关文档页面。
在现货市场中,某些情况下可以使用杠杆现货代币(例如 BTCUP/USD、BTCDOWN/USD、ETHBULL/USD、ETHBEAR/USD 等),这些代币反映反向交易对,可通过 Freqtrade 进行交易。
我的机器人可以交易期权或期货吗?¶
部分选定交易所支持期货交易。请参阅文档首页以获取当前支持的交易所列表。
新手技巧与窍门¶
- 当你编写策略和 hyperopt 文件时,应使用合适的代码编辑器,如 VSCode 或 PyCharm。一个好的代码编辑器能提供语法高亮和行号显示,便于发现语法错误(Freqtrade 启动时通常会指出这些错误)。
Freqtrade 常见问题¶
Freqtrade 可以在同一交易对上并行开多个仓位吗?¶
不可以。Freqtrade 每次只能为每个交易对开一个仓位。但你可以使用adjust_trade_position() 回调函数来调整已开的仓位。
回测中提供了 --eps 选项来实现此功能,但这仅用于突出显示“隐藏”信号,在实盘中无法生效。
机器人无法启动¶
运行命令 freqtrade trade --config config.json 时显示输出 freqtrade: command not found。
这可能是由以下原因导致的:
- 虚拟环境未激活。
- 运行
source .venv/bin/activate来激活虚拟环境。
- 运行
- 安装未成功完成。
- 请查看安装文档。
机器人启动了,但处于 STOPPED(停止)模式¶
请确保在 config.json 中将 initial_state 配置项设置为 "running"。
我已经等了 5 分钟,为什么机器人还没有进行任何交易?¶
- 根据入场策略、白名单中的币种数量、市场状况等因素,可能需要数小时甚至数天才能找到合适的入场点。请保持耐心!
- 回测可以大致告诉你预期的交易次数,但这并不能保证交易会均匀分布在时间上——你可能某一天有 20 笔交易,而接下来的一周其余时间都没有交易。
- 这可能是由于配置错误导致的。最好检查日志,日志通常会告诉你机器人是否只是没有产生买入信号(仅显示心跳消息),或者是否存在其他问题(日志中的错误或异常)。
我已经进行了 12 次交易,为什么总利润还是负的?¶
我理解你的失望,但不幸的是,仅凭 12 次交易还无法说明任何问题。如果你运行回测,可以看到当前算法在经过数千次交易后确实能让你盈利,但即便如此,对于某些币种来说,即使你交易了几十次甚至上百次,仍可能会有亏损。我们当然一直在努力改进机器人,但它始终是一种赌博,目标是让你每月获得适度的收益,而不能仅凭几次交易就下定论。
我想修改配置文件,可以不关闭机器人直接修改吗?¶
可以。你可以编辑你的配置文件,并使用 /reload_config 命令重新加载配置。机器人会停止运行,重新加载配置和策略,然后以新的配置和策略重新启动。
为什么我的机器人没有卖出所有买入的币?¶
这被称为“零头币”(coin dust),在所有交易所都可能发生。原因是许多交易所在交易时会从“接收货币”中扣除手续费——例如你买入 100 COIN,但实际只收到 99.9 COIN。由于 COIN 是以整数单位进行交易(每次 1COIN),你无法卖出 0.9 COIN(或 99.9 COIN),只能向下取整到 99 COIN。
这不是机器人的问题,手动交易时也会出现这种情况。
虽然 Freqtrade 可以处理这种情况(它会卖出 99 COIN),但手续费通常低于最小可交易单位(你只能交易完整的 COIN,不能交易 0.9 COIN)。因此将这些零头(0.9 COIN)留在交易所通常是合理的,当下次 Freqtrade 买入 COIN 时,它会消耗这部分剩余的小额余额,这次就能卖出所有买入的币,从而逐渐减少零头余额(尽管很可能永远不会完全归零)。
在可能的情况下(例如币安),使用交易所指定的手续费币种可以解决这个问题。在币安上,只要你账户中有 BNB,并在个人资料中启用了“使用 BNB 支付手续费”,就可以避免零头问题。你的 BNB 余额会随着手续费的支付而缓慢减少,但你将不再遇到零头问题(Freqtrade 会在利润计算中包含手续费)。其他交易所不提供此类功能,这种情况下你只能接受这一现实,或考虑更换交易所。
我向交易所存入了更多资金,但机器人没有识别到这些资金¶
Freqtrade 会在必要时更新交易所余额(下单前)。RPC 调用(如 Telegram 的/balance命令,或 API 调用/balance)每小时最多触发一次余额更新。
如果启用了adjust_trade_position(且机器人有符合条件的未平仓交易),钱包每小时会刷新一次。若要强制立即更新,可以使用/reload_config命令——这将重启机器人。
我想使用未完成的 K 线数据¶
Freqtrade 不会向策略提供未完成的 K 线数据。使用未完成的 K 线会导致重绘(repainting),从而产生“幽灵”买入信号,这些信号既无法回测,也无法在发生后验证。
你可以通过数据提供器(dataprovider)的盘口(orderbook)或行情(ticker)方法来使用“当前”市场数据,但这些方法在回测中不可用。
有没有一个设置可以只退出当前持有的交易,而不进行任何新的入场操作?¶
你可以在 Telegram 中使用 /stopentry 命令来阻止后续交易开仓,然后使用 /forceexit all(卖出所有未平仓交易)。
我卖出了机器人的资金,现在日志中出现了错误¶
Freqtrade 假设它开启的交易仅通过机器人进行管理。
如果你(意外地)卖出了机器人的资金,freqtrade 将尝试通过重新查找交易所中的订单来恢复。
这是一种尽力而为的方法,并不适用于所有情况,特别是当你使用 freqtrade 不支持的订单类型(如 OCO、冰山单等),或处理较早的交易(此时交易所不再提供完整的订单信息)时。具体限制因交易所而异,详细信息通常记录在交易所的 API 文档中。
我想在同一台机器上运行多个机器人¶
请查看 高级设置文档页面。
启动机器人时出现“无法加载策略”错误¶
当机器人无法加载策略时会显示此错误消息。通常,你可以使用 freqtrade list-strategies 命令列出所有可用策略。该命令的输出还包括一个状态列,显示策略是否可以被加载。
请检查以下几点:
- 你使用的策略名称是否正确?策略名称区分大小写,必须与策略类名一致(而不是文件名!)。
- 策略文件是否位于
user_data/strategies目录下,并且文件扩展名为.py? - 在此错误之前,机器人是否显示了其他警告?也许你缺少该策略所需的某些依赖项——这些信息会在日志中高亮提示。
- 如果使用 Docker,策略目录是否已正确挂载(请检查 docker-compose 文件中的 volumes 部分)?
我在日志中看到“Missing data fillup”(缺失数据填充)消息¶
此消息只是一个警告,表示最近的 K 线存在缺失。根据交易所的不同,这可能意味着该交易对在你使用的周期内没有发生交易——而交易所仅返回有成交量的 K 线。对于低交易量的交易对,这种情况相当常见。
如果所有交易对都出现此情况,可能表明交易所最近出现过宕机。请查看交易所的公开频道以获取详细信息。
无论原因为何,Freqtrade 都会用“空”K 线填充这些缺失的 K 线,其中开盘价、最高价、最低价和收盘价均设为前一根 K 线的收盘价,成交量为空。在图表上,这将显示为一个 _,这也符合交易所通常表示零成交量 K 线的方式。
我收到“检测到两根 K 线之间价格跳变”警告¶
此消息表示 K 线之间的价格跳变超过 30%。这可能意味着该交易对停止了交易,并发生了某种代币交换(例如 2021 年的 COCOS,价格从 0.0000154 跳涨至 0.01621)。此消息通常伴随着 “Missing data fillup”,因为此类交易对的交易通常会暂停一段时间。
我想重置机器人的数据库¶
要重置机器人的数据库,你可以直接删除数据库文件(默认为 tradesv3.sqlite 或 tradesv3.dryrun.sqlite),或通过 --db-url 使用不同的数据库地址(例如:sqlite:///mynewdatabase.sqlite)。
我在日志中看到“交易对 xxx 的历史数据已过时”¶
机器人是在提醒你,它获取到了一个过时的最新 K 线(不是最新的完整 K 线)。因此,Freqtrade 将不会为此交易对开仓——因为基于过时信息进行交易通常不是我们期望的行为。
此警告可能指向以下某个问题:
- 交易所宕机 -> 请查看该交易所的状态页面、博客或 Twitter 动态以获取详细信息。
- 系统时间错误 -> 确保你的系统时间准确无误。
- 交易量极低的交易对 -> 在交易所网页上检查该交易对,并查看你的策略所使用的周期。如果某些 K 线没有成交量(通常表现为“成交量为 0”的柱状图和一根“_”形状的 K 线),说明该时间段内该交易对没有任何交易。这类交易对应尽量避免使用,因为它们可能导致订单无法成交的问题。
- API 问题 -> API 返回了错误的数据(此项仅用于完整性说明,在官方支持的交易所上不应发生此类情况)。
我在日志中看到消息“无法重用 xxx 的监听”¶
这是一个提示性消息,表示机器人尝试使用来自 WebSocket 的 K 线数据,但交易所未能提供正确的信息。这可能是因为 WebSocket 连接曾中断,或者该交易对在你使用的周期内没有发生任何交易。
Freqtrade 会优雅地处理这种情况,自动回退到 REST API 获取数据。虽然这会使迭代过程稍慢一些(由于调用 REST API),但不会影响机器人的正常运行。
我收到“交易所 XXX 不支持市价单”的提示,无法运行我的策略¶
正如提示所说,你的交易所不支持市价单,而你的配置中将某种订单类型设置为了“market”。你的策略可能是为其他交易所编写的,默认对止损单(stoploss)使用“market”市价单,这对大多数支持市价单的交易所是正确且推荐的做法,但 Gate.io 等交易所不支持。
要解决此问题,请在策略中重新定义订单类型,将“market”改为“limit”:
order_types = {
...
"stoploss": "limit",
...
}
如果你在自定义配置文件中定义了订单类型,也应在配置文件中做同样的修改。
我尝试启动实盘机器人,但却收到 API 权限错误¶
像 Invalid API-key, IP, or permissions for action 这类错误信息就是字面意思:
你的 API 密钥可能无效(是否复制粘贴出错?检查配置中是否有前导或尾随空格)、已过期,或者你运行机器人的 IP 地址未在交易所的 API 控制台中启用。
通常需要开启“现货交易”权限(或你所用交易所对应的等效权限)。
期货交易通常需要单独开通。
如何搜索机器人日志中的内容?¶
默认情况下,机器人将其日志写入 stderr(标准错误)流。这样设计是为了方便你将机器人的诊断信息与回测、Edge、Hyperopt 的结果,以及其他 Freqtrade 工具命令的输出,还有你在策略中插入的自定义 print() 输出区分开来。因此,如果你想使用 grep 工具搜索日志内容,需要先将 stderr 重定向到 stdout,并忽略 stdout 的输出。
- 在 Unix shell 中,通常可以简单地这样做:(注意,
$ freqtrade --some-options 2>&1 >/dev/null | grep 'something'2>&1和>/dev/null应按此顺序书写)
- Bash 解释器还支持所谓的进程替换语法,你可以使用它来通过 grep 查找日志中的字符串,例如:或者
$ freqtrade --some-options 2> >(grep 'something') >/dev/null$ freqtrade --some-options 2> >(grep -v 'something' 1>&2)
- 你还可以使用
--logfile选项将 Freqtrade 的日志消息复制到文件中:然后像这样使用 grep 搜索:$ freqtrade --logfile /path/to/mylogfile.log --some-options甚至可以在机器人运行时实时搜索不断增长的日志文件:$ cat /path/to/mylogfile.log | grep 'something',从另一个终端窗口执行。$ tail -f /path/to/mylogfile.log | grep 'something'
在 Windows 上,Freqtrade 也支持 --logfile 选项,你可以使用 findstr 命令来搜索日志中感兴趣的字符串:
> type \path\to\mylogfile.log | findstr "something"
Hyperopt 模块¶
为什么 freqtrade 不支持 GPU?¶
首先,大多数指标库都不支持 GPU —— 因此,对于指标计算来说几乎没有好处。GPU 的提升仅适用于 pandas 原生的计算,或你自己编写的计算。
GPU 只擅长数值计算(浮点运算)。对于超参数优化(hyperopt),我们既需要数值计算(寻找下一组参数),也需要运行 Python 代码(执行回测)。因此,GPU 并不适用于超参数优化的大部分环节。
因此,使用 GPU 带来的优势非常有限——而且引入 GPU 支持所带来的复杂性也不值得。
不过,如果你确实需要,你仍然可以在策略中使用支持 GPU 的指标。但你可能会对由此带来的微弱性能提升感到失望(相比增加的复杂性而言)。
我需要多少轮训练才能得到一个好的 Hyperopt 结果?¶
默认情况下,如果不使用 -e/--epochs 命令行选项,Hyperopt 仅运行 100 轮,即对你的触发条件、保护规则等进行 100 次评估。这远远不足以找到一个优秀的结果(除非你非常幸运),因此你可能需要运行 10000 轮甚至更多。但这将花费极长的时间来计算。
由于 hyperopt 使用贝叶斯搜索,运行过多的训练轮次可能并不会带来更好的结果。
因此建议反复运行 500 到 1000 轮,直到总轮数达到至少 10000 轮(或你对结果满意为止)。你可以通过观察结果自行判断——如果机器人仍在发现更好的策略,最好继续运行。
freqtrade hyperopt --hyperopt-loss SharpeHyperOptLossDaily --strategy SampleStrategy -e 1000
为什么运行 hyperopt 需要很长时间?¶
- 使用 Hyperopt 找到一个优秀的策略需要时间。请查阅 www.freqtrade.io,即 Freqtrade 官方文档页面,并加入 Freqtrade 的 Discord 社区。在你耐心等待这个世界上最先进的免费加密货币交易机器人,为你量身定制一个可能的黄金策略的同时,不妨深入学习相关知识。
- 如果你好奇为什么完成 1000 轮训练可能需要从 20 分钟到数天不等,以下是一些解释:
本文撰写于版本 0.15.1 发布期间,当时我们有:
- 8 种触发条件
- 9 种保护规则:假设每种我们评估 10 个取值
- 1 种止损计算:假设我们也希望评估其中 10 个取值
以下计算仍然非常粗略且不够精确,但足以说明问题。仅这些触发条件和保护规则就已经有 8*10^9*10 次评估,总共约 800 亿次评估。如果你完成了 10 万次评估?恭喜你,你大约只探索了整个搜索空间的十万分之一(假设机器人从未重复测试相同的参数)。
- 运行 1000 轮 hyperopt 所需的时间取决于多种因素:可用的 CPU、硬盘、内存、时间框架、时间范围、指标设置、指标数量、hyperopt 测试策略的币种数量以及由此产生的交易次数——根据策略目标是通过少量交易获取高额利润,还是通过大量交易获取小额利润,一年内的交易次数可能从 650 次到 10 万次不等。
示例:一年内 650 次交易,每次盈利 4% vs 一年内 10000 次交易,每次盈利 0.3%。假设你将 --timerange 设置为 365 天。
示例:freqtrade --config config.json --strategy SampleStrategy --hyperopt SampleHyperopt -e 1000 --timerange 20190601-20200601
官方渠道¶
Freqtrade 仅使用以下官方渠道:
Freqtrade 项目相关人员不会向您索要交易所密钥或任何可能暴露您资金的信息。如果有人要求您提供交易所密钥或将资金发送至某个随机钱包,请勿听从此类指示。
未能遵守这些准则所产生的后果,Freqtrade 项目方概不负责。
支持政策¶
我们通过 Discord 服务器 和 GitHub issues 为 Freqtrade 提供免费支持。我们仅支持最新正式版本(例如 2025.8)以及当前的开发分支(例如 2025.9-dev)。
如果您使用的是较旧版本,请先按照 升级说明 进行更新,并查看您的问题是否已被解决。
“Freqtrade 代币”¶
Freqtrade 不提供任何加密代币。
互联网上任何声称与 Freqtrade、FreqAI 或 freqUI 相关的代币发行均属诈骗,企图利用 Freqtrade 的知名度谋取不法利益。