# 改单撤单

# modify_order

modify_order(modify_order_op, order_id, qty, price, adjust_limit=0, trd_env=TrdEnv.REAL, acc_id=0, acc_index=0, aux_price=None, trail_type=None, trail_value=None, trail_spread=None)

  • 介绍

    修改订单的价格和数量、撤单、操作订单的失效和生效、删除订单等。
    如果是 OpenHKCCTradeContext,将不支持改单。可撤单。删除订单是 OpenD 本地操作。

  • 参数

    参数 类型 说明
    modify_order_op ModifyOrderOp 改单操作类型
    order_id str 订单号
    qty float 订单改单后的数量
    price float 订单改单后的价格
    adjust_limit float 价格微调幅度
    trd_env TrdEnv 交易环境
    acc_id int 交易业务账户 ID
    acc_index int 交易业务账户列表中的账户序号
    aux_price float 触发价格
    trail_type TrailType 跟踪类型
    trail_value float 跟踪金额/百分比
    trail_spread float 指定价差
  • 返回

    参数 类型 说明
    ret RET_CODE 接口调用结果
    data pd.DataFrame 当 ret == RET_OK 时,返回改单信息
    str 当 ret != RET_OK 时,返回错误描述
    • 改单信息格式如下:
      字段 类型 说明
      trd_env TrdEnv 交易环境
      order_id str 订单号
  • Example

from futu import *
pwd_unlock = '123456'
trd_ctx = OpenSecTradeContext(filter_trdmarket=TrdMarket.HK, host='127.0.0.1', port=11111, security_firm=SecurityFirm.FUTUSECURITIES)
ret, data = trd_ctx.unlock_trade(pwd_unlock)  # 若使用真实账户改单/撤单,需先对账户进行解锁。此处示例为模拟账户撤单,也可省略解锁。
if ret == RET_OK:
    order_id = "8851102695472794941"
    ret, data = trd_ctx.modify_order(ModifyOrderOp.CANCEL, order_id, 0, 0)
    if ret == RET_OK:
        print(data)
        print(data['order_id'][0])  # 获取改单的订单号
        print(data['order_id'].values.tolist())  # 转为 list
    else:
        print('modify_order error: ', data)
else:
    print('unlock_trade failed: ', data)
trd_ctx.close()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
  • Output
    trd_env             order_id
0    REAL      8851102695472794941
8851102695472794941
['8851102695472794941']
1
2
3
4

# cancal_all_order

cancel_all_order(trd_env=TrdEnv.REAL, acc_id=0, acc_index=0, trdmarket=TrdMarket.NONE)

  • 介绍

    撤消全部订单。模拟交易以及 A 股通账户暂不支持全部撤单。

  • 参数

    参数 类型 说明
    trd_env TrdEnv 交易环境
    acc_id int 交易业务账户 ID
    acc_index int 交易业务账户列表中的账户序号
    trdmarket TrdMarket 指定交易市场
  • 返回

    参数 类型 说明
    ret str 接口调用结果。ret == RET_OK 代表接口调用正常,ret != RET_OK 代表接口调用失败
    data str 当 ret == RET_OK,返回"success"
    当 ret != RET_OK,返回错误描述
    • 全部撤单信息格式如下:
      字段 类型 说明
      trd_env TrdEnv 交易环境
      order_id str 订单号
  • Example

from futu import *
pwd_unlock = '123456'
trd_ctx = OpenHKTradeContext(host='127.0.0.1', port=11111, security_firm=SecurityFirm.FUTUSECURITIES)
ret, data = trd_ctx.unlock_trade(pwd_unlock)  # 若使用真实账户改单/撤单,需先对账户进行解锁。此处示例为模拟账户全部撤单,也可省略解锁。
if ret == RET_OK:
    ret, data = trd_ctx.cancel_all_order()
    if ret == RET_OK:
        print(data)
    else:
        print('cancel_all_order error: ', data)
else:
    print('unlock_trade failed: ', data)
trd_ctx.close()
1
2
3
4
5
6
7
8
9
10
11
12
13
  • Output
success
1

接口限制

  • 每 30 秒内最多请求 20 次改单撤单接口,且连续两次请求的间隔不可小于 0.04 秒。
  • 真实账户调用改单撤单接口前,需要先进行 解锁;模拟账户无需解锁。

提示

  • 若执行 修改订单 操作,各类订单类型对应的必传参数,可 点击这里 了解更多。
  • 如果希望执行 改单操作修改订单数量,此接口入参的订单数量 qty,应该等于期望成交的总数量。
    举例: 一笔订单数量是 N 股,已部分成交 n 股。对于暂未成交的 (N-n) 股,如果您希望撤掉其中的 x 股,modify_order_op 应选择 NORMAL,qty 应传 (N-x)。 order_quantity
  • 如果希望执行 撤单操作,此接口入参的 modify_order_op 应该选择 CANCEL。
    举例: 一笔订单数量是 N 股,已部分成交 n 股。如果希望将未成交的 (N-n) 股全部撤掉,modify_order_op 应选择 CANCEL,此时 qty 和 price 的入参会被忽略。