close

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

 

arrow
arrow

    恩哥Python 發表在 痞客邦 留言(0) 人氣()