API登入時如何有效等待商品檔下載

回覆文章
maxeii
系統管理員
文章: 33
註冊時間: 2021-09-01, 13:54

API登入時如何有效等待商品檔下載

文章 maxeii »

Shioaji login的時候,目前會下載四個分類的商品檔案
1. 指數 Shioaji.constant.SecurityType.Index
2. 期貨 Shioaji.constant.SecurityType.Future
3. 股票+權證 Shioaji.constant.SecurityType.Stock
4. 選擇權 Shioaji.constant.SecurityType.Option

而商品檔的內容,更是 Shioaji 貫穿各式功能的基本資料。

另外處理順序會依照各分類的商品數量依序得到call back,
正常順序都是 Index -> Futures -> Stock -> Option


以下,實現登入時,經由 contracts_cb 取得期貨商品檔下載完畢之後,繼續查詢期貨商品的快照,並結束。

代碼: 選擇全部

import os
from threading import Event
from dotenv import load_dotenv
import shioaji
from shioaji.constant import SecurityType

load_dotenv()
futures_event_obj = Event()

def contracts_cb(security_type:SecurityType)->None:
    global futures_obj
    print(f"{security_type} 下載完畢.")
    if security_type == SecurityType.Future:
        print("收到期貨商品檔")
        futures_event_obj.set()

api = shioaji.Shioaji()

api.login(os.getenv('SHIOAJI_USERID'),os.getenv("SHIOAJI_PASSWORD"),contracts_cb=contracts_cb,contracts_timeout=0)

print("等待商品檔下載")
futures_event_obj.wait()
print("Got Futures Contracts")
print(api.snapshots([api.Contracts.Futures.TXF.TXF202112]))
api.logout()
執行結果如下:

代碼: 選擇全部

Response Code: 0 | Event Code: 0 | Info: host '203.66.91.161:80', hostname '203.66.91.161:80' IP 203.66.91.161:80 (host 1 of 1) (host connection attempt 1 of 1) (total connection attempt 1 of 1) | Event: Session up
IND 下載完畢.
等待商品檔下載
FUT 下載完畢.
收到期貨商品檔
Got Futures Contracts
[Snapshot(ts=1638245493430000000, code='TXFL1', exchange='TAIFEX', open=17368.0, high=17399.0, low=17295.0, close=17396.0, tick_type=<TickType.Buy: 'Buy'>, change_price=85.0, change_rate=0.49, change_type=<ChangeType.Up: 'Up'>, average_price=17351.08, volume=1, total_volume=34622, amount=17396, total_amount=600729144, yesterday_volume=28936.0, buy_price=17395.0, buy_volume=10.0, sell_price=17397.0, sell_volume=10, volume_ratio=1.2)]
回覆文章