iT邦幫忙

2021 iThome 鐵人賽

DAY 6
0
永豐金融APIs

永豐金API之30天不中斷Q&A系列 第 6

Day6 - 下單函數使用,限價、市價、刪單、改單怎麼寫

今天中秋節,月亮嘛...每個月都會圓一次。美股這麼活跳,別烤肉了,認真準備明天開盤才是股海好青年,放下奈個酒杯,打開電腦吧。

今天聊聊關於下單order的相關參數。開始前,請先確認您已經備妥憑證(CA),放置在正確位置。不知道、不明瞭但很想要弄好我的CA,請參考這裡

把憑證CA檔案存好之後,按照下列指令,確認CA設定正確:

result = api.activate_ca(
    ca_path="/c/your/ca/path/Sinopac.pfx",  #這一段改成自己的路徑,最簡單可以放在目前python專案的同一個資料夾,只要輸入檔名即可
    ca_passwd="YOUR_CA_PASSWORD",           #輸入密碼
    person_id="Person of this Ca",          #一樣,輸入身分證ID
)

print(result)

如果執行後看到回應True,就代表CA搞定囉!

首先是設定一個買入的order範例,這一步只是把order準備好,還沒下單出去。

order = api.Order(
    price=12,         #價格
    quantity=1,       #數量
    action=sj.constant.Action.Buy,                 #設定買進 
    price_type=sj.constant.StockPriceType.LMT,     #設定限價單 
    order_type=sj.constant.TFTOrderType.ROD,       #ROD/FOK/IOC設定
    order_lot=sj.constant.TFTStockOrderLot.Common, #設定整股
    account=api.stock_account                      #預設下單帳號
)

賣出的order範例

order = api.Order(
    price=12, 
    quantity=1, 
    action=sj.constant.Action.Sell, 
    price_type=sj.constant.StockPriceType.LMT, 
    order_type=sj.constant.TFTOrderType.ROD, 
    order_lot=sj.constant.TFTStockOrderLot.Common, 
    account=api.stock_account
)

以下是order每一項參數的簡述

項目(小括號是參數允許的資料形態) 說明 (大括號是該項參數能選擇的不同設定)
price (float or int) 設定價格
quantity (int) 數量
action (str) {Buy, Sell} 可選"買、賣"
price_type (str) {LMT, MKT, MKP} 可選"限價、市價、範圍市價"
order_type (str) {ROD, IOC, FOK} 下單的掛單類別,不了解這三個是啥請看這裡
order_cond (str) {Cash, MarginTrading, ShortSelling} 可選"現股、融資、融券"
order_lot (str) {Common, Fixing, Odd, IntradayOdd} 可選"整股、定盤、盤後零股、盤中零股"
first_sell {str} {true, false} 如果要先賣後買(例如券空)就選True,要留意不是所有股票都能執行,並且融資券下單前要確認自己的帳戶有申請信用交易
account (:obj:Account) 帳戶設定,只能傳回Account的格式,不清楚請參考第4天的文章,很簡單的。
ca (binary) 如本篇第一段

最後,來一個先賣後買的完整下單範例:

import shioaji as sj

api = sj.Shioaji()       #登入、設定憑證
accounts = api.login("YOUR_PERSON_ID", "YOUR_PASSWORD", contracts_timeout=10000)
api.activate_ca(
    ca_path="/c/your/ca/path/Sinopac.pfx",
    ca_passwd="YOUR_CA_PASSWORD",
    person_id="Person of this Ca",
)

contract = api.Contracts.Stocks.TSE.TSE2890  #抓取商品報價資料
#設定order內容與相關參數
order = api.Order(
    price=14,
    quantity=1,
    action=sj.constant.Action.Sell,
    price_type=sj.constant.StockPriceType.LMT,
    order_type=sj.constant.TFTOrderType.ROD,
    first_sell=sj.constant.StockFirstSell.Yes,
    account=api.stock_account
)
trade = api.place_order(contract, order)   #下單指令
trade

另一個盤中零股的完整刪單範例,先執行這一段:

import shioaji as sj

api = sj.Shioaji()
accounts = api.login("YOUR_PERSON_ID", "YOUR_PASSWORD", contracts_timeout=10000)
api.activate_ca(
    ca_path="/c/your/ca/path/Sinopac.pfx",
    ca_passwd="YOUR_CA_PASSWORD",
    person_id="Person of this Ca",
)

contract = api.Contracts.Stocks.TSE.TSE0050
order = api.Order(
    price=90,
    quantity=10,
    action=sj.constant.Action.Buy,
    price_type=sj.constant.StockPriceType.LMT,
    order_type=sj.constant.TFTOrderType.ROD,     
    order_lot=sj.constant.TFTStockOrderLot.IntradayOdd, 
    account=api.stock_account,
)

trade = api.place_order(contract, order)
trade

接著是刪單指令

api.update_status(api.stock_account)    
api.cancel_order(trade)
api.update_status(api.stock_account)
trade

以下是改單的指令,要注意,這個範例是盤中零股,因此不能改價,只能改量。如果不了解盤中零股規則,詳情請洽你的營業員。

api.update_status(api.stock_account)
api.update_order(trade=trade, qty=2)
api.update_status(api.stock_account)
trade

以上就是今天的分享,謝謝觀看。
好了,好青年們,準備洗洗睡吧! 記得先入金,咱們明早08:45台股戰場見。


上一篇
Day5 - 關於訂閱報價、訂閱數上限及計算方式
下一篇
Day7 - 什麼是Snapshot及如何使用
系列文
永豐金API之30天不中斷Q&A26

尚未有邦友留言

立即登入留言