即時報價
history() 是歷史 K 線;若要訂閱 Yahoo 推送的即時(或近即時)報價,用 WebSocket 或 AsyncWebSocket。這適合監控幾個代號,不適合當成交易主機的正式行情源。
本頁對照官方範例,說明同步與非同步兩種寫法。
同步 WebSocket
import yfinance as yf
def message_handler(message):
print("Received message:", message)
with yf.WebSocket() as ws:
ws.subscribe(["AAPL", "BTC-USD"])
ws.listen(message_handler)
listen() 會卡住目前執行緒直到連線結束。也可用 unsubscribe() 取消代號。單一 Ticker 另有 live(message_handler),Tickers 同樣有 live()。
非同步 AsyncWebSocket
import asyncio
import yfinance as yf
def message_handler(message):
print("Received message:", message)
async def main():
async with yf.AsyncWebSocket() as ws:
await ws.subscribe(["AAPL", "BTC-USD"])
await ws.listen(message_handler)
asyncio.run(main())
在 Jupyter 裡若與既有 event loop 衝突,官方建議先:
文件:WebSocket。
即時資料的定位
推送內容、延遲與欄位以 Yahoo 為準,免費串流可能中斷或變更。實盤下單請用券商或正式行情商 API,不要把這層 WebSocket 當唯一依據。