交易所对接
本章详细介绍 Freqtrade 如何对接交易所,涵盖支持的交易所列表、API Key 配置、交易对设置、费率管理以及交易所限制说明,帮助读者顺利完成交易所对接。
支持的交易所
完全支持的交易所
Freqtrade 通过 CCXT 库支持超过 60 家交易所,以下是经过充分测试的交易所:
| 交易所 | 现货 | 期货 | 杠杆 | 推荐等级 |
|---|---|---|---|---|
| Binance | ✓ | ✓ | ✓ | 强烈推荐 |
| OKX | ✓ | ✓ | - | 推荐 |
| Bybit | ✓ | ✓ | - | 推荐 |
| Kraken | ✓ | - | - | 推荐 |
| KuCoin | ✓ | ✓ | - | 推荐 |
| Gate.io | ✓ | ✓ | - | 推荐 |
| Bitget | ✓ | - | - | 可用 |
| MEXC | ✓ | - | - | 可用 |
| HTX (Huobi) | ✓ | - | - | 可用 |
| Coinbase | ✓ | - | - | 可用 |
检查交易所兼容性
# 列出交易所支持的市场类型
freqtrade list-exchanges
# 检查特定交易所是否可用
freqtrade list-exchanges --exchange binance
# 列出交易所支持的所有交易对
freqtrade list-pairs --exchange binance --all
API Key 配置
获取 API Key
以 Binance 为例:
- 登录 Binance 账户
- 进入 API 管理页面
- 创建新的 API Key
- 设置权限(交易权限必须开启)
- 保存 API Key 和 Secret
权限要求
| 权限 | 现货 | 期货 | 说明 |
|---|---|---|---|
| 读取 | ✓ | ✓ | 获取余额和市场数据 |
| 交易 | ✓ | ✓ | 下单交易 |
| 提现 | ✗ | ✗ | 禁止开启,防止资产被盗 |
安全警告:永远不要开启提现权限,不要将 API Key 提交到代码仓库。
配置 API Key
方法一:直接写在配置文件中
{
"exchange": {
"name": "binance",
"key": "your_api_key_here",
"secret": "your_api_secret_here",
"password": ""
}
}
方法二:使用环境变量
export FREQTRADE__EXCHANGE__KEY="your_api_key_here"
export FREQTRADE__EXCHANGE__SECRET="your_api_secret_here"
方法三:使用单独的秘密配置文件
// private_config.json
{
"exchange": {
"key": "your_api_key_here",
"secret": "your_api_secret_here"
}
}
# 启动时加载秘密配置文件
freqtrade trade \
--config user_data/config.json \
--config user_data/private_config.json
IP 白名单
建议在交易所 API 管理页面设置 IP 白名单,只允许你的服务器 IP 访问:
# 仅允许 VPS 服务器的 IP
你的服务器IP地址
# 不要添加你的本地 IP(除非开发测试)
交易对配置
交易对命名
Freqtrade 使用标准的 CCXT 交易对命名格式:基础币种/报价币种
{
"exchange": {
"pair_whitelist": [
"BTC/USDT",
"ETH/USDT",
"SOL/USDT",
"BNB/USDT"
],
"pair_blacklist": [
".*/BUSD",
".*BULL.*",
".*BEAR.*",
"USDC/USDT",
"TUSD/USDT"
]
}
}
交易对状态与限制
# 列出交易对及其状态
freqtrade list-pairs --exchange binance -p BTC/USDT ETH/USDT
# 查看交易对交易限制
freqtrade list-markets --exchange binance -p BTC/USDT
交易对过滤器
交易所对交易对有以下限制(可在 list-markets 中查看):
| 过滤器 | 说明 | 示例(BTC/USDT) |
|---|---|---|
minNotional | 最小成交金额 | 10 USDT |
lotSize | 最小/最大下单数量 | 0.0001 BTC |
priceFilter | 价格精度 | 0.010 |
minQty | 最小交易数量 | 0.0001 |
stepSize | 数量递增步长 | 0.0001 |
费率配置
默认费率
{
"exchange": {
"name": "binance",
"key": "",
"secret": ""
}
}
Freqtrade 会自动从交易所获取费率。默认的现货交易费率如下:
| 交易所 | 默认 Maker 费率 | 默认 Taker 费率 | VIP 最低 Maker |
|---|---|---|---|
| Binance | 0.10% | 0.10% | 0.036% |
| OKX | 0.08% | 0.10% | 0.02% |
| Bybit | 0.10% | 0.10% | 0.02% |
| Kraken | 0.16% | 0.26% | 0.04% |
| KuCoin | 0.10% | 0.10% | 0.08% |
自定义费率
可以通过配置覆盖默认费率:
{
"exchange": {
"name": "binance",
"key": "",
"secret": "",
"ccxt_config": {
"enableRateLimit": true,
"rateLimit": 50
}
},
"fee": 0.001,
"fee_cost": 0.001,
"fee_currency": "BNB"
}
费率优化建议
{
"trading_mode": "spot",
"exchange": {
"name": "binance",
"ccxt_config": {
"enableRateLimit": true,
"rateLimit": 50,
"options": {
"defaultType": "spot"
}
}
}
}
- 使用 BNB 支付手续费可享受 25% 折扣
- 使用交易所平台币支付手续费可降低费率
- 达到 VIP 等级可进一步降低费率
- 对于高频策略,费率影响尤为显著
交易所限制
API 限流
{
"exchange": {
"ccxt_config": {
"enableRateLimit": true,
"rateLimit": 50
},
"ccxt_async_config": {
"enableRateLimit": true,
"rateLimit": 50
}
}
}
常见交易所 API 限制:
| 交易所 | 权重限制 | 每秒限制 | 推荐 rateLimit |
|---|---|---|---|
| Binance | 1200 权重/分钟 | 10 请求/秒 | 50ms |
| OKX | 20 请求/秒 | - | 50ms |
| Bybit | 50 请求/秒 | 10 请求/秒 | 20ms |
| Kraken | - | 20 请求/秒 | 50ms |
交易限制
{
"exchange": {
"name": "binance",
"skip_open_order_update": false,
"unknown_fee_rate": 0.001,
"log_responses": false,
"timeout": 20
}
}
沙箱测试
{
"exchange": {
"name": "binance",
"sandbox": true,
"key": "sandbox_key",
"secret": "sandbox_secret"
}
}
支持沙箱的交易所:
| 交易所 | 沙箱地址 | 状态 |
|---|---|---|
| Binance | testnet.binance.vision | 稳定 |
| Bybit | testnet.bybit.com | 稳定 |
| OKX | okx.com 模拟盘 | 测试中 |
常见连接问题
| 问题 | 原因 | 解决方案 |
|---|---|---|
ExchangeError: ... | API Key 无效 | 检查 Key/Secret 是否正确 |
AuthenticationError | 权限不足 | 检查 API Key 的交易权限 |
RateLimitExceeded | 请求频率过高 | 增大 rateLimit 或启用 enableRateLimit |
InsufficientFunds | 余额不足 | 检查账户余额 |
BadSymbol | 交易对不存在 | 使用 list-pairs 检查交易对 |
NetworkError | 网络连接问题 | 检查网络,设置代理 |
DDoSProtection | 触发风控 | 降低请求频率 |
| 连接超时 | 网络延迟 | 增大 timeout 配置 |
代理配置
如果需要通过代理访问交易所:
{
"exchange": {
"name": "binance",
"ccxt_config": {
"proxies": {
"http": "http://127.0.0.1:7890",
"https": "http://127.0.0.1:7890"
}
},
"ccxt_async_config": {
"aiohttp_proxy": "http://127.0.0.1:7890"
}
}
}
交易所最佳实践
安全性建议
-
API Key 管理
- 使用环境变量或独立配置文件存储密钥
- 在交易所设置 IP 白名单
- 只开启交易权限,不开提现权限
-
多交易所策略
- 主交易所 + 备用交易所切换
- 分散资金降低单点风险
-
监控与告警
- 监控 API 错误率
- 监控账户余额变动
- 监控交易对状态变更
选择交易所的考虑因素
| 因素 | 重要性 | 说明 |
|---|---|---|
| 流动性 | 高 | 影响滑点和成交速度 |
| 费率 | 中 | 高频策略影响大 |
| API 稳定性 | 高 | 影响机器人正常运行 |
| 支持的币种 | 中 | 策略需要的交易对是否齐全 |
| 期货支持 | 低 | 是否需要做空/对冲 |
| 法币入金 | 低 | 是否方便出入金 |