操作功能前請先登入

詳細說明請參考 API Reference/dtrade

Open In Colab

下載範例

訂閱委託回報事件

在進行交易前,請先訂閱 委回事件 (on_reply) 以及 成回事件 (on_match)

  • on_reply: 監聽訂單的狀態回覆(如委託成功、失敗等)。
  • on_match: 監聽訂單的成交回報。

系統會分別傳入 DOrderReplyDMatchReply 物件,包含詳細的訂單與成交資訊。

# 訂閱回報接收範例  
def on_reply(orderreply: DOrderReply):  
    print(f"收到委託回報: {orderreply}")
    # 這裡可進行後續邏輯處理,例如更新庫存或UI顯示

def on_match(matchreply: DMatchReply): 
    print(f"收到成交回報: {matchreply}")
    # 這裡可進行後續邏輯處理

# 註冊回呼函式
unitrade.dtrade.on_reply = on_reply
unitrade.dtrade.on_match = on_match 
print('訂閱完畢')
點擊查看 DOrderReply (委託回報) 物件欄位範例
DOrderReply(
    brokerid='F008000',       # 分公司
    investoracno='1234567',   # 帳號
    networkid='2500000013',   # 網路流水序號
    ordertime='153901370',    # 委託時間
    orderno='P3JkX',          # 委託書號
    subact='',                # 子帳
    productkind='1',          # 商品類別
    productid='TXFG5',        # 商品代碼
    bs='B',                   # 買賣別
    ordertype='M',            # 價格別
    price=0.0,                # 委託價格
    orderqty=5,               # 委託數量
    nomatchqty=5,             # 未成交數量
    matchqty=0,               # 成交數量
    delqty=0,                 # 刪除數量
    ordercondition='R',       # 下單方式
    opencloseflag='',         # 開倉別
    ae='F0657',               # 營業員代碼
    odrsrc='s',
    odrmedia='',
    order_src='A',
    tradedate='20250624',     # 交易日
    note='',                  # 備註
    op='', 
    aeflag='0',
    loginid='1234567',
    mdate='2025-06-24 15:39:01', # 異動時間
    orderstatus='委託成功',     # 委託狀態
    statuscode='0000',        # 委託狀態碼
    seq='0002',               # 下單序號
    rawstatus='12'
)
點擊查看 DMatchReply (成交回報) 物件欄位範例
DMatchReply(
    brokerid='F008000',       # 分公司
    investoracno='1234567',   # 帳號
    networkid='2500000014',   # 網路流水序號
    matchtime='154423200',    # 成交時間
    orderno='P3JkY',          # 委託書號
    subact='',                # 子帳
    productkind='1',          # 商品類別
    productid='TXFG5',        # 商品代碼
    bs='S',                   # 買賣別
    matchprice=21650.0,       # 成交價格
    matchqty=5,               # 成交口數
    matchseq='0000264114',    # 成交序號
    matchpricefoot1=0.0,      # 成交價1
    matchpricefoot2=0.0,      # 成交價2
    note='',                  # 備註
    mdate='2025-06-24 15:44:23' # 異動時間
)

下單

下單流程如下:

  1. 宣告 DOrderObject 物件並填入參數。
  2. 呼叫 unitrade.dtrade.order() 方法送出訂單。
# 下單範例
order = DOrderObject()
order.actno         = actno     # 帳號
order.note          = "test"    # 備註
order.subactno      = ""        # 子帳
order.productid     = "TXFF5"   # 商品代號
order.bs            = "B"       # 買賣別 (B:買 / S:賣)
order.ordertype     = "M"       # 價格別 (L:限價 / M:市價 / P:範圍市價)
order.price         = 0         # 委託價格 (市價填 0)
order.orderqty      = 5         # 委託數量
order.ordercondition= "R"       # 委託種類 (I:IOC / R:ROD / F:FOK)
order.opencloseflag = ""        # 開倉別 (0:新倉 / 1:平倉 / 空白:自動)
order.dtrade        = "N"       # 當沖 (Y:當沖 / N:非當沖)

# 送出委託
orderresponse = unitrade.dtrade.order(order) 

print(f"是否成功: {orderresponse.issend}")
print(f"下單序號: {orderresponse.seq}")
print(f"錯誤代碼: {orderresponse.errorcode}, 訊息: {orderresponse.errormsg}")

回傳物件範例 (DOrderResponse):

DOrderResponse(
    issend=True,        # 是否送出
    errorcode='',       # 錯誤代碼
    errormsg='',        # 錯誤訊息
    note='test',        # 傳入的備註
    seq='AGmb80002'     # 下單序號
)

刪單

刪單需使用 DReplaceObject 物件,並將 replacetype 設定為 "4"

# 刪單範例
replace = DReplaceObject()
replace.replacetype = "4"       # 4:取消 (刪單)
replace.actno       = actno     # 帳號
replace.orderno     = "P1z8o"   # 欲刪除之委託書號

replaceresponse = unitrade.dtrade.replace_order(replace)

print(f"是否成功: {replaceresponse.issend}")
print(f"錯誤訊息: {replaceresponse.errormsg}")

減量

減量同樣使用 DReplaceObject,將 replacetype 設定為 "5",並指定減少的口數。

# 減量範例
replace = DReplaceObject()
replace.replacetype = "5"       # 5:減量
replace.actno       = actno     # 帳號
replace.orderno     = "P1yk8"   # 委託書號
replace.orderqty    = 1         # 欲減少的口數

replaceresponse = unitrade.dtrade.replace_order(replace)

print(f"是否成功: {replaceresponse.issend}")
print(f"錯誤訊息: {replaceresponse.errormsg}")

改價

改價使用 DReplaceObject,將 replacetype 設定為 "m" (modify),並設定新的價格與條件。

# 改價範例
replace = DReplaceObject()
replace.replacetype    = "m"      # m:改價
replace.actno          = actno    # 帳號
replace.orderno        = "P1yk8"  # 委託書號
replace.ordertype      = "L"      # 價格別 (L:限價 / M:市價 / P:範圍市價)
replace.ordercondition = "R"      # 委託種類 (I:IOC / R:ROD / F:FOK)
replace.price          = 22300    # 新的委託價格

replaceresponse = unitrade.dtrade.replace_order(replace)

print(f"是否成功: {replaceresponse.issend}")
print(f"錯誤訊息: {replaceresponse.errormsg}")

委託查詢

透過 dtrade.query_reply 執行查詢,回傳結果為 DQueryReplyResponse

參數說明: query_reply(帳號, 筆數, 網路流水序號起, 網路流水序號迄, 委託時間起, 委託時間迄)

# 委託查詢範例
query_reply_response = unitrade.dtrade.query_reply(actno, 500, "", "", "", "")
print(query_reply_response)

回傳結構範例:

DQueryReplyResponse(
    ok=True, 
    error='', 
    data=[
        DOrderReply(
            brokerid='F008000',
            investoracno='1234567',
            orderno='P3JkX',
            productid='TXFG5',
            orderstatus='委託成功',
            # ... (其餘欄位同 on_reply 回報物件)
        ),
        # ... 更多訂單
    ]
)

成交查詢

透過 dtrade.query_match 執行查詢,回傳結果為 DQueryMatchResponse

參數說明: query_match(帳號, 筆數, 網路流水序號起, 網路流水序號迄, 成交時間起, 成交時間迄)

# 成交查詢範例
query_match_response = unitrade.dtrade.query_match(actno, 500, "", "", "", "")
print(query_match_response)

回傳結構範例:

DQueryMatchResponse(
    ok=True, 
    error='', 
    data=[
        DMatchReply(
            brokerid='F008000',
            investoracno='1234567',
            orderno='P3JkY',
            productid='TXFG5',
            matchprice=21650.0,
            matchqty=5,
            # ... (其餘欄位同 on_match 回報物件)
        ),
        # ... 更多成交紀錄
    ]
)

Back to top

支援Python版本: 3.7 3.8 3.9 3.10 3.11 3.12

支援 OS: Linux, macOS, Windows