注意

  1. 操作功能前請先登入。
  2. 詳細物件定義請參考 API Reference/ftrade

Open In Colab

下載範例 Notebook

1. 訂閱回報接收

在執行交易前,請先訂閱回報事件以接收系統通知:

  • on_reply:監聽委託回報(如:委託成功、失敗、改單結果)。
  • on_match:監聽成交回報。

系統會在事件觸發時分別傳入 FOrderReplyFMatchReply 物件。

def on_reply(orderreply: FOrderReply): 
    print(f"收到委託回報: {orderreply.orderno} 狀態: {orderreply.orderstatus}")
    print(orderreply)
    # FOrderReply 物件結構範例:
    # ------------------------------------------------
    # brokerid='F008000',      # 分公司
    # investoracno='1234567',  # 帳號
    # orderno='C0068',         # 委託書號
    # ordertime='141414995',   # 委託時間
    # exchange='CME',          # 交易所
    # symbol='MNQ',            # 商品代碼
    # bs='S',                  # 買賣別
    # price=0.0,               # 委託價格
    # orderqty=1,              # 委託數量
    # matchqty=1,              # 成交數量
    # orderstatus='完全成交',   # 委託狀態
    # statuscode='0004',       # 委託狀態碼
    # seq='A8OJJ0002 ',        # 下單序號
    # ... (其他詳細欄位請參閱 API 文件)

def on_match(matchreply: FMatchReply): 
    print(f"收到成交回報: {matchreply.orderno} 成交價: {matchreply.matchprice}")
    print(matchreply)
    # FMatchReply 物件結構範例:
    # ------------------------------------------------
    # brokerid='F008000',      # 分公司
    # investoracno='1234567',  # 帳號
    # matchtime='143855956',   # 成交時間
    # orderno='C0075',         # 委託書號
    # exchange='CME',          # 交易所
    # symbol='AD',             # 商品代碼
    # bs='S',                  # 買賣別
    # matchprice=6473.5,       # 成交價格
    # matchqty=1,              # 成交口數
    # matchseq='AF4B0...',     # 成交序號
    # ... (其他詳細欄位請參閱 API 文件)

# 註冊 Callback
unitrade.ftrade.on_reply = on_reply
unitrade.ftrade.on_match = on_match  
print('訂閱完畢')

2. 下單 (New Order)

使用 order 方法進行下單。需先建立 FOrderObject 物件並填入相關參數。

# 宣告下單物件
order = FOrderObject()
order.actno = actno              # 帳號
order.subactno = ""              # 子帳 (無則留空)
order.note = "ordertest"         # 備註
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                  # 委託價格 (市價填0)
order.stopprice = 0              # 停損價格
order.orderqty = 1               # 委託數量
order.ordercondition = "R"       # I:IOC, R:ROD, F:FOK
order.opencloseflag = "0"        # 0:新倉, 1:平倉, 空白:自動
order.dtrade = "N"               # Y:當沖, N:非當沖

# 執行下單
orderresponse = unitrade.ftrade.order(order) 

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

# 回傳 FOrderResponse 範例:
# ------------------------------------------------
# FOrderResponse(
#   issend=True,        # 是否送出
#   seq='AGmb80002',    # 下單序號
#   errorcode='',       # 錯誤代碼
#   errormsg='',        # 錯誤訊息
#   note='ordertest'    # 傳入的備註
# ) 

3. 委託變更 (改單)

委託變更包含「刪單」、「減量」與「改價」。統一使用 replace_order 方法,並透過 FReplaceObjectreplacetype 屬性來區分操作類型。

刪單 (Cancel)

replacetype 設定為 "4"

replace = FReplaceObject()
replace.replacetype = "4"      # 4:取消
replace.actno = "1234567"      # 帳號
replace.orderno = "A0001"      # 原委託書號

replaceresponse = unitrade.ftrade.replace_order(replace)
print(f"刪單結果: {replaceresponse.issend}, 訊息: {replaceresponse.errormsg}")

減量 (Decrease Quantity)

replacetype 設定為 "5",並指定修改後的數量。

replace = FReplaceObject()
replace.replacetype = "5"      # 5:減量
replace.actno = "1234567"      # 帳號
replace.orderno = "A0001"      # 原委託書號
replace.orderqty = 1           # 欲減掉的數量 (或是減量後的剩餘數量,請依實際API定義為主)

replaceresponse = unitrade.ftrade.replace_order(replace)
print(f"減量結果: {replaceresponse.issend}, 訊息: {replaceresponse.errormsg}")

改價 (Modify Price)

replacetype 設定為 "m"。需重新指定價格別、條件與新價格。

replace = FReplaceObject()
replace.replacetype = "m"      # m:改價
replace.actno = "1234567"      # 帳號
replace.orderno = "A0001"      # 原委託書號
replace.ordertype = "L"        # L:限價, M:市價
replace.ordercondition = "R"   # I:IOC, R:ROD, F:FOK
replace.price = 22300          # 新委託價格

replaceresponse = unitrade.ftrade.replace_order(replace)
print(f"改價結果: {replaceresponse.issend}, 訊息: {replaceresponse.errormsg}")

4. 查詢功能

委回查詢 (Query Reply)

透過 query_reply 查詢委託紀錄。

# 參數依序為: 帳號, 筆數, 網路流水序號起, 網路流水序號迄, 委託時間起, 委託時間迄
query_reply_response = unitrade.ftrade.query_reply(actno, 500, "", "", "", "")

# 回傳結果 FQueryReplyResponse 範例
if query_reply_response.ok:
    for data in query_reply_response.data:
        print(f"委託書號: {data.orderno}, 商品: {data.symbol}, 狀態: {data.orderstatus}")
        # data 為 FOrderReply 物件,結構同 on_reply

成回查詢 (Query Match)

透過 query_match 查詢成交紀錄。

# 參數依序為: 帳號, 筆數, 網路流水序號起, 網路流水序號迄, 成交時間起, 成交時間迄
query_match_response = unitrade.ftrade.query_match(actno, 500, "", "", "", "")

# 回傳結果 FQueryMatchResponse 範例
if query_match_response.ok:
    for data in query_match_response.data:
        print(f"成交書號: {data.orderno}, 商品: {data.symbol}, 成交價: {data.matchprice}")
        # data 為 FMatchReply 物件,結構同 on_match

API Reference/ftrade

```


Back to top

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

支援 OS: Linux, macOS, Windows