Skip to content

Freqtrade 常见问题解答

支持的市场

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 命令来激活虚拟环境。
  • 安装过程未成功完成。

我已经等了5分钟,为什么机器人还没有进行任何交易?

  • 根据买入策略、白名单中的币种数量、市场情况等因素,寻找交易的良好入场位置可能需要几个小时的时间。请耐心等待!* 这可能是由于配置错误导致的。最好检查日志,它们通常会告诉你是否出现了问题(只有心跳消息而没有买入信号),或者是否存在其他问题(日志中出现错误/异常)。

我已经进行了12笔交易,为什么我的总利润是负数?

我理解你的失望,但很遗憾,仅凭12笔交易无法断言任何事情。如果进行回测,你会发现当前算法确实能让你获利,但这是在进行了数千笔交易后,甚至在那里,你在特定币种上仍会有亏损,因为你已经进行了数十次甚至数百次交易。我们当然会不断努力改进机器人,但这将始终是一场赌博,它应该让你每个月获得适度的胜利,但你不能从少数交易中得出太多结论。

我想对配置进行更改,我能在不关闭机器人的情况下做到吗?

是的。你可以编辑你的配置文件,并使用/reload_config命令重新加载配置。机器人将停止,重新加载配置和策略,并使用新的配置和策略重新启动。

为什么我的机器人没有卖掉它买入的所有币种?

这被称为“币尘”,在所有交易所都可能发生。 这是因为许多交易所会从“收到的货币”中扣除费用,所以你购买了100个COIN,但你只得到了99.9个COIN。 由于COIN以完整的数量单位(1个COIN一步)进行交易,你无法出售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 命令,它将重新启动机器人。

我想使用不完整的K线

Freqtrade不会向策略提供不完整的K线。使用不完整的K线会导致重绘,并因此导致产生具有“虚假”买入的策略,无法进行回测,也无法在发生之后进行验证。

您可以通过使用数据提供者的订单簿或市场行情方法来使用“当前”的市场数据,但这些方法不能在回测期间使用。

是否有设置可以只退出当前持仓而不进行新的入场交易?

您可以在 Telegram 中使用 /stopentry 命令来阻止未来的交易入场,然后使用 /forceexit all(卖出所有开放的交易)。

我想在同一台机器上运行多个机器人

请查看高级设置文档页

我在日志中收到了"缺失数据填充"的消息

这条消息只是一个警告,最近的K线图中有缺失的蜡烛。 根据交易所的不同,这可能表示你使用的时间段内该交易对没有交易 - 且交易所只返回有成交量的蜡烛。 对于低交易量的交易对来说,这是一个常见的情况。

如果所有交易对都出现这种情况,这可能表示最近交易所出现了停机。请查看交易所的公共渠道以获取详细信息。

不论原因如何,Freqtrade会用“空”蜡烛填充这些缺失的蜡烛,其中开盘价、最高价、最低价和收盘价被设置为上一个蜡烛的收盘价 - 成交量为空。在图表上,这将显示为一个_,与交易所通常表示0成交量蜡烛的方式一致。

我在日志中收到了"检测到两个蜡烛之间的价格跳动"的消息

这条消息是一个警告,蜡烛图中出现了大于30%的价格跳动。 这可能意味着该交易对停止交易,并进行了某种代币交换(例如2021年的COCOS,价格从0.0000154跳跃到0.01621)。 这条消息通常会伴随着"缺失数据填充"的消息 - 因为这种交易对通常会在一段时间内停止交易。

我在日志中收到了"对于交易对xxx的历史过时"的消息

机器人试图告诉你它获取了过时的最后一个蜡烛(不是最后一个完整的蜡烛)。 因此,Freqtrade不会针对该交易对进行交易 - 因为通常不希望基于过时的信息进行交易。

这个警告可能指向以下几个问题之一:

  • 交易所停机 -> 检查交易所的状态页面/博客/推特动态以获取详细信息。
  • 系统时间错误 -> 确保系统时间正确。
  • 交易量很低的交易对 -> 检查交易所网页上的交易对,查看你的策略使用的时间框架。如果该交易对在某些蜡烛中没有任何交易(通常用“volume 0”条和“_”表示的蜡烛表示),则该交易对在该时间框架内没有任何交易。这些交易对最好避免,因为它们可能导致订单填充的问题。
  • API问题 -> API返回错误的数据(这只是为了完整性而在这里,并且不应该在支持的交易所中发生)。

我收到了 "交易所 XXX 不支持市价订单" 的消息,无法运行我的策略

正如消息所说,您的交易所不支持市价订单,并且您的其中一种订单类型设置为 "market"。您的策略可能是针对其他交易所编写的,并且将 "market" 订单设置为 "stoploss" 订单,这对于大多数支持市价订单的交易所(但不适用于 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 --一些选项 2>&1 >/dev/null | grep 'something'
    
    (请注意,2>&1>/dev/null 应按此顺序编写)* Bash解释器也支持所谓的进程替代语法,您可以使用它来用grep命令搜索日志中的字符串,如下所示:
    $ freqtrade --一些选项 2> >(grep 'something') >/dev/null
    
    或者
    $ freqtrade --一些选项 2> >(grep -v 'something' 1>&2)
    
  • 您还可以使用--logfile选项将Freqtrade日志消息复制到文件中:
    $ freqtrade --logfile /path/to/mylogfile.log --一些选项
    
    然后可以使用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本地计算或自己编写的计算代码。

对于hyperopt,Freqtrade使用的是建立在scikit-learn之上的scikit-optimize。 他们对于GPU支持的声明非常明确

GPU只擅长运算(浮点运算)。 对于hyperopt,我们需要进行计算(寻找下一个参数)和运行Python代码(运行回测)两部分。

使用GPU的好处很小,不能弥补添加GPU支持所引入的复杂性。

因此,如果您认为必须使用启用了GPU的指标,则可以在策略中使用它们,但相对于复杂性,您可能会对所获得的微小收益感到失望。

需要运行多少个 epochs 才能得到一个好的 Hyperopt 结果?

默认情况下,如果不使用 -e/--epochs 命令行选项调用 Hyperopt,它只会运行 100 个 epochs,即对触发器、保护条件等进行 100 次评估。这太少了,无法得到很好的结果(除非你很幸运),因此你可能需要运行 10000 次或更多次。但这将需要很长时间来计算。

由于 hyperopt 使用贝叶斯搜索,运行过多的 epochs 可能不会产生更好的结果。

因此建议每次运行 500-1000 个 epochs,直到总共达到至少 10000 个 epochs(或者满意于结果为止)。你可以通过观察结果来做出最好的判断 - 如果机器人不断发现更好的策略,最好继续下去。

freqtrade hyperopt --hyperopt-loss SharpeHyperOptLossDaily --strategy SampleStrategy -e 1000

为什么运行 hyperopt 需要很长时间?

  • 使用 Hyperopt 找到一个好的策略需要时间。学习 www.freqtrade.io,Freqtrade 文档页面,加入 Freqtrade Discord 社区。在耐心等待世界上最先进的免费加密货币机器人为您提供一个专门为您设计的有可能是黄金策略的时候。
  • 如果你想知道为什么做 1000 个 epochs 可以花费从 20 分钟到数天的时间,这里有一些答案:

本回答是在版本 0.15.1 发布期间编写的,当时我们有:

  • 8 个触发器
  • 9 个保护条件:假设我们评估每个条件的 10 个值
  • 1 个止损计算:假设我们希望评估其中的 10 个值以下的计算还非常粗略和不太准确,但它可以给你个大概的想法。只有这些触发器和保护装置就会有 810^910 次评估。总共大约有 8000 亿次评估。你运行了 100,000 次评估吗?恭喜,你大约完成了搜索空间的 1/100,000。这里假设机器人不会测试相同的参数超过一次。
  • 运行 1000 个 hyperopt epoch 的时间取决于诸如可用的 CPU、硬盘、RAM、时间框架、时间范围、指标设置、指标数量、hyperopt 测试策略的币种数量以及结果交易数量等因素。结果交易数量可以是一年内的 650 笔交易或者 10,000 笔交易,这取决于策略是追求大利润但很少交易,还是追求许多低利润交易。

例如:一年内 4% 的利润 650 次 vs. 一年内 0.3% 的利润一次 10,000 次。假设你将 --timerange 设置为 365 天。

例如: freqtrade --config config.json --strategy SampleStrategy --hyperopt SampleHyperopt -e 1000 --timerange 20190601-20200601

Edge 模块

Edge 采用了一种有趣的方法来控制仓位大小,背后是否有理论支持?

Edge 模块主要是 freqtrade 团队成员 @mishaker@creslinux 的头脑风暴的结果。

你可以在以下来源中找到关于预期、胜率、风险管理和仓位大小的更多信息:

官方渠道Freqtrade只使用以下官方渠道:

与freqtrade项目有关联的人员不会要求您提供交易所密钥或任何可能暴露您资金的信息。如果有人要求您提供交易所密钥或向某个随机钱包发送资金,请不要遵循这些指示。

如果不遵循这些指导方针,freqtrade将不承担责任。

"Freqtrade代币"

Freqtrade没有加密代币发行。

您在互联网上找到的与Freqtrade、FreqAI或freqUI有关的代币发行都应该被视为骗局,试图利用freqtrade的知名度谋取他们自己的不正当利益。