【shioaji】永豐API基本操作-1:安裝、登入、收取股票報價、收取期貨報價、下單、更新狀態、顯示掛單

一、前言

現在各大券商期貨商都在分食程式交易經紀的大餅,又由於Python的興起造就Python程式交易的熱潮,接下來讓我為大家介紹永豐推出的API吧!

 

二、永豐API基本操作

(0) 安裝

pip install shioaji

這部分應該不用我多說了,pip直接來即可。

 

(1) 登入

import shioaji as sj
api = sj.Shioaji(simulation=True) # 是否用虛擬主機登入
api.login(
 person_id="PAPIUSER01", 
 passwd="2222", 
 contracts_cb=lambda security_type: print(f"{repr(security_type)} fetch done.")
 )

此組帳號密碼是永豐給的公開虛擬測試帳戶,任何人不管有沒有申請api或是在永豐開戶都可以使用此ㄉ登入,但simulation=True記得要,表示我們是要登入虛擬主機。

 

(2) 匯入憑證

api.activate_ca(
 ca_path="/c/your/ca/path/Sinopac.pfx",
 ca_passwd="YOUR_CA_PASSWORD",
 person_id="Person of this Ca",
 )

如果要正式下單就要帶入憑證,在虛擬機登入的話不用匯入憑證也可以做丟單測試。

 

(3) 取得報價(snapshots方法)

永豐API支援許兩種取得即時報價的方法,其中一種常用的方法是snapshots,你就想像成每發出一次snapshots指令,系統就會回傳你取得合約的報價。

A. 股票

TW2330 = api.Contracts.Stocks['2330'] # 取得合約
TW2912 = api.Contracts.Stocks['2912']

contracts_stk = [TW2330, TW2912] # 放在list
snapshots_stk = api.snapshots(contracts_stk) # 取得list中合約的報價 

df_stk = pandas.DataFrame(snapshots_stk) # 轉換成df的形式
df_stk.ts = pandas.to_datetime(df_stk.ts)

先使用api.Contracts.Stocks選定合約,而後放入list中,再來使用api.snapshots取得報價,最後轉換成df的型態。

 

B. 期貨

TXF = api.Contracts.Futures['TXF']['TXF202107'] # 取得合約 [商品][到期月份]
contracts_fut = [TXF] # 放在list

snapshots_fut = api.snapshots(contracts_fut) # 取得list中合約的報價 

df_fut = pandas.DataFrame(snapshots_fut) # 轉換成df的形式
df_fut.ts = pandas.to_datetime(df_fut.ts) 

期貨的部分也是一模一樣。

 

(4) 下單

下單部分也是很清楚明瞭,先定義order物件,而後api.place_order把你的合約及物件一起丟出去即可。

A. 股票

# Stock order
order = api.Order(price=600, # 價格
 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 # 帳戶
 )
trade_stk = api.place_order(TW2330, order) # 送單
trade_stk

使用api.Order把函數中該填的弄一弄,而後使用api.place_order把你要委託掛單的商品丟出去。

 

B. 期貨

# Futures order
order = api.Order(price=10200, # 價格
 quantity=1, # 數量
 action=sj.constant.Action.Buy,
 price_type=sj.constant.StockPriceType.LMT, # 限價單
 order_type=sj.constant.FuturesOrderType.ROD, # 當日有效
 octype=sj.constant.FuturesOCType.Auto, # 倉別自動
 account=api.futopt_account # 帳戶
 )

trade_fut = api.place_order(TXF, order) # 送單
trade_fut

期貨的部分也是一模一樣,應該不用我多說了。

 

(5) 更新狀態、取得目前掛單

# Update Status
api.update_status() # 更新狀態
trades_list = api.list_trades() # 顯示掛單

使用api.update_status()來更新掛單狀態,而後使用api.list_trades()取得目前委託中的商品物件。