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

Python调用Bybit API取消订单报order not exists or too late to cancel问题咨询

问题根因

  • 操作逻辑混淆:Order_cancel接口的作用是撤销尚未撮合成功的挂单,你提交的是市价开仓单,提交后会立刻完成成交,原开仓订单在成交后就已失效,调用取消接口自然会返回订单不存在的错误。你要做的是对已经成交的仓位进行平仓,而不是取消已经成交的开仓订单。
  • 参数拼写错误:开仓时传入的time_in_force参数值GoodTillCencel拼写错误,正确拼写为GoodTillCancel,API识别到非法参数后自动将市价单的生效规则替换为默认的ImmediateOrCancel,不影响开仓成交但属于代码隐患。

修正方案

你需要调整平仓逻辑:开仓完成后先查询订单状态,确认订单完全成交后,提交反向市价单进行平仓即可,参考修正后代码:

import bybit
import time

client = bybit.bybit(test=False, api_key='key', api_secret='secret_key')
print('logged in')

info = client.Market.Market_symbolInfo(symbol='BTCUSD').result()
btc_original = info[0]['result'][0]['last_price']
BTC_original = float(btc_original)
print(BTC_original)

# 开新仓
open_pos = client.Order.Order_new(side="Buy",symbol="BTCUSD",order_type="Market",qty=1, time_in_force='GoodTillCancel').result()
print(open_pos)
order_ID = open_pos[0]['result']['order_id']

# 等待订单成交,确认开仓成功
time.sleep(3)
order_info = client.Order.Order_query(symbol="BTCUSD", order_id=order_ID).result()
if order_info[0]['result']['order_status'] != 'Filled':
    print("订单未成交,先撤销未成交订单")
    client.Order.Order_cancel(symbol="BTCUSD", order_id=order_ID).result()
    exit()

# 平仓:提交反向市价单
close_pos = client.Order.Order_new(side="Sell",symbol="BTCUSD",order_type="Market",qty=1, time_in_force='GoodTillCancel', reduce_only=True).result()
print(close_pos)
print('仓位已平仓')

补充说明:平仓时加上reduce_only=True参数可以确保该订单只会减少你的持仓,不会意外开新的反向仓位,避免双向持仓的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 10:45:03