今天中秋節,月亮嘛...每個月都會圓一次。美股這麼活跳,別烤肉了,認真準備明天開盤才是股海好青年,放下奈個酒杯,打開電腦吧。
今天聊聊關於下單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台股戰場見。