为何调用Bybit USDT永续合约API下单时提示无效标的?
解决Bybit USDT永续合约API下单Symbol无效问题
核心问题排查
从错误日志能看到,你代码里写的symbol="MANAUSDT",但实际发出去的请求里变成了MANAUSD,这明显是参数处理出问题了,主要有这几个坑:
Category参数大小写错误
Bybit V5 API要求category必须是小写:linear对应USDT永续,spot对应现货。你传的"Linear"首字母大写,可能让SDK或者API接口解析混乱,间接把symbol给改了。多传了无用的
isLeverage参数
Linear合约下单根本不需要isLeverage这个参数,杠杆得提前用set_leverage接口单独设置,你加这个多余参数,反而可能干扰SDK的参数序列化,导致symbol被错误截断。Symbol格式错误
Linear合约的正确格式就是全大写的「标的+USDT」,比如MANAUSDT,你试的MANAUSD、MANA/USDT这些格式全错,只有现货才可能用其他格式。
修正后的代码示例
client = HTTP(testnet = False, api_key=user_key, api_secret=secret_key) # 先设置杠杆(如果需要1倍可跳过,默认可能就是1倍) client.set_leverage( category="linear", symbol="MANAUSDT", buyLeverage=1, sellLeverage=1 ) # 下单请求 print(client.place_order( category="linear", # 必须小写 symbol="MANAUSDT", side="Buy", orderType="Limit", qty="1", price="0.65", timeInForce="GTC", reduceOnly=False # 移除isLeverage这个多余参数 ))
额外验证步骤
- 先调用
get_instruments_info接口,传入category="linear"和symbol="MANAUSDT",确认该合约在实盘确实存在,避免因合约下架导致错误。 - 如果仍报错,直接手动构造HTTP请求测试,排除SDK问题:
POST https://api.bybit.com/v5/order/create 请求头需携带API密钥、签名、时间戳等必填项 请求体:{"category": "linear", "symbol": "MANAUSDT", "side": "Buy", "orderType": "Limit", "qty": "1", "price": "0.65", "timeInForce": "GTC", "reduceOnly": false}
内容的提问来源于stack exchange,提问作者elya
相关产品推荐
相关产品推荐

