操作功能前請先登入

詳細說明請參考API Reference/dtrade

Open In Colab

下載範例

訂閱委託回報事件

請先訂閱 委回事件 (on_reply) 以及 成回事件 (on_match),這兩個事件分別用於監聽訂單回覆及成交回報。

當 on_reply 事件觸發時,系統會傳入一個 DOrderReply 物件,該物件包含訂單的回覆訊息和相關資料。 當 on_match 事件觸發時,系統會傳入一個 DMatchReply 物件,該物件包含成交的詳細資料和訊息。 以下是具體的範例展示如何使用這兩個事件。

#訂閱回報接收範例  
def on_reply(orderreply: DOrderReply):  
    print(orderreply)
    #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'
    #)       
def on_match(matchreply: 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'//異動時間
    #)  
unitrade.dtrade.on_reply=on_reply
unitrade.dtrade.on_match=on_match 
print('訂閱完畢')

下單

請先宣告 DOrderObject 物件,用來存放下單時所需的訂單資訊。該物件包含所有下單所需的參數和設定。

接著,透過 dtrade 物件中的 order 方法來執行下單操作。這個方法會根據你傳入的 DOrderObject 物件,將訂單送出至系統進行處理。

以下是具體的範例,展示如何宣告 DOrderObject 並使用 order 方法來進行下單。

#下單 
order = DOrderObject()
order.actno = actno#帳號
order.note = "ordertest"#備註
order.subactno = ""#子帳
order.productid = "TXFF5"#商品代號
order.bs = "B"#買賣別B/S
order.ordertype = "M"#L:限價 M:市價 P:範圍市價
order.price = 0#委託價格
order.orderqty = 5#數量
order.ordercondition = "R"##委託種類 I:IOC R:ROD F:FOK
order.opencloseflag = ""##開倉別 str 0:新倉 1:平倉 空白:自動
order.dtrade="N"## Y:當沖 N:非當沖
orderresponse=unitrade.dtrade.order(order) 
print(f" 是否成功 {orderresponse.issend} 下單序號 {orderresponse.seq} 錯誤代碼 {orderresponse.errorcode} 錯誤訊息 {orderresponse.errormsg}")
#回傳範例:
# DOrderResponse(
# issend=True,//是否送出
# errorcode='',//錯誤代碼
# errormsg='',//錯誤訊息
# note='ordertest',//傳入的備註
# seq='AGmb80002'//下單序號
#) 

刪單

請先宣告 DReplaceObject 物件,用來定義刪單內容. 接著,透過 dtrade 物件中的 replace_order 方法來執行刪單操作。這個方法會根據你傳入的 DReplaceObject 物件,將訂單送出至系統進行處理。

以下是具體的範例,展示如何宣告 DReplaceObject 並使用 replace_order 方法來進行刪單。

#刪單 
replace=DReplaceObject()
replace.replacetype="4"#4:取消, 5: 減量, m:改價"
replace.actno = actno#帳號
replace.orderno="P1z8o"#委託書號
replaceresponse=unitrade.dtrade.replace_order(replace)
print(f" 是否成功 {replaceresponse.issend} 下單序號 {replaceresponse.seq} 錯誤代碼 {replaceresponse.errorcode} 錯誤訊息 {replaceresponse.errormsg}")
#回傳範例:
# DOrderResponse(
# issend=True,//是否送出
# errorcode='',//錯誤代碼
# errormsg='',//錯誤訊息
# note='ordertest',//傳入的備註
# seq='AGmb80002'//下單序號
#) 

減量

請先宣告 DReplaceObject 物件,定義減量內容。

接著,透過 dtrade 物件中的 replace_order 方法來執行減量操作。這個方法會根據你傳入的 DReplaceObject 物件,將訂單送出至系統進行處理。

以下是具體的範例,展示如何宣告 DReplaceObject 並使用 replace_order 方法來進行減量。

#減量 
replace=DReplaceObject()
replace.replacetype="5"#4:取消, 5: 減量, m:改價"
replace.actno =actno#帳號
replace.orderno="P1yk8"#委託書號
replace.orderqty = 1#減量口數
replaceresponse=unitrade.dtrade.replace_order(replace)
print(f" 是否成功 {replaceresponse.issend} 下單序號 {replaceresponse.seq} 錯誤代碼 {replaceresponse.errorcode} 錯誤訊息 {replaceresponse.errormsg}")
#回傳範例:
# DOrderResponse(
# issend=True,//是否送出
# errorcode='',//錯誤代碼
# errormsg='',//錯誤訊息
# note='ordertest',//傳入的備註
# seq='AGmb80002'//下單序號
#) 

改價

請先宣告 DReplaceObject 物件,用來定義改價資訊。

接著,透過 dtrade 物件中的 replace_order 方法來執行改價操作。這個方法會根據你傳入的 DReplaceObject 物件,將訂單送出至系統進行處理。

以下是具體的範例,展示如何宣告 DReplaceObject 並使用 replace_order 方法來進行改價。

#改價 
replace=DReplaceObject()
replace.replacetype="m"#4:取消, 5: 減量, 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} 下單序號 {replaceresponse.seq} 錯誤代碼 {replaceresponse.errorcode} 錯誤訊息 {replaceresponse.errormsg}")
#回傳範例:
# DOrderResponse(
# issend=True,//是否送出
# errorcode='',//錯誤代碼
# errormsg='',//錯誤訊息
# note='ordertest',//傳入的備註
# seq='AGmb80002'//下單序號
#) 

委託查詢

透過dtrade.query_reply執行查詢

回傳結果是DQueryReplyResponse

範例如下

##委回查詢範例 
query_reply_response=unitrade.dtrade.query_reply(actno,500,"","","","")#帳號,筆數,網路流水序號起,,網路流水序號迄,委託時間起,委託時間迄
print(query_reply_response)
#回傳範例:
# DQueryReplyResponse(ok=True, error='', data=[
    #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'
    #)                  
# ..]) 

成交查詢

透過dtrade.query_match執行查詢

回傳結果是DQueryMatchResponse

範例如下

query_match_response=unitrade.dtrade.query_match(actno,500,"","","","")#帳號,筆數,網路流水序號起,,網路流水序號迄,成交時間起,成交時間迄
print(query_match_response)
#回傳範例:
# DQueryMatchResponse(ok=True, error='', data=[
    #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'//異動時間
    #)  
# ..])