【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()取得目前委託中的商品物件。
留言列表