操作功能前請先登入
詳細說明請參考 API Reference/dtrade
訂閱委託回報事件
在進行交易前,請先訂閱 委回事件 (on_reply) 以及 成回事件 (on_match)。
on_reply: 監聽訂單的狀態回覆(如委託成功、失敗等)。on_match: 監聽訂單的成交回報。
系統會分別傳入 DOrderReply 與 DMatchReply 物件,包含詳細的訂單與成交資訊。
# 訂閱回報接收範例
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' # 異動時間
)
下單
下單流程如下:
- 宣告 DOrderObject 物件並填入參數。
- 呼叫
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 回報物件)
),
# ... 更多成交紀錄
]
)