iT邦幫忙

2021 iThome 鐵人賽

DAY 12
0
永豐金融APIs

深入解析 Shioaji API系列 第 12

Day 12 - 下單電子憑證及Stock股票Order建立

本篇重點

  • api.activate_ca 啟動下單電子憑證
  • Stock股票Order建立

api.activate_ca 啟動電子憑證

官方說明文件:
https://sinotrade.github.io/tutor/order/CA/
在下單之前,需要先下載永豐證券帳戶的下單電子憑證,下載方式請參考官方說明
https://www.sinotrade.com.tw/CSCenter/CSCenter_13_1?tab=2
下載完成後,可以透過api.activate_ca來啟用下單電子憑證,範例如下:

from dotenv import load_dotenv
import os
import shioaji as sj

load_dotenv('D:\\python\\shioaji\\.env') #讀取.env中的環境變數
api = sj.Shioaji()
api.login(
    person_id=os.getenv('YOUR_PERSON_ID'), 
    passwd=os.getenv('YOUR_PASSWORD')
)

result = api.activate_ca(
    ca_path=os.getenv('YOUR_CA_PATH'), # 下單電子憑證路徑及檔案名稱
    ca_passwd=os.getenv('YOUR_CA_PASS'), # 下單電子憑證密碼
    person_id=os.getenv('YOUR_PERSON_ID'), # 身份證字號
)
print(result)

api.logout()

啟用下單電子憑證前要先執行api.login進行登入。在這裡一樣把電子憑證相關資訊先儲存在env檔案中,再透過os.getenv()取得資訊並傳入activate_ca中,若電子憑證啟用成功,則回傳的result就會是True。

若你要用虛擬帳戶登入並練習或測試下單功能,不必啟動電子憑證,可跳過這個步驟。

Order物件建立說明

官方說明文件:https://sinotrade.github.io/tutor/order/Stock/#making-order-object
在發送委託單前,要先產生一個Order物件。
Order物件建立的參數說明如下:

參數 參數說明 參數範例
price 委託價格 18.5
quantity 委託數量 1
action 委託單動作 {Buy, Sell}
price_type 價格類型 {LMT, MKT, MKP} (限價、市價、範圍市價)
order_type 委託單類型 {ROD, IOC, FOK} (當日有效、立即成交否則取消、全部成交否則取消)
order_cond 委託單種類 {Cash, MarginTrading, ShortSelling} (現股、融資、融券)
order_lot 委託單交易單位 {Common, Fixing, Odd, IntradayOdd} (整股、盤後定價、盤後零股、盤中零股)
first_sell 是否為現沖先賣 {true, false}
octype 倉別 {Auto, NewPosition, Cover, DayTrade} (自動、新倉、平倉、當沖)
OptionRight 選擇權類別 {Call, Put}
account 交易帳戶 可由API取得account物件

order_cond、order_lot及first_sell,為股票Order物件特有屬性
octype,為期貨或選擇權Order物件特有屬性
OptionRight為選擇權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, 
    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範例

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,
    first_sell=sj.constant.StockFirstSell.Yes, #現沖先賣,設定為StockFirstSell.Yes or True
    account=api.stock_account
)

盤中零股,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, 
    order_lot=sj.constant.TFTStockOrderLot.IntradayOdd, #指定盤中零股
    account=api.stock_account
)

盤中零股,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, 
    order_lot=sj.constant.TFTStockOrderLot.IntradayOdd, #指定盤中零股
    account=api.stock_account
)

盤後定價,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, 
    order_lot=sj.constant.TFTStockOrderLot.Fixing, #指定盤後定價
    account=api.stock_account
)

盤後零股,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, 
    order_lot=sj.constant.TFTStockOrderLot.Odd, #指定盤後零股
    account=api.stock_account
)

以上為現股Order的建立及下單相關操作,若是要使用融資或融券,只要在建立Order時指定order_cond為StockOrderCond.MarginTrading(融資)或是StockOrderCond.ShortSelling(融券)即可;若在建立Order時沒有指定order_cond,預設都是以StockOrderCond.Cash建立。


上一篇
Day 11 - Subscribe 訂閱盤中報價資訊(Futures)
下一篇
Day 13 - Futures期貨、Options選擇權Order建立
系列文
深入解析 Shioaji API30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
Chris
iT邦新手 4 級 ‧ 2021-12-11 21:21:13

請教一下"現沖先賣",若我要平倉是否要下一個"買單"??

Mike iT邦新手 5 級 ‧ 2021-12-16 08:47:41 檢舉

是,要沖銷的話,就是用「現股買進」,成交後系統就會自動沖銷

我要留言

立即登入留言