操作功能前請先登入

詳細說明請參考API Reference/ftrade

Open In Colab

訂閱回報接收

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

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

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

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

def on_reply(orderreply: FOrderReply): 
    i=len(reply_dd)+1 
    reply_dd.loc[i, '分公司'] = orderreply.brokerid
    reply_dd.loc[i, '帳號'] = orderreply.investoracno
    reply_dd.loc[i, '網路流水序號'] = orderreply.networkid
    reply_dd.loc[i, '委託時間'] = orderreply.ordertime
    reply_dd.loc[i, '委託書號'] = orderreply.orderno
    reply_dd.loc[i, '子帳'] = orderreply.subact
    reply_dd.loc[i, '商品類別'] = orderreply.productkind
    reply_dd.loc[i, '交易所'] = orderreply.exchange
    reply_dd.loc[i, '商品代碼'] = orderreply.symbol
    reply_dd.loc[i, '年月'] = orderreply.maturitymonthyear
    reply_dd.loc[i, 'CP'] = orderreply.putorcall
    reply_dd.loc[i, '履約價'] = orderreply.strikeprice
    reply_dd.loc[i, '商品代碼2'] = orderreply.symbol2
    reply_dd.loc[i, '年月2'] = orderreply.maturitymonthyear2
    reply_dd.loc[i, 'CP2'] = orderreply.putorcall2
    reply_dd.loc[i, '履約價2'] = orderreply.strikeprice2
    reply_dd.loc[i, '買賣別'] = orderreply.bs
    reply_dd.loc[i, '價格別'] = orderreply.ordertype
    reply_dd.loc[i, '委託價格'] = orderreply.price
    reply_dd.loc[i, '委託數量'] = orderreply.orderqty
    reply_dd.loc[i, '未成交數量'] = orderreply.nomatchqty
    reply_dd.loc[i, '成交數量'] = orderreply.matchqty
    reply_dd.loc[i, '刪除數量'] = orderreply.delqty
    reply_dd.loc[i, '下單方式'] = orderreply.ordercondition
    reply_dd.loc[i, '開倉別'] = orderreply.opencloseflag
    reply_dd.loc[i, '異動時間'] = orderreply.mdate
    reply_dd.loc[i, '委託狀態'] = orderreply.orderstatus
    reply_dd.loc[i, '委託狀態碼'] = orderreply.statuscode
    reply_dd.loc[i, '開倉別'] = orderreply.opencloseflag
    reply_dd.loc[i, '下單序號'] = orderreply.seq
    reply_dd.loc[i, 'pricebase'] = orderreply.pricebase
    clear_output(wait=True)  
    display(reply_dd)  
    display(match_dd)  
def on_match(matchreply: FMatchReply): 
    print("match")
    i=len(match_dd)+1 
   
    match_dd.loc[i, '分公司'] = matchreply.brokerid
    match_dd.loc[i, '帳號'] = matchreply.investoracno
    match_dd.loc[i, '網路流水序號'] = matchreply.networkid
    match_dd.loc[i, '成交時間'] = matchreply.matchtime
    match_dd.loc[i, '委託書號'] = matchreply.orderno
    match_dd.loc[i, '子帳'] = matchreply.subact
    match_dd.loc[i, '商品類別'] = matchreply.productkind
    match_dd.loc[i, '交易所'] = matchreply.exchange
    match_dd.loc[i, '商品代碼'] = matchreply.symbol
    match_dd.loc[i, '年月'] = matchreply.maturitymonthyear
    match_dd.loc[i, 'CP'] = matchreply.putorcall
    match_dd.loc[i, '履約價'] = matchreply.strikeprice

    match_dd.loc[i, '商品代碼2'] = matchreply.symbol2
    match_dd.loc[i, '年月2'] = matchreply.maturitymonthyear2
    match_dd.loc[i, 'CP2'] = matchreply.putorcall2
    match_dd.loc[i, '履約價2'] = matchreply.strikeprice2

    match_dd.loc[i, '買賣別'] = matchreply.bs
    match_dd.loc[i, '成交價格'] = matchreply.matchprice
    match_dd.loc[i, '成交口數'] = matchreply.matchqty
    match_dd.loc[i, '成交序號'] = matchreply.matchseq 
    match_dd.loc[i, '備註'] = matchreply.note
    match_dd.loc[i, '異動時間'] = matchreply.mdate
    match_dd.loc[i, 'pricebase'] = matchreply.pricebase
    clear_output(wait=True)  
    display(reply_dd)  
    display(match_dd)  
api.ftrade.on_reply=on_reply
api.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=api.ftrade.order(order) 
print(f" 是否成功 {orderresponse.issend} 下單序號 {orderresponse.seq} 錯誤代碼 {orderresponse.errorcode} 錯誤訊息 {orderresponse.errormsg}")

刪單

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

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

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

#刪單
replace=FReplaceObject()
replace.replacetype="4"#4:取消, 5: 減量, m:改價
replace.actno = actno#帳號
replace.orderno="C0027"#委託書號
replaceresponse=api.ftrade.replace_order(replace)
print(f" 是否成功 {replaceresponse.issend} 下單序號 {replaceresponse.seq} 錯誤代碼 {replaceresponse.errorcode} 錯誤訊息 {replaceresponse.errormsg}")

減量

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

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

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

#減量
replace=FReplaceObject()
replace.replacetype="5"#4:取消, 5: 減量, m:改價
replace.actno = actno#帳號
replace.orderno=""#委託書號
replace.orderqty = 1#委託數量
replaceresponse=api.ftrade.replace_order(replace)
print(f" 是否成功 {replaceresponse.issend} 下單序號 {replaceresponse.seq} 錯誤代碼 {replaceresponse.errorcode} 錯誤訊息 {replaceresponse.errormsg}")

改價

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

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

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

#改價
replace=FReplaceObject()
replace.replacetype="m"#4:取消, 5: 減量, m:改價
replace.actno = actno#帳號
replace.orderno=""#委託書號
replace.ordertype="L"#L:限價 M:市價   3:停損市價 4:停損限價
replace.ordercondition="R"##委託種類 I:IOC R:ROD F:FOK
replace.price=22300#委託價格
replaceresponse=api.ftrade.replace_order(replace)
print(f" 是否成功 {replaceresponse.issend} 下單序號 {replaceresponse.seq} 錯誤代碼 {replaceresponse.errorcode} 錯誤訊息 {replaceresponse.errormsg}")

委回查詢

透過ftrade.query_reply執行查詢

回傳結果是FOrderResponse

範例如下

query_reply_response=api.ftrade.query_reply(actno,500,"","","","")#帳號,筆數,網路流水序號起,,網路流水序號迄,委託時間起,委託時間迄
if query_reply_response.ok == True: 
        i=0
        for orderreply in query_reply_response.data:  
            reply_dd.loc[i, '分公司'] = orderreply.brokerid
            reply_dd.loc[i, '帳號'] = orderreply.investoracno
            reply_dd.loc[i, '網路流水序號'] = orderreply.networkid
            reply_dd.loc[i, '委託時間'] = orderreply.ordertime
            reply_dd.loc[i, '委託書號'] = orderreply.orderno
            reply_dd.loc[i, '子帳'] = orderreply.subact
            reply_dd.loc[i, '商品類別'] = orderreply.productkind
            reply_dd.loc[i, '交易所'] = orderreply.exchange
            reply_dd.loc[i, '商品代碼'] = orderreply.symbol
            reply_dd.loc[i, '年月'] = orderreply.maturitymonthyear
            reply_dd.loc[i, 'CP'] = orderreply.putorcall
            reply_dd.loc[i, '履約價'] = orderreply.strikeprice
            reply_dd.loc[i, '商品代碼2'] = orderreply.symbol2
            reply_dd.loc[i, '年月2'] = orderreply.maturitymonthyear2
            reply_dd.loc[i, 'CP2'] = orderreply.putorcall2
            reply_dd.loc[i, '履約價2'] = orderreply.strikeprice2
            reply_dd.loc[i, '買賣別'] = orderreply.bs
            reply_dd.loc[i, '價格別'] = orderreply.ordertype
            reply_dd.loc[i, '委託價格'] = orderreply.price
            reply_dd.loc[i, '委託數量'] = orderreply.orderqty
            reply_dd.loc[i, '未成交數量'] = orderreply.nomatchqty
            reply_dd.loc[i, '成交數量'] = orderreply.matchqty
            reply_dd.loc[i, '刪除數量'] = orderreply.delqty
            reply_dd.loc[i, '下單方式'] = orderreply.ordercondition
            reply_dd.loc[i, '開倉別'] = orderreply.opencloseflag
            reply_dd.loc[i, '異動時間'] = orderreply.mdate
            reply_dd.loc[i, '委託狀態'] = orderreply.orderstatus
            reply_dd.loc[i, '委託狀態碼'] = orderreply.statuscode
            reply_dd.loc[i, '開倉別'] = orderreply.opencloseflag
            reply_dd.loc[i, '下單序號'] = orderreply.seq
            reply_dd.loc[i, 'pricebase'] = orderreply.pricebase
            i=i+1
        clear_output(wait=True)  
        display(reply_dd)       
else:
    print(query_reply_response.error)         

成回查詢

透過ftrade.query_match執行查詢

回傳結果是FQueryMatchResponse

範例如下

query_match_response=api.ftrade.query_match(actno,500,"","","","")#帳號,筆數,網路流水序號起,,網路流水序號迄,成交時間起,成交時間迄
if query_match_response.ok == True: 
        i=0
        for matchreply in query_match_response.data: 
            match_dd.loc[i, '分公司'] = matchreply.brokerid
            match_dd.loc[i, '帳號'] = matchreply.investoracno
            match_dd.loc[i, '網路流水序號'] = matchreply.networkid
            match_dd.loc[i, '成交時間'] = matchreply.matchtime
            match_dd.loc[i, '委託書號'] = matchreply.orderno
            match_dd.loc[i, '子帳'] = matchreply.subact
            match_dd.loc[i, '商品類別'] = matchreply.productkind
            match_dd.loc[i, '交易所'] = matchreply.exchange
            match_dd.loc[i, '商品代碼'] = matchreply.symbol
            match_dd.loc[i, '年月'] = matchreply.maturitymonthyear
            match_dd.loc[i, 'CP'] = matchreply.putorcall
            match_dd.loc[i, '履約價'] = matchreply.strikeprice

            match_dd.loc[i, '商品代碼2'] = matchreply.symbol2
            match_dd.loc[i, '年月2'] = matchreply.maturitymonthyear2
            match_dd.loc[i, 'CP2'] = matchreply.putorcall2
            match_dd.loc[i, '履約價2'] = matchreply.strikeprice2

            match_dd.loc[i, '買賣別'] = matchreply.bs
            match_dd.loc[i, '成交價格'] = matchreply.matchprice
            match_dd.loc[i, '成交口數'] = matchreply.matchqty
            match_dd.loc[i, '成交序號'] = matchreply.matchseq 
            match_dd.loc[i, '備註'] = matchreply.note
            match_dd.loc[i, '異動時間'] = matchreply.mdate
            match_dd.loc[i, 'pricebase'] = matchreply.pricebase
            i=i+1
        clear_output(wait=True)  
        display(reply_dd)     
else:
    print(query_match_response.error)             

API Reference/ftrade