# 改單撤單

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)

  • 介紹

    修改訂單的價格和數量、撤單、操作訂單的失效和生效、刪除訂單等。
    如果是 A 股通市場,將不支援改單。可撤單。刪除訂單是 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

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 = 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:
    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

介面限制

  • 同一帳戶ID(acc_id) 每 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 的入參會被忽略。