Skip to content

特定交易所注意事项

本页面包含了一些常见的注意事项和特定于某些交易所的信息,这些信息很可能不适用于其他交易所。

交易所配置

Freqtrade基于CCXT库,支持100多个加密货币交易所市场和交易API。最新的完整列表可以在CCXT repo首页找到。 然而,开发团队只在少数交易所上测试了该机器人。 这些交易所的当前列表可以在此文档的"主页"部分找到。

您可以随意测试其他交易所,并提交您的反馈或PR,以改进机器人或验证可以完美运行的交易所。

一些交易所需要特殊配置,可以在下面找到。

示例交易所配置

"binance"交易所的配置如下所示:

"exchange": {
    "name": "binance",
    "key": "your_exchange_key",
    "secret": "your_exchange_secret",
    "ccxt_config": {},
    "ccxt_async_config": {},
    // ...

设置速率限制

通常情况下,CCXT设置的速率限制是可靠的并且运行良好。如果遇到与速率限制相关的问题(通常在日志中看到的DDOS异常),很容易将rateLimit设置为其他值。

"exchange": {
    "name": "kraken",
    "key": "your_exchange_key",
    "secret": "your_exchange_secret",
    "ccxt_config": {"enableRateLimit": true},
    "ccxt_async_config": {
        "enableRateLimit": true,
        "rateLimit": 3100
    },

此配置启用了Kraken,并通过限制速率避免交易所的封禁。"rateLimit": 3100 定义了每次调用之间的等待时间为3.1秒。你也可以将"enableRateLimit"设置为false来完全禁用速率限制。

注意

速率限制的最佳设置取决于交易所和白名单的大小,因此最佳参数会因许多其他设置而异。我们尽可能为每个交易所提供合理的默认值,如果遇到封禁,请确保已启用"enableRateLimit"并逐步增加"rateLimit"参数。

Binance

服务器位置和地理IP限制

请注意,Binance根据服务器所在国家限制API访问。当前已知的被封国家包括加拿大、马来西亚、荷兰和美国。请前往Binance条款 > b. Eligibility获取最新名单。

Binance支持time_in_force

在交易所上设置止损

Binance支持stoploss_on_exchange并使用stop-loss-limit订单。这提供了很大的优势,因此我们建议启用交易所上的止损。在期货交易中,Binance同时支持stop-limitstop-market订单,您可以在order_types.stoploss配置中使用"limit""market"来决定使用哪种类型。

Binance黑名单推荐

对于Binance,建议将"BNB/<STAKE>"添加到黑名单以避免问题,除非您愿意在账户上保持足够多的额外BNB,或者除非您愿意禁用使用BNB支付费用。Binance账户可以使用BNB支付费用,如果某次交易恰好使用了BNB,进一步的交易可能会消耗这个位置,导致最初的BNB交易无法出售,因为预期的数量不再存在。

Binance网站

Binance已分为两个部分,用户必须使用正确的ccxt交易所ID来访问他们的交易所,否则API密钥将无法识别。

  • binance.com - 国际用户。使用交易所ID:binance
  • binance.us - 美国用户。使用交易所ID:binanceus

Binance RSA密钥

Freqtrade支持Binance RSA API密钥。

我们建议将它们设置为环境变量。

export FREQTRADE__EXCHANGE__SECRET="$(cat ./rsa_binance.private)"

但它们也可以通过配置文件进行配置。由于JSON不支持多行字符串,您需要将所有换行符替换为\n,以获得有效的JSON文件。

// ...
 "key": "<someapikey>",
 "secret": "-----BEGIN PRIVATE KEY-----\nMIIEvQIBABACAFQA<...>s8KX8=\n-----END PRIVATE KEY-----"
// ...

Binance期货

币安有特定(而且很复杂的)期货交易量化规则需要遵守,其中包括禁止过低的押注金额和过多的订单等。违反这些规则将导致交易限制。

在币安期货市场交易时,必须使用订单簿,因为期货没有价格行情数据。

  "entry_pricing": {
      "use_order_book": true,
      "order_book_top": 1,
      "check_depth_of_market": {
          "enabled": false,
          "bids_to_ask_delta": 1
      }
  },
  "exit_pricing": {
      "use_order_book": true,
      "order_book_top": 1
  },

币安期货设置

用户还必须将期货设置中的“仓位模式”设置为“单向模式”,并将“资产模式”设置为“单一资产模式”。 在启动时,这些设置将被检查,如果设置错误,freqtrade会显示错误信息。

币安期货设置

Freqtrade不会尝试更改这些设置。

Kraken

Kraken支持使用"time_in_force"有"GTC"(永久有效)、"IOC"(立即取消)和"PO"(仅限发布市价)等设置。

在交易所上设置止损

Kraken支持stoploss_on_exchange,并且可以使用止损市价和止损限价委托单。这提供了很大的优势,我们建议从中受益。 您可以在order_types.stoploss配置中使用"limit""market"来决定使用哪种类型。

Kraken历史数据

Kraken API仅提供了720个历史蜡烛数据,这足够在Freqtrade的dry-run和实时交易模式下使用,但在回测中会存在问题。 要下载Kraken交易所的数据,必须使用--dl-trades参数,否则机器人将一遍又一遍地下载相同的720个蜡烛数据,导致回测数据不足。

为了加快下载速度,您可以下载Kraken提供的交易数据压缩文件。 这些文件通常每季度更新一次。Freqtrade希望将这些文件放在user_data/data/kraken/trades_csv目录下。

以下目录结构可以采用增量文件的方式,将“完整”历史数据保存在一个目录中,将增量文件保存在不同的目录中。 这种模式的假设是在下载和解压缩数据时保持文件名不变。 重复的内容将被忽略(基于时间戳),但假设数据中没有间隙。

这意味着,如果您的“完整”历史数据在2022年第四季度结束,那么2023年第一季度和第二季度的增量更新都是可用的。 如果没有这些文件,将导致数据不完整,从而在使用数据时产生无效的结果。

└── trades_csv
    ├── Kraken_full_history
    │   ├── BCHEUR.csv
    │   └── XBTEUR.csv
    ├── Kraken_Trading_History_Q1_2023
    │   ├── BCHEUR.csv
    │   └── XBTEUR.csv
    └── Kraken_Trading_History_Q2_2023
        ├── BCHEUR.csv
        └── XBTEUR.csv

您可以将这些文件转换为Freqtrade文件:

freqtrade convert-trade-data --exchange kraken --format-from kraken_csv --format-to feather
# 将交易数据转换为不同的ohlcv时间框架
freqtrade trades-to-ohlcv -p BTC/EUR BCH/EUR --exchange kraken -t 1m 5m 15m 1h

转换后的数据还可以实现下载数据,并在加载最新交易后开始下载。

freqtrade download-data --exchange kraken --dl-trades -p BTC/EUR BCH/EUR 

从kraken下载数据

从kraken下载数据将需要比其他交易所更多的内存(RAM),因为交易数据需要在您的计算机上转换为蜡烛图。 这也将需要很长时间,因为freqtrade需要下载该交易对/时间范围组合上发生的每一笔交易,所以请耐心等待。

调整限速

请注意,rateLimit配置项指定的是请求之间的延迟时间(以毫秒为单位),而不是请求速率(每秒请求数)。 因此,为了避免Kraken API的“超过请求限制”异常,应该增加该配置项的值,而不是减小。

Kucoin

Kucoin对于每个API密钥都需要一个密语,请将此密钥添加到配置中,以使您的交易所部分如下所示:

"exchange": {
    "name": "kucoin",
    "key": "your_exchange_key",
    "secret": "your_exchange_secret",
    "password": "your_exchange_api_key_password",
    // ...
}

Kucoin支持time_in_force

交易所上的止损单

Kucoin支持stoploss_on_exchange,可以使用止损市价单和止损限价单两种类型的订单。它具有很大的优势,我们建议您从中受益。 您可以在order_types.stoploss配置中使用"limit""market"来决定使用哪种类型的止损单。

Kucoin黑名单

对于Kucoin,建议将"KCS/<STAKE>"添加到您的黑名单中以避免问题,除非您愿意在账户上保留足够多的额外KCS或者您愿意停用KCS用于手续费。 Kucoin账户可能使用KCS支付手续费,如果一笔交易发生在KCS上,后续交易可能会消耗这个仓位,导致最初的KCS交易无法卖出,因为期望的数量不再存在。

HTX(前身为Huobi)!!! Tip "交易所上的止损"

HTX支持`stoploss_on_exchange`并使用`stop-limit`订单。它提供了很多优势,因此我们建议启用交易所上的止损功能。

OKX(前OKEX)

OKX对于每个API密钥都需要一个密码短语,因此您需要将此密钥添加到配置中,以便您的交易所部分看起来如下所示:

"exchange": {
    "name": "okx",
    "key": "your_exchange_key",
    "secret": "your_exchange_secret",
    "password": "your_exchange_api_key_password",
    // ...
}

Warning

OKX每次API调用只提供100个蜡烛图。因此,在回测模式下,策略只会有很少的数据可用。

期货

OKX期货有“仓位模式”的概念,可以是“买入/卖出”或多/空头(对冲模式)。 Freqtrade支持这两种模式(我们推荐使用买入/卖出模式),但是不支持在交易过程中更改模式,这将导致异常和交易失败。 OKX也只提供过去约3个月的MARK蜡烛图。因此,在该日期之前回测期货会导致轻微偏差,因为没有这些数据无法正确计算资金费用。

Gate.io

交易所上的止损

Gate.io支持stoploss_on_exchange并使用stop-loss-limit订单。它提供了很多优势,因此我们建议启用交易所上的止损功能。

Gate.io允许使用POINT支付费用。由于这不是一种可交易的货币(没有常规市场可用),自动费用计算将失败(并默认为0费用)。 配置参数exchange.unknown_fee_rate可用于指定Point和抵押货币之间的汇率。显然,更改抵押货币也会导致此值的更改。

Bybit

在Bybit上,期货交易目前仅支持USDT市场,并使用隔离期货模式。 具有统一账户的用户(无法返回之前的状态)可以创建一个起初为“非统一”的子账户,从而可以使用隔离期货。 在启动时,freqtrade将为整个(子)账户设置持仓模式为“单向模式”。这样做可以避免重复调用此设置(降低机器人操作速度),但是意味着更改此设置可能会导致异常和错误。

由于Bybit不提供资金费率历史记录,因此干扰运行计算也用于实时交易。

用于实时期货交易(非统一子账户)的API密钥必须具有以下权限: * 读写 * 合约 - 订单 * 合约 - 持仓

我们强烈建议将所有API密钥限制为您将要从中使用的IP地址。

交易所上的止损单

Bybit(仅期货)支持stoploss_on_exchange并使用stop-loss-limit订单。它提供了很大的优势,所以我们建议启用交易所上的止损单来从中获益。 在期货交易中,Bybit既支持stop-limit订单,也支持stop-market订单。您可以在order_types.stoploss配置设置中使用"limit""market"来决定使用哪种类型。

Bitmart

在Bitmart上,API密钥附带备注(您给API密钥的名称)一起使用交易所的密钥和秘钥。 因此,传递UID是必需的。

"exchange": {
    "name": "bitmart",
    "uid": "your_bitmart_api_key_memo",
    "secret": "your_exchange_secret",
    "password": "your_exchange_api_key_password",
    // ...
}

必要的验证

Bitmart要求通过API成功在现货市场上进行交易需要进行二级验证——即使仅通过UI进行交易只需要一级验证也能正常工作。

所有交易所

如果您在使用 Nonce 时遇到持续的错误(例如 InvalidNonce),最好重新生成 API 密钥。重置 Nonce 是困难的,通常重新生成 API 密钥更容易。

其他交易所的随机笔记

  • The Ocean(交易所 ID:theocean) 交易所使用 Web3 功能,需要安装web3 python 包:
$ pip3 install web3

获取最新价格 / 不完整的 K 线图

大多数交易所通过他们的 OHLCV/klines API 接口返回当前不完整的 K 线图。 默认情况下,Freqtrade 假设不完整的 K 线图是从交易所获取的,并删除最后一根 K 线,认为它是不完整的 K 线图。

您可以使用助手脚本从贡献者文档中检查您的交易所是否返回不完整的 K 线图。

由于重新绘制的危险,Freqtrade 不允许您使用这个不完整的 K 线图。

但是,如果您的策略需要最新的价格,则可以从策略内部使用数据提供程序来获取这个需求。

高级 Freqtrade 交易所配置

高级选项可以使用 _ft_has_params 设置进行配置,这将覆盖默认设置和交易所特定的行为。

可用的选项在交易所类中列出为 _ft_has_default

例如,要测试 Kraken 的订单类型 FOK,并将蜡烛限制修改为 200(这样每个 API 调用只会得到 200 个蜡烛):

"exchange": {
    "name": "kraken",
    "_ft_has_params": {
        "order_time_in_force": ["GTC", "FOK"],
        "ohlcv_candle_limit": 200
        }
    //...
}

警告

请确保在修改这些设置之前充分理解其影响。