有個Snapshot的功能,可以看當下的商品狀況,讓我們看看這個功能可以做啥吧!
參考網站:Snapshot
本日程式碼使用:d12_snapshot.ipynb
首先取得資料,看看資料內容是什麼,才能決定他可以做什麼事情。
# 登入shioaji
api = sj.Shioaji()
api.login(
person_id="id是我",
passwd="密碼是我",
)
登入後,就使用api.snapshots(合約)
取得snapshot
,裡面「合約
」要存放的參數是之前探討的合約-Contracts
,。這次也是使用台積電(2330)的資料。
contract = [api.Contracts.Stocks['2330']]
snapshot = api.snapshots(contract)
snapshot
可以得到:
[Snapshot(ts=1632493800000000000, code='2330', exchange='TSE', open=591.0, high=598.0, low=590.0, close=598.0, tick_type=<TickType.Buy: 'Buy'>, change_price=10.0, change_rate=1.7, change_type=<ChangeType.Up: 'Up'>, average_price=594.7, volume=54, total_volume=16736, amount=32292000, total_amount=9952872854, yesterday_volume=21696.0, buy_price=597.0, buy_volume=41.0, sell_price=598.0, sell_volume=2, volume_ratio=0.77)]
當然也可以轉換成dataframe,更好閱讀也更好處理數據:
# 轉換成dataframe
df = pandas.DataFrame(snapshot)
來看一下他的欄位:
ts (int): TimeStamp.
code (str): Contract id.
exchange (Exchange): Attributes of industry.
open (float): open
high (float): high
low (float): low
close (float): close
tick_type (TickType): Close is buy or sell price.
{None, Buy, Sell}
change_price (float): change price.
change_rate (float): change rate.
change_type (ChangeType):
{LimitUp, Up, Unchanged, Dowm, LimitDown}
avgerage_price (float): avgerage of price.
volume (int): volume.
total_volume (int): total volume.
amount (int): Deal amount.
total_amount (int): Total deal amount.
yestoday_volume (float): Volume of yestoday.
buy_price (float): Price of buy.
buy_volume (float): Volume of sell.
sell_price (float): Price of sell.
sell_volume (int): Volume of sell.
volume_ratio (float): total_volume/yestoday_volume.
來跟Yahoo股票的資料比對9/24的資料,看看是否相同。
Yahoo的資料為:
開:591 高:598 低:590 收:598 量:16700 漲跌:10.00
open=591.0, high=598.0, low=590.0, close=598.0
,資料相同。total_volume=16736
,實際上證交所提供的為「17,302,848」股,兩者皆有落差。以這個snapshot來說,他是當下的狀態,而例子中的timestamp為1632493800000000000
,也就是Friday, September 24, 2021 2:30:00 PM
零股的時間,但是數量又對不起來...
看來可以那個量
的準確度要觀察,不過價格應該是可以使用。