本页结合了交易所特定的常见问题和信息,这些信息很可能不适用于其他交易所。
交易所配置¶
Freqtrade 基于 CCXT 库,支持超过 100 个加密货币交易所市场和交易 API。完整的最新列表可以在 CCXT 仓库主页 找到。然而,该机器人仅由开发团队在少数几个交易所上进行了测试。当前列表可以在本文档的"首页"部分找到。
欢迎测试其他交易所并提交您的反馈或 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 来完全禁用。
Binance¶
Binance 支持 time_in_force。
Binance 黑名单建议¶
对于 Binance,建议将 "BNB/<STAKE>"
添加到您的黑名单中以避免问题,除非您愿意在账户中保持足够的额外 BNB
,或者除非您愿意禁用使用 BNB
支付费用。
Binance 账户可以使用 BNB
支付费用,如果交易恰好是 BNB
,进一步的交易可能会消耗这个头寸,并使初始 BNB 交易无法出售,因为预期金额不再存在。
如果没有足够的 BNB
来支付交易费用,则费用将不会由 BNB
支付,也不会发生费用减免。Freqtrade 永远不会购买 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 期货¶
Binance 有特定的(不幸的是复杂的)期货交易量化规则,需要遵循,并且禁止过低的交易金额(以及其他)。违反这些规则将导致交易限制。
在 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
},
Binance 隔离期货设置¶
用户还必须将期货设置"持仓模式"设置为"单向模式",并将"资产模式"设置为"单一资产模式"。
这些设置将在启动时进行检查,如果设置错误,freqtrade 将显示错误。

Freqtrade 不会尝试更改这些设置。
Binance BNFCR 期货¶
BNFCR 模式是 Binance 上的一种特殊期货模式,用于解决欧洲的监管问题。
要使用 BNFCR 期货,您必须具有以下设置组合:
{
// ...
"trading_mode": "futures",
"margin_mode": "cross",
"proxy_coin": "BNFCR",
"stake_currency": "USDT" // 或 "USDC"
// ...
}
stake_currency
设置定义了机器人将操作的市场。这个选择是任意的。
在交易所上,您必须使用"多资产模式" - 和"持仓模式"设置为"单向模式"。
Freqtrade 将在启动时检查这些设置,但不会尝试更改它们。
Bingx¶
BingX 支持 time_in_force,设置包括"GTC"(直到取消)、“IOC”(立即或取消)和"PO"(仅限挂单)。
Kraken¶
Kraken 支持 time_in_force,设置包括"GTC"(直到取消)、“IOC”(立即或取消)和"PO"(仅限挂单)。
历史 Kraken 数据¶
Kraken API 仅提供 720 个历史蜡烛,这对于 Freqtrade 的模拟运行和实时交易模式足够,但对于回测来说是个问题。
要下载 Kraken 交易所的数据,使用 --dl-trades
是强制性的,否则机器人将一遍又一遍地下载相同的 720 个蜡烛,您将没有足够的回测数据。
为了加快下载速度,您可以下载 Kraken 提供的 交易 zip 文件。
这些文件通常每季度更新一次。Freqtrade 期望这些文件放在 user_data/data/kraken/trades_csv
中。
如果使用增量文件,以下结构可能是有意义的,其中"完整"历史在一个目录中,增量文件在不同的目录中。
此模式的假设是数据已下载并解压缩,保持文件名不变。
重复内容将被忽略(基于时间戳)- 尽管假设数据中没有间隙。
这意味着,如果您的"完整"历史在 2022 年第四季度结束 - 那么增量更新 Q1 2023 和 Q2 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
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 黑名单¶
对于 Kucoin,建议将 "KCS/<STAKE>"
添加到您的黑名单中以避免问题,除非您愿意在账户中保持足够的额外 KCS
,或者除非您愿意禁用使用 KCS
支付费用。
Kucoin 账户可以使用 KCS
支付费用,如果交易恰好是 KCS
,进一步的交易可能会消耗这个头寸,并使初始 KCS
交易无法出售,因为预期金额不再存在。
HTX¶
OKX¶
OKX 要求每个 API 密钥都有一个密码,因此您需要将此密钥添加到配置中,以便您的交易所部分如下所示:
"exchange": {
"name": "okx",
"key": "your_exchange_key",
"secret": "your_exchange_secret",
"password": "your_exchange_api_key_password",
// ...
}
如果您在 my.okx.com(OKX EAA)上注册,您将需要使用 "myokx"
作为交易所名称。
使用错误的交易所将导致错误"OKX Error 50119: API key doesn’t exist" - 因为这两个是独立的实体。
Gate.io¶
Gate.io 允许使用 POINT
支付费用。由于这不是可交易的货币(没有常规市场可用),自动费用计算将失败(并默认为 0 费用)。
配置参数 exchange.unknown_fee_rate
可用于指定 Point 与质押货币之间的汇率。显然,更改质押货币也需要更改此值。
Gate API 密钥需要在您想要交易的市场类型之上具有以下权限:
- “现货交易” 或 “永续期货”(读写)(选择两者之一,或与您想要交易的市场匹配的一个)
- “钱包”(只读)
- “账户”(只读)
没有这些权限,机器人将无法正确启动并显示"权限缺失"等错误。
Bybit¶
Bybit 支持 time_in_force,设置包括 “GTC”(有效直至取消)、“FOK”(全部成交或取消)、“IOC”(立即成交或取消)和 “PO”(仅挂单)。
Bybit 上的期货交易目前支持逐仓期货模式。
在启动时,freqtrade 将为整个(子)账户设置持仓模式为"单向模式"。这避免了反复调用(减慢机器人操作),但意味着手动更改此设置可能导致异常和错误。
由于 bybit 不提供资金费率历史记录,实盘交易也使用模拟运行计算。
实盘期货交易的 API 密钥必须具有以下权限:
- 读写
- 合约 - 订单
- 合约 - 持仓
我们强烈建议将所有 API 密钥限制到您将使用的 IP 地址。
Bitmart¶
Bitmart 要求 API 密钥备忘录(您给 API 密钥起的名字)与交易所密钥和秘钥一起使用。 因此需要同时传递 UID。
"exchange": {
"name": "bitmart",
"uid": "your_bitmart_api_key_memo",
"secret": "your_exchange_secret",
"password": "your_exchange_api_key_password",
// ...
}
Bitget¶
Bitget 每个 API 密钥都需要一个密码短语,因此您需要将此密钥添加到配置中,使您的交易所部分如下所示:
"exchange": {
"name": "bitget",
"key": "your_exchange_key",
"secret": "your_exchange_secret",
"password": "your_exchange_api_key_password",
// ...
}
Bitget 支持 time_in_force,设置包括 “GTC”(有效直至取消)、“FOK”(全部成交或取消)、“IOC”(立即成交或取消)和 “PO”(仅挂单)。
Hyperliquid¶
Hyperliquid 是一个去中心化交易所(DEX)。去中心化交易所与普通交易所的工作方式略有不同。
私有 API 调用不是使用 API 密钥进行身份验证,而是需要使用您钱包的私钥进行签名(我们建议为此使用 API 钱包,可在 Hyperliquid 或您选择的钱包中生成)。 需要这样配置:
"exchange": {
"name": "hyperliquid",
"walletAddress": "your_eth_wallet_address", // 这不应该是您的 API 钱包地址!
"privateKey": "your_api_private_key",
// ...
}
- walletAddress 为十六进制格式:
0x<40个十六进制字符>
- 可以从您的钱包中轻松复制 - 应该是您的主钱包地址,而不是您的 API 钱包地址。 - privateKey 为十六进制格式:
0x<64个十六进制字符>
- 使用 API 钱包在创建时显示的密钥。
Hyperliquid 在 Arbitrum One 链上处理存取款,这是一个建立在以太坊之上的第二层扩展解决方案。Hyperliquid 使用 USDC 作为报价货币/抵押品。在 Hyperliquid 上存入 USDC 的过程需要几个步骤,请参阅如何开始交易了解所需步骤的详细信息。
Hyperliquid 保险库/子账户¶
Hyperliquid 允许您创建保险库或子账户。 要在 Freqtrade 中使用这些,您需要使用以下配置模式:
"exchange": {
"name": "hyperliquid",
"walletAddress": "your_vault_address", // 保险库或子账户地址
"privateKey": "your_api_private_key",
"ccxt_config": {
"options": {
"vaultAddress": "your_vault_address" // 可选,仅当您想使用保险库或子账户时
}
},
// ...
}
您的余额和交易现在将从您的保险库/子账户中使用 - 不再从您的主账户。
Hyperliquid 历史数据¶
Hyperliquid API 不提供超出单次调用以获取当前数据的历史数据,因此无法下载数据,因为下载的数据不会构成适当的历史数据。
Bitvavo¶
如果您的账户需要使用 operatorId,您可以在配置文件中如下设置:
"exchange": {
"name": "bitvavo",
"key": "",
"secret": "",
"ccxt_config": {
"options": {
"operatorId": "123567"
}
},
}
Bitvavo 期望 operatorId
是整数。
所有交易所¶
如果您经常遇到 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
,并将 K 线限制修改为 200(因此每次 API 调用只获得 200 根 K 线):
"exchange": {
"name": "kraken",
"_ft_has_params": {
"order_time_in_force": ["GTC", "FOK"],
"ohlcv_candle_limit": 200
}
//...
}