
本文详解如何通过 python 的 ccxt 库在 bybit 交易所执行做空(short)操作,包括开仓(market sell)、平仓(market buy)、订单状态查询及关键注意事项。
在 Bybit 上进行做空操作,本质是先卖出合约(开空),再买入相同数量合约(平空)。CCXT 将这一逻辑映射为标准的现货/合约交易接口,但需特别注意:Bybit 的统一账户(Unified Account)默认使用永续合约(USDT 或 USD 本位),且做空必须在合约市场(如 'BTC/USDT:USDT')中操作,而非 'BTC/USDT' 现货对。
✅ 正确配置与开仓示例
首先确保安装最新版 CCXT(推荐 ≥ 4.0.0):
pip install --upgrade ccxt
以下为完整、可运行的做空开平仓代码(以 Bybit USDT 永续合约为例):
import ccxt
import time
# 1. 初始化 Bybit 交易所实例(务必启用合约模式)
exchange = ccxt.bybit({
'apiKey': 'YOUR_API_KEY',
'secret': 'YOUR_SECRET',
'enableRateLimit': True,
'options': {
'defaultType': 'swap', # 关键!指定为永续合约(swap),非 spot
'recvWindow': 10000,
},
'urls': {
'api': 'https://api.bybit.com', # 生产环境;测试用 https://api-testnet.bybit.com
}
})
# 2. 设置交易品种(必须为合约格式,如 BTC/USDT:USDT)
symbol = 'BTC/USDT:USDT' # ⚠️ 不是 'BTC/USDT'
quantity = 0.01 # 合约张数(按面值计算,BTC 合约面值 1 USDT)
try:
# 3. 开仓:市价卖出 → 建立空头头寸
print("Opening short position...")
open_order = exchange.create_market_sell_order(symbol, quantity)
time.sleep(1.5)
open_status = exchange.fetch_order(open_order['id'], symbol)
print(f"✅ Short opened: {open_status['status']} | Amount: {open_status['amount']} | Avg price: {open_status['average']}")
# 4. 平仓:市价买入 → 对冲空头头寸
print("Closing short position...")
close_order = exchange.create_market_buy_order(symbol, quantity)
time.sleep(1.5)
close_status = exchange.fetch_order(close_order['id'], symbol)
print(f"✅ Short closed: {close_status['status']} | PnL: {close_status.get('profitLoss', 'N/A')}")
except Exception as e:
print(f"❌ Error: {str(e)}")⚠️ 关键注意事项
- 合约类型必须明确:Bybit 支持 swap(永续)、future(交割)、option。开空务必设 'defaultType': 'swap',否则可能误操作现货。
- 交易对格式严格:'BTC/USDT:USDT' 表示 BTC-USDT 永续合约;'BTC/USD:USD' 表示反向合约(BTC 本位)。切勿省略后缀 :USDT。
- 保证金模式:Bybit 统一账户默认为逐仓(isolated)或全仓(cross),开仓前建议通过 exchange.set_margin_mode('isolated', symbol) 和 exchange.set_leverage(10, symbol) 显式设置(需 Bybit API v5 支持)。
- 风控与限频:Bybit 对合约 API 有严格限频(如 100 req/second),enableRateLimit: True 是必需项;生产环境请添加异常重试与日志。
- 测试先行:务必先在 Bybit Testnet 创建 API 密钥并验证流程,避免实盘误操作。
✅ 总结
使用 CCXT 在 Bybit 做空,核心在于三点:
① 正确初始化为 swap 类型;
② 使用带合约后缀的 symbol(如 'ETH/USDT:USDT');
③ 开空用 create_market_sell_order(),平空用 create_market_buy_order()。
只要参数规范、环境隔离、风控到位,即可安全、高效地实现自动化做空策略。










