本文面向使用 OKX 开发接口(OKX API) 进行量化交易、自动跟单或账户风控的开发者;将带你快速梳理此次「获取费率」接口升级的核心细节、兼容方案与代码实践,避免上线当天策略报错、费率计算失准等踩坑场景。
1. 背景:为什么要统一费率等级?
自从 OKX 手续费体系升级后,所有币对(现货、杠杆、永续、交割)统一归入同一大类进行阶梯计算。这样做的好处是:
- 计算简单:不再需要按「货币类别 A/B/C」分别查询,代码里少了一堆 if-else。
- 成本透明:无论 BTC、ETH 还是 MEME 新币,只要在相同 VIP 等级,费率一目了然。
- 灵活升级:未来增加任何新币对,都不需要再次改动接口字段。
因此,原先返回中的 category(A/B/C)字段即将退役,对所有旧程序无破坏性影响。请求时带或者不带该字段,系统返回的数据完全一致。
2. 接口变动速览
HTTP 路径 未变更,依旧是
GET /api/v5/account/trade-fee2.1 移除字段
category:可直接从代码里删除,减少逻辑分支。
2.2 新增字段
takerU:USDT 本位合约吃单费率makerU:USDT 本位合约挂单费率
何时会用到?
当你查询 instType=FUTURES 或 SWAP 时,taker/maker 仅代表币本位合约费率;而想拿到USDT 保证金合约费率,则用 takerU/makerU。简单记忆:带 U 的才是 USDT。
2.3 映射示意
| 场景 | 老字段含义 | 新字段含义 |
|---|---|---|
| 现货/杠杆 | taker/maker 即为费率 | 不变 |
| 币本位合约 | taker/maker 即费率 | 同老字段 |
| USDT 本位合约 | 无字段 | 使用 takerU/makerU |
3. 请求示例(Python)
以下代码片段可直接复制到 Jupyter Notebook 或本地脚本测试。
import requests, time, hmac, hashlib, base64, urllib.parse
api_key = 'YOUR_API_KEY'
secret_key = 'YOUR_SECRET'
passphrase = 'YOUR_PASSPHRASE'
def gen_sig(ts, method, path, body):
message = f'{ts}{method.upper()}{path}{body}'.encode('utf-8')
mac = hmac.new(secret_key.encode(), message, hashlib.sha256)
return base64.b64encode(mac.digest()).decode()
def get_fee_rate(instType='SWAP', instId='', uly=''):
ts = str(time.time())
path = '/api/v5/account/trade-fee'
params = {'instType': instType}
if instId:
params['instId'] = instId
if uly:
params['uly'] = uly
body = ''
headers = {
'OK-ACCESS-KEY': api_key,
'OK-ACCESS-SIGN': gen_sig(ts, 'GET', path + '?' + urllib.parse.urlencode(params), body),
'OK-ACCESS-TIMESTAMP': ts,
'OK-ACCESS-PASSPHRASE': passphrase,
'Content-Type': 'application/json'
}
url = f'https://www.okx.com{path}'
resp = requests.get(url, headers=headers, params=params)
return resp.json()
# 示例:查询 BTC-USDT 永续合约的 USDT 本位费率
print(get_fee_rate(instType='SWAP', instId='BTC-USDT-SWAP'))要点:
- 只需关注返回 JSON 中的
takerU/makerU。 - 其余如无变动,可直接复用旧逻辑。
4. 常见误区与校验清单
- 不要盲目替换变量名
现货代码里依然用taker/maker,只有 futures/swap 场景才需额外判断takerU/makerU是否存在。 - 检查数据源粒度
不同 VIP 等级在同一次请求中均会返回,正确做法是先对比level字段再取对应费率。 - 缓存 + 刷新策略
费率变化不大,可以10 分钟缓存;若遇大额补仓节点,强制刷新一次。
5. FAQ:15 秒解答高频疑问
Q1:上线后会禁止旧 SDK 调用吗?
A:不会。旧字段仍返回空值,程序不会报错,但建议新版本尽快使用 takerU/makerU 以保证费率精度。
Q2:我只有现货机器人,需要做改动吗?
A:无需改动,继续用 taker/maker 即可。
Q3:Python SDK(okx-python)同步了吗?
A:已同步。安装 pip install okx-python>=1.3 即可自动识别新字段。
Q4:历史回测数据会受影响吗?
A:不影响。历史深度、成交、资金费率、结算价均保持不变。
Q5:WebSocket 私有频道会同步更新吗?
A:不会。此次仅针对 REST /api/v5/account/trade-fee。
Q6:调用频率上限是否调整?
A:保持 20 req/2s,VIP5 及以上可扩容到 100 req/2s,详见【费率与限速】页面。
6. 结语
整体而言,本次升级仅涉及 「USDT 本位与币本位费率打入不同字段」 的一次“精细化”拆分。你在现货世界几乎无感,但在合约世界却需要留意新的 *U 字段。改动虽小,踩坑极大——务必回归测试一次,确保策略平仓逻辑不会因为费率读取错误而膨胀滑点。祝你交易顺利!