支持的市场¶
Freqtrade 支持现货交易,以及一些选定交易所的(隔离)期货交易。请参阅文档起始页获取支持交易所的最新列表。
我的机器人可以开空仓吗?¶
Freqtrade 可以在期货市场开空仓。
这需要为此制定策略 - 并在配置中设置 "trading_mode": "futures"
。
请确保先阅读相关文档页面。
在现货市场,在某些情况下,你可以使用杠杆现货代币,它们反映了反向交易对(例如 BTCUP/USD、BTCDOWN/USD、ETHBULL/USD、ETHBEAR/USD 等),可以用 Freqtrade 进行交易。
我的机器人可以交易期权或期货吗?¶
期货交易在选定的交易所受支持。请参阅文档起始页获取支持交易所的最新列表。
初学者技巧和窍门¶
- 当你使用策略和超优化文件时,你应该使用适当的代码编辑器,如 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 笔交易,而一周内其余时间都是 0。
可能是由于配置错误。最好检查日志,它们通常会告诉你机器人是否只是没有获得买入信号(只有心跳消息),或者是否有问题(日志中的错误/异常)。
我已经做了 12 笔交易,为什么我的总利润是负的?¶
我理解你的失望,但不幸的是,12 笔交易还不足以说明任何问题。如果你运行回测,你可以看到当前算法确实让你处于盈利状态,但那是在数千笔交易之后,即使在那里,你也会在特定币种上留下亏损,这些币种你已经交易了数十次甚至数百次。我们当然不断努力改进机器人,但它将_始终_是一场赌博,应该让你在每月基础上获得适度的收益,但从几笔交易中你不能说太多。
我想更改配置。我可以在不杀死机器人的情况下这样做吗?¶
是的。你可以编辑你的配置并使用 /reload_config
命令重新加载配置。机器人将停止,重新加载配置和策略,并使用新的配置和策略重新启动。
为什么我的机器人不卖出它买的所有东西?¶
这被称为"币尘",可能发生在所有交易所。 发生这种情况是因为许多交易所从"接收货币"中扣除费用 - 所以你买入 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 时,它会消耗剩余的小额余额,这次卖出它买的所有东西,因此慢慢减少币尘余额(虽然它很可能永远不会达到正好 0)。
在可能的情况下(例如在币安),使用交易所的专用费用货币将解决这个问题。 在币安,只需在你的账户中有 BNB,并在你的个人资料中启用"使用 BNB 支付费用"。你的 BNB 余额将慢慢减少(因为它用于支付费用)- 但你将不再遇到币尘(Freqtrade 将在利润计算中包括费用)。 其他交易所不提供这种可能性,在这种情况下,你只能接受或转移到不同的交易所。
我向交易所存入了更多资金,但我的机器人没有识别到¶
Freqtrade 会在必要时更新交易所余额(在下单之前)。
RPC 调用(Telegram 的 /balance
,API 调用到 /balance
)最多可以每小时触发一次更新。
如果启用了 adjust_trade_position
(并且机器人有符合条件的开放交易可以调整仓位)- 那么钱包将每小时刷新一次。
要强制立即更新,你可以使用 /reload_config
- 这将重启机器人。
我想使用不完整的蜡烛图¶
Freqtrade 不会向策略提供不完整的蜡烛图。使用不完整的蜡烛图会导致重绘,从而导致策略出现"幽灵"买入,这在回测和事后验证都是不可能的。
你可以通过使用数据提供者的订单簿或行情方法来使用"当前"市场数据 - 但这不能在回测期间使用。
有没有设置可以只出场持有的交易而不进行任何新的入场?¶
你可以使用 Telegram 中的 /stopentry
命令来防止未来的交易入场,然后使用 /forceexit all
(卖出所有开放交易)。
我卖出了机器人的资金,现在日志中有错误¶
Freqtrade 假设它开启的交易只通过机器人管理。
如果你碰巧(意外地)卖出了机器人的资金,freqtrade 将尝试通过重新查找交易所订单来恢复。
这是一种尽力而为的方法,并非在所有情况下都有效,特别是当使用 freqtrade 不支持的订单类型(OCO、冰山订单等)时,或者处理较旧的交易时(交易所不再提供完整的订单信息)。 具体限制因交易所而异 - 详细信息通常在交易所的 API 文档中记录。
我想在同一台机器上运行多个机器人¶
请查看高级设置文档页面。
启动机器人时出现"Impossible to load Strategy"错误¶
当机器人无法加载策略时,会显示此错误消息。
通常,你可以使用 freqtrade list-strategies
来列出所有可用的策略。
此命令的输出还将包括一个状态列,显示是否可以加载策略。
请检查以下内容:
- 你使用的是正确的策略名称吗?策略名称区分大小写,必须与策略类名对应(不是文件名!)。
- 策略是否在
user_data/strategies
目录中,并且文件扩展名为.py
? - 机器人是否在此错误之前显示其他警告?也许你缺少策略的一些依赖项 - 这将在日志中突出显示。
- 如果是 docker - 策略目录是否正确挂载(检查 docker-compose 文件的 volumes 部分)?
我在日志中看到"Missing data fillup"消息¶
此消息只是一个警告,表示最新的蜡烛图中有缺失的蜡烛图。 根据交易所的不同,这可能表明交易对在你使用的时间框架内没有交易 - 而交易所只返回有成交量的蜡烛图。 在低成交量交易对上,这是一个相当常见的情况。
如果这对白名单中的所有交易对都发生,这可能表明交易所最近停机。请查看你的交易所的公共渠道了解详情。
无论原因如何,Freqtrade 都会用"空"蜡烛图填充这些蜡烛图,其中开盘价、最高价、最低价和收盘价都设置为前一个蜡烛图的收盘价 - 成交量为空。在图表中,这将看起来像一个 _
- 并与交易所通常表示 0 成交量蜡烛图的方式一致。
我看到"Price jump between 2 candles detected"消息¶
此消息是一个警告,表示蜡烛图之间的价格跳跃超过 30%。 这可能表明交易对停止交易,并且发生了一些代币交换(例如 2021 年的 COCOS - 价格从 0.0000154 跳到 0.01621)。 此消息通常伴随着"Missing data fillup" - 因为此类交易对的交易通常会停止一段时间。
我想重置机器人的数据库¶
要重置机器人的数据库,你可以删除数据库(默认为 tradesv3.sqlite
或 tradesv3.dryrun.sqlite
),或通过 --db-url
使用不同的数据库 URL(例如 sqlite:///mynewdatabase.sqlite
)。
我在日志中看到"Outdated history for pair xxx"¶
机器人试图告诉你它收到了一个过时的最后一个蜡烛图(不是最后一个完整的蜡烛图)。 因此,Freqtrade 不会为此交易对入场 - 因为在旧信息上交易通常不是我们想要的。
此警告可能指向以下问题之一:
- 交易所停机 -> 查看你的交易所状态页面/博客/推特动态了解详情。
- 系统时间错误 -> 确保你的系统时间正确。
- 几乎没有交易的交易对 -> 在交易所网页上查看交易对,查看你的策略使用的时间框架。如果交易对在某些蜡烛图中没有任何成交量(通常用"成交量 0"柱和"_"作为蜡烛图表示),这个交易对在这个时间框架内没有任何交易。理想情况下应该避免这些交易对,因为它们可能导致订单填充问题。
- API 问题 -> API 返回错误数据(这里只是为了完整性,不应该发生在支持的交易所上)。
我在日志中看到消息"Couldn’t reuse watch for xxx"¶
这是一个信息性消息,表示机器人试图使用来自 websocket 的 K 线数据,但交易所没有提供正确的信息。 如果 websocket 连接中断 - 或者如果交易对在您使用的时间框架内没有发生任何交易,就可能发生这种情况。
Freqtrade 将通过回退到 REST API 来优雅地处理这种情况。 虽然这会使迭代稍微变慢(由于 REST API 调用) - 但不会对机器人的运行造成任何问题。
(#im-getting-the-exchange-xxx-does-not-support-market-orders-message-and-cannot-run-my-strategy)=
我看到"Exchange XXX does not support market orders."消息,无法运行我的策略¶
正如消息所说,你的交易所不支持市价单,并且你将订单类型之一设置为"market"。你的策略可能是为其他交易所编写的,并为"stoploss"订单设置了"market"订单,这对于大多数支持市价单的交易所来说是正确的(但对于 Gate.io 不是)。
要修复此问题,在策略中重新定义订单类型,使用"limit"而不是"market":
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 日志消息的副本写入文件:
> freqtrade --logfile /path/to/mylogfile.log --some-options
然后像这样 grep:
> 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 不太适合 hyperopt 的大部分部分。
使用 GPU 的好处因此相当小 - 并且不会证明尝试添加 GPU 支持所带来的复杂性是合理的。
但是,如果你认为必须这样做,没有什么可以阻止你在策略中使用支持 GPU 的指标 - 但是你可能会对这将给你带来的微小收益感到失望(与复杂性相比)。
我需要多少个 epoch 才能获得好的 Hyperopt 结果?¶
默认情况下,不带 -e
/--epochs
命令行选项调用的 Hyperopt 只会运行 100 个 epoch,意味着对你的触发器、守卫等进行 100 次评估。太少而无法找到很好的结果(除非你非常幸运),所以你可能需要运行 10000 或更多。但这将需要很长时间来计算。
由于 hyperopt 使用贝叶斯搜索,运行太多 epoch 可能不会产生更好的结果。
因此,建议反复运行 500-1000 个 epoch,直到你总共达到至少 10000 个 epoch(或对结果满意)。你可以通过查看结果来判断 - 如果机器人不断发现更好的策略,最好继续运行。
freqtrade hyperopt --hyperopt-loss SharpeHyperOptLossDaily --strategy SampleStrategy -e 1000
为什么运行 hyperopt 需要很长时间?¶
使用 Hyperopt 发现一个伟大的策略需要时间。研究
www.freqtrade.io
,Freqtrade 文档页面,加入 Freqtrade discord 社区。当你耐心等待世界上最先进的免费加密货币机器人,为你特别设计一个可能的黄金策略时。如果你想知道为什么做 1000 个 epoch 可能需要从 20 分钟到几天,这里有一些答案:
这个答案是在 0.15.1 版本发布期间写的,当时我们有:
- 8 个触发器
- 9 个守卫:假设我们每个评估 10 个值
- 1 个止损计算:假设我们也想评估 10 个值
以下计算仍然非常粗略且不太精确,但它会给出一个概念。仅这些触发器和守卫就有 8*10^9*10 次评估。大约总共 800 亿次评估。 你运行了 100000 次评估?恭喜,你已经完成了搜索空间的大约 1/100000,假设机器人从未多次测试相同的参数。
- 运行 1000 个 hyperopt epoch 所需的时间取决于以下因素:可用的 cpu、硬盘、内存、时间框架、时间范围、指标设置、指标数量、hyperopt 测试策略的币种数量以及由此产生的交易数量 - 这可能是一年 650 笔交易或 100000 笔交易,取决于策略是旨在通过很少交易获得大利润,还是通过许多低利润交易。
示例:一年中 650 次 4% 利润 vs 10000 次 0.3% 利润。假设你将 --timerange 设置为 365 天。
示例:
freqtrade --config config.json --strategy SampleStrategy --hyperopt SampleHyperopt -e 1000 --timerange 20190601-20200601
Edge 模块¶
Edge 实现了一个有趣的方法来控制仓位大小,这背后有什么理论吗?¶
Edge 模块主要是 freqtrade 团队成员 mishaker 和 creslinux 头脑风暴的结果。
你可以在以下来源中找到关于期望值、胜率、风险管理和仓位大小的更多信息:
- https://
www .tradeciety .com /ultimate -math -guide -for -traders/ - https://
samuraitradingacademy .com /trading -expectancy/ - https://
www .learningmarkets .com /determining -expectancy -in -your -trading/ - https://
www .lonestocktrader .com /make -money -trading -positive -expectancy/ - https://
www .babypips .com /trading /trade -expectancy -matter
官方渠道¶
Freqtrade 仅使用以下官方渠道:
与 freqtrade 项目相关的任何人都不会询问你的交易所密钥或任何其他可能暴露你的资金被利用的信息。 如果有人要求你暴露交易所密钥或将资金发送到某个随机钱包,请不要遵循这些指示。
不遵循这些准则将不是 freqtrade 的责任。
“Freqtrade 代币”¶
Freqtrade 没有加密货币代币发行。
你在互联网上找到的提及 Freqtrade、FreqAI 或 freqUI 的代币发行必须被视为骗局,试图利用 freqtrade 的受欢迎程度来获取他们自己的不正当利益。