为什么使用 ccxt 操作永续合约
ccxt 是 Python/JavaScript 社区最通用的加密货币交易所接口库,一键支持 100+ 平台的永续合约下单、杠杆设置、资产查询等功能。无论你是自动化交易新手还是量化老手,ccxt 都能让你在 不到 20 行代码 里完成:
- 创建 逐仓仓位
- 把 杠杆倍率调到 100 倍
- 市价买入 0.2 个 ETH 永续合约
前置准备:环境 & API 权限
安装
ccxtpip install ccxtOKX 子账号配置
- 登录 OKX → API 管理 → 新建 API
- 勾选 读取/交易/合约 权限
- IP 白名单:填写服务器固定 IP(本地测试用“不限制”)
- 获取永续合约 symbol
ETH-USDT 永续在 OKX 的symbol = 'ETH-USDT-SWAP'。
代码实战:逐仓 + 100×杠杆 + 市价开多
以下脚本全部跑通,仓库地址已脱敏,可直接修改apiKey、secret、password后复用。
import ccxt
import time
# --------- 1. 初始化交易所 ---------
exchange = ccxt.okx({
'apiKey': 'YOUR_API_KEY',
'secret': 'YOUR_SECRET',
'password': 'YOUR_PASSPHRASE',
'sandbox': False, # True=试玩盘
'options': {'defaultType': 'swap'} # 永续合约
})
# --------- 2. 调整逐仓保证金 & 杠杆 ---------
def set_iso杠杆(symbol, lever):
"""
把该币种的逐仓杠杆调到指定倍数
lever 范围: 1-125
"""
exchange.set_leverage(lever, symbol, params={'mgnMode': 'isolated'})
print(f'{symbol} 逐仓杠杆已设为 {lever} 倍')
# --------- 3. 市价开多 ---------
def open_long_market(symbol, amount_eth):
"""
amount_eth: 想要买入多少枚 ETH
"""
set_iso杠杆(symbol, 100) # 先行调整杠杆
params = {
'tdMode': 'isolated', # 逐仓
'side': 'buy', # 开多
'ordType': 'market', # 市价
'sz': amount_eth # 数量(单位:币)
}
order = exchange.create_order(symbol, 'market', 'buy', amount_eth, None, params)
return order
if __name__ == '__main__':
symbol = 'ETH-USDT-SWAP'
eth_qty = 0.2
order_resp = open_long_market(symbol, eth_qty)
print(order_resp)👀 注意
OKX 永续价格精度随行情变动,脚本默认以 张 为单位。若提示“精度异常”,改传 "sz": amount_eth * 10 调整为张数即可。
常见问题与解答
Q1:脚本跑通,但总是报“非法保证金模式”错误?
A:逐仓杠杆需提前用 set_leverage 接口指定到对应 币种+合约+逐仓模式。若主账号已手动开 20 倍全仓,会被接口拒绝。调为 100 倍后再下单即可。
Q2:Python 提示 ccxt.base.errors.InsufficientFunds?
A:逐仓模式下,账户需在该 币种逐仓子账户 里至少有 0.2 ETH × 开仓价格 / 杠杆倍数 的 USDT。如 按现价 3000 美元算,仅需要 3000*0.2/100 = 6 美元,金额极小,把 USDT 转到 永续合约-逐仓 子账户即可。
Q3:如何用市价一次性平仓 50%?
A:读取当前仓位张数 position['contracts'],再调用 create_order(symbol, 'market', 'sell', position['contracts']*0.5)。合约张数必须与读取数值严格对齐。
Q4:为何 order 网页端看不到?
A:若单腿委托已 立即全部成交,订单自动变为 历史,在“已成交”列表查看即可,而不是“当前委托”。
Q5:如何防止杠杆误调到 125 倍以外?
A:OKX 对逐仓杠杆上限按币种风控,如 ETH 只能到 125倍。如需低于 1 倍,使用安全阀值:
lever = min(max(lever, 1), 125)风险控制与进阶提示
- 止损 / 止盈:下一单后可以立刻加
attachSLTP指令设置触发价;OKX 支持 市价/限价止损 两种。 - 批量调仓:分批 0.05 ETH、0.1 ETH 拆分进场,可平滑滑点;用
ccxt迭代循环即可。 - 速率限制:OKX 现货 & 永续 下单 20 次/2 秒,高并发程序务必做
time.sleep(0.15)。