操作功能前請先登入

詳細說明請參考API Reference/ftrade

Open In Colab

下載範例

訂閱回報接收

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

當 on_reply 事件觸發時,系統會傳入一個 FOrderReply 物件,該物件包含訂單的回覆訊息和相關資料。

當 on_match 事件觸發時,系統會傳入一個 FMatchReply 物件,該物件包含成交的詳細資料和訊息。

以下是具體的範例展示如何使用這兩個事件。

def on_reply(orderreply: FOrderReply): 
    print(orderreply)
    #FOrderReply(
    # brokerid='F008000',//分公司
    # investoracno='1234567',//帳號
    # networkid='A00O16',//網路流水序號
    # ordertime='141414995',//委託時間
    # orderno='C0068',//委託書號
    # subact='',//子帳
    # productkind='1',//商品類別
    # exchange='CME',//交易所
    # symbol='MNQ',//商品代碼
    # maturitymonthyear='202509',//年月 
    # putorcall='F', //CP
    # strikeprice='0' //履約價,
    # symbol2='',//商品代碼2
    # maturitymonthyear2='',//年月2
    # putorcall2='',//CP2
    # strikeprice2='0',//履約價2
    # side1='', side2='',
    # bs='S',//買賣別
    # ordertype='M',//價格別
    # price=0.0,//委託價格
    # stopprice=0.0,//停損價
    # orderqty=1, //委託數量
    # nomatchqty=0,//未成交數量
    # matchqty=1,//成交數量
    # delqty=0, //刪除數量 
    # pricebase=1,
    # ordercondition='I', //下單方式
    # opencloseflag='',//開倉別
    # ae='F0657',//營業員代號
    # odrsrc='s',
    # odrmedia='',
    # order_src='A',
    # tradedate='20250624',//交易日
    # note='',//備註
    # op='', 
    # aeflag='0',
    # loginid='1234567',
    # mdate='2025-06-24 14:14:15',//異動時間
    # orderstatus='完全成交',//委託狀態
    # statuscode='0004',//委託狀態碼
    # seq='A8OJJ0002 ',//下單序號
    # rawstatus='22')  
def on_match(matchreply: FMatchReply): 
    print(matchreply)
    # FMatchReply(
    # brokerid='F008000',\\分公司
    # investoracno='1234567',\\帳號
    # networkid='A00O1E',\\網路流水序號
    # matchtime='143855956',\\成交時間
    # orderno='C0075',\\委託書號
    # subact='',\\子帳
    # productkind='1',\\商品類別
    # exchange='CME',\\交易所
    # symbol='AD',\\商品代碼
    # maturitymonthyear='202509',\\年月
    # putorcall='F',\\CP
    # strikeprice='0',\\履約價
    # symbol2='',\\商品代碼2
    # maturitymonthyear2='',\\年月2
    # putorcall2='',\\CP2
    # strikeprice2='0',\\履約價2
    # side1='',\\買賣別1
    # side2='',\\買賣別2
    # bs='S',\\買賣別
    # matchprice=6473.5,\\成交價格
    # matchqty=1,\\成交口數
    # matchseq='AF4B04d7abcArgUI1m82xG',\\成交序號
    # pricebase=1,\\pricebase
    # note='',\\備註
    # mdate='2025-06-24 14:38:55'\\異動時間
    #)  
unitrade.ftrade.on_reply=on_reply
unitrade.ftrade.on_match=on_match  
print('訂閱完畢')

下單

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

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

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

#下單
order = FOrderObject()
order.actno = actno#帳號
order.note = "ordertest"#備註
order.subactno = ""#子帳
order.exchange = "CME"#交易所
order.symbol= "AD"#商品
order.maturitymonthyear = "202409"#年月
order.putorcall="F"#F:期貨 C:Call P:Put
order.bs = "B"#買賣別B/S
order.ordertype = "M"#L:限價 M:市價   3:停損市價 4:停損限價
order.price = 0#委託價格
order.stopprice=0#停損價格
order.orderqty = 1#委託數量
order.ordercondition = "R"##委託種類 I:IOC R:ROD F:FOK
order.opencloseflag = "0"##開倉別 str 0:新倉 1:平倉 空白:自動
order.dtrade="N"## Y:當沖 N:非當沖
orderresponse=unitrade.ftrade.order(order) 
print(f" 是否成功 {orderresponse.issend} 下單序號 {orderresponse.seq} 錯誤代碼 {orderresponse.errorcode} 錯誤訊息 {orderresponse.errormsg}")
#回傳範例:
# FOrderResponse(
# issend=True,//是否送出
# errorcode='',//錯誤代碼
# errormsg='',//錯誤訊息
# note='ordertest',//傳入的備註
# seq='AGmb80002'//下單序號
#) 

刪單

請先宣告 FReplaceObject 物件,用來定義刪單內容。

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

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

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

減量

請先宣告 FReplaceObject 物件,用來定義減量內容。

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

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

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

改價

請先宣告 FReplaceObject 物件,用來定義改價內容。

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

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

#改價
replace=FReplaceObject()
replace.replacetype="m"#4:取消, 5: 減量, m:改價
replace.actno = "1234567"#帳號
replace.orderno="A0001"#委託書號
replace.ordertype="L"#L:限價 M:市價   3:停損市價 4:停損限價
replace.ordercondition="R"##委託種類 I:IOC R:ROD F:FOK
replace.price=22300#委託價格
replaceresponse=unitrade.ftrade.replace_order(replace)
print(f" 是否成功 {replaceresponse.issend} 下單序號 {replaceresponse.seq} 錯誤代碼 {replaceresponse.errorcode} 錯誤訊息 {replaceresponse.errormsg}")
#回傳範例:
# FOrderResponse(
# issend=True,//是否送出
# errorcode='',//錯誤代碼
# errormsg='',//錯誤訊息
# note='ordertest',//傳入的備註
# seq='AGmb80002'//下單序號
#) 

委回查詢

透過ftrade.query_reply執行查詢

回傳結果是FQueryReplyResponse

範例如下

query_reply_response=unitrade.ftrade.query_reply(actno,500,"","","","")#帳號,筆數,網路流水序號起,,網路流水序號迄,委託時間起,委託時間迄
#回傳範例:
# FQueryReplyResponse(ok=True, error='', data=[
# FOrderReply(brokerid='F008000',//分公司
# investoracno='12345678',//帳號
# networkid='1J',//網路流水序號
# ordertime='100453124',//委託時間
# orderno='C0009',//委託書號
# subact='',//子帳
# productkind='1',//商品類別
# exchange='CME',//交易所
# symbol='MNQ',//商品代碼
# maturitymonthyear='202506',//年月
# putorcall='F',//CP
# strikeprice='0.0000000',//履約價
# symbol2='',//商品代碼2
# maturitymonthyear2='', //年月2
# putorcall2='',//CP2
# strikeprice2='0.0000000',//履約價2 
# side1=''//買賣別1,
# side2=''//買賣別2,
# bs='B',//買賣別
# ordertype='L', //價格別
# price='21614.7500000',//委託價格
# stopprice='0.0000000',//停損價
# orderqty='2',//委託數量
# nomatchqty='2',//未成交數量
# matchqty='0',//成交數量
# delqty='0',//刪除數量
# pricebase='1',//pricebase
# ordercondition='R',//下單方式
# opencloseflag=' ',//開倉別
# ae='F0657',//營業員代號
# odrsrc='E',
# odrmedia='',
# order_src='',
# tradedate='20250619',//交易日
# note='',//備註
# op='',
# aeflag='',
# loginid='',
# mdate='06/19/2025 10:04:53'//異動時間,
# orderstatus='委託成功',//委託狀態
# statuscode='0000' //委託狀態碼,
# seq='',//下單序號
# rawstatus=None), 
# ..]) 

成回查詢

透過ftrade.query_match執行查詢

回傳結果是FQueryMatchResponse

範例如下

query_match_response=unitrade.ftrade.query_match(actno,500,"","","","")#帳號,筆數,網路流水序號起,,網路流水序號迄,成交時間起,成交時間迄
#回傳範例:
# FQueryMatchResponse(ok=True, error='', data=[
#  FMatchReply(
#   brokerid='F008000',//分公司
#   investoracno='1234567',//帳號
#   networkid='15N',//網路流水序號
#   matchtime='100454169',//成交時間
#   orderno='C0010',//委託書號
#   subact='',//子帳
#   productkind='',//商品類別
#   exchange='CME',//交易所
#   symbol='MNQ',//商品代碼
#   maturitymonthyear='202506',//年月
#   putorcall='F',//CP
#   strikeprice='0.0000000',//履約價
#   symbol2='',//商品代碼2
#   maturitymonthyear2='',//年月2
#   putorcall2='',//CP2
#   strikeprice2='0.0000000',//履約價2
#   side1='',//買賣別1
#   side2='',//買賣別2
#   bs='B',//買賣別
#   matchprice='21836.5000000',//成交價格
#   matchqty='1',//成交口數
#   matchseq='31iPYtn05f770utMc5NP17',//成交序號
#   pricebase='1'//pricebase,
#   note='',//備註
#   mdate=''//異動時間), 
# ..])         

API Reference/ftrade