You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用CCXT关闭OKX交叉保证金订单?金额参数异常求助

现货保证金(交叉模式)平仓异常排查

我在使用CCXT操作OKX V5现货保证金(交叉模式)平仓时遇到问题,以下是详细情况:

第一次卖单(正常执行)

执行卖单代码:

params = {'tdMode': 'cross', 'ccy': 'USDT'}
order = await self.okx.create_order(
    symbol='XRP/USDT', type='market', side='sell',
    amount=99.43, price=0.39024, params=params
)

执行结果符合预期,成交XRP数量与指定的amount一致:

{'amount': 99.431119,
 'average': 0.39005,
 'clientOrderId': 'e847386590ce4dBCce71dedc37e12254',
 'cost': 38.78310796595,
 'datetime': '2022-12-02T17:29:58.048Z',
 'fee': {'cost': 0.03878310796595, 'currency': 'USDT'},
 'fees': [{'cost': 0.03878310796595, 'currency': 'USDT'}],
 'filled': 99.431119,
 'id': '518962064594153472',
}

第二次买单(平仓)出现异常

仅修改交易方向为buy,其他参数几乎不变:

params = {'tdMode': 'cross', 'ccy': 'USDT'}
order = await self.okx.create_order(
    symbol='XRP/USDT', type='market', side='buy',
    amount=99.43, price=0.39017, params=params
)

结果却出现异常:指定的amount是99.43,但实际成交XRP数量为254.853543,相当于系统把amount识别成了USDT计价金额,而非XRP数量:

{'amount': 99.43111,
 'average': 0.39015,
 'clientOrderId': 'e847386590ce4dBC328bc6dfc937795f',
 'cost': 99.43110980145,
 'datetime': '2022-12-02T17:36:47.913Z',
 'fee': {'cost': 0.254853543, 'currency': 'XRP'},
 'fees': [{'cost': 0.254853543, 'currency': 'XRP'}],
 'filled': 254.853543,
 'id': '518963783692562432',
}

问题原因与解决办法

OKX现货保证金交易中,买卖方向的amount参数默认含义不同:

  • 卖出(sell)时,amount指基础货币(XRP)的数量
  • 买入(buy)时,默认amount指计价货币(USDT)的金额

要让买单的amount代表基础货币数量,需要在params中添加'type': 'cash',修正后的代码如下:

params = {'tdMode': 'cross', 'ccy': 'USDT', 'type': 'cash'}
order = await self.okx.create_order(
    symbol='XRP/USDT', type='market', side='buy',
    amount=99.43, price=0.39017, params=params
)

这样下单后,系统会按照你指定的XRP数量执行买单,和之前卖单的数量匹配,完成平仓操作。

另外,建议通过await self.okx.fetch_balance(params)获取当前持仓的精确XRP数量,避免手动输入的误差,进一步保证平仓数量准确。

内容的提问来源于stack exchange,提问作者Piero Costa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 22:40:40