注意:
- 操作功能前請先登入。
- 詳細功能請參考 API Reference/fquote。
1. 查詢即時快照 (Snapshot Query)
以下方法用於主動查詢當前的最新行情狀態。若 ok 為 True 表示查詢成功,資料存放於 data 欄位中。
查詢成交價量
# 參數: 交易所, 商品, 年月, 履約價(無則空字串), CP(Call/Put/Futures)
response = unitrade.fquote.query_tick_data_trade("CME", "NQ", "202509", "", "F")
# 回傳 FTickDataTradeResponse 範例
# -----------------------------------------------
# data=FTickDataTrade(
# exchange='CME', # 交易所
# symbol='NQ', # 商品代號
# ym='202509', # 年月
# cp='F', # CP
# lastprice=21857.75, # 成交價
# lastvolume=1, # 成交量
# total=33017, # 總量
# time='141835084', # 成交時間
# display_denominator=1.0, # 分母
# display_multiply=1.0 # 倍率
# )
查詢最佳買進報價 (Bid DOM)
response = unitrade.fquote.query_tick_data_bid("CME", "NQ", "202509", "", "F")
# 回傳 FTickDataBidResponse 範例
# -----------------------------------------------
# data=FTickDataBid(
# exchange='CME', symbol='NQ', ym='202509', cp='F',
# BidDOM1Price=21846.5, # 最佳買價1
# BidDOM1Volume=1, # 最佳買量1
# BidDOM2Price=21846.25, # 最佳買價2
# BidDOM2Volume=3, # 最佳買量2
# ... (依此類推至 DOM10)
# )
查詢最佳賣出報價 (Offer DOM)
response = unitrade.fquote.query_tick_data_offer("CME", "NQ", "202509", "", "F")
# 回傳 FTickDataOfferResponse 範例
# -----------------------------------------------
# data=FTickDataOffer(
# exchange='CME', symbol='NQ', ym='202509', cp='F',
# OfferDOM1Price=21844.0, # 最佳賣價1
# OfferDOM1Volume=1, # 最佳賣量1
# OfferDOM2Price=21844.25, # 最佳賣價2
# OfferDOM2Volume=2, # 最佳賣量2
# ... (依此類推至 DOM10)
# )
隱含買賣價量
response = unitrade.fquote.query_tick_data_implied("CME", "NQ", "202509", "", "F")
# 回傳 FTickDataImpliedResponse 範例
# -----------------------------------------------
# data=FTickDataImplied(
# exchange='CME', symbol='NQ', ym='202509', cp='F',
# ImpliedBidPrice=0.0, # 隱含買價
# ImpliedBidVolume=0, # 隱含買量
# ImpliedOfferPrice=0.0, # 隱含賣價
# ImpliedOfferVolume=0 # 隱含賣量
# )
查詢開收盤價
使用 query_tick_data_open_close。
response = unitrade.fquote.query_tick_data_open_close("CME", "NQ", "202509", "", "F")
# 回傳 FTickDataOpencloseResponse 範例
# -----------------------------------------------
# data=FTickDataOpenclose(
# exchange='CME', symbol='NQ', ym='202509', cp='F',
# Opening=21956.75, # 開盤價
# Closing=21842.75 # 收盤價
# )
查詢最高最低價
response = unitrade.fquote.query_tick_data_high_low("CME", "NQ", "202509", "", "F")
# 回傳 FTickDataHighLowResponse 範例
# -----------------------------------------------
# data=FTickDataHighLow(
# exchange='CME', symbol='NQ', ym='202509', cp='F',
# High=21970.75, # 最高價
# Low=21790.0 # 最低價
# )
查詢結算價
response = unitrade.fquote.query_tick_data_settle("CME", "NQ", "202509", "", "F")
# 回傳 FTickDataSettleResponse 範例
# -----------------------------------------------
# data=FTickDataSettle(
# exchange='CME', symbol='NQ', ym='202509', cp='F',
# CurrStl=21945.25, # 目前結算價
# NewStl=21945.25 # 最新結算價
# )
2. 訂閱即時行情 (Subscription)
若需持續接收即時行情,需先註冊對應的事件 Callback,再執行 subscribe。
步驟一:註冊 Callback 與訂閱
# 1. 連結 Callback 函式 (函式定義請見步驟二)
unitrade.fquote.on_tick_data_trade = on_tick_data_trade # 成交
unitrade.fquote.on_tick_data_bid = on_tick_data_bid # 買價
unitrade.fquote.on_tick_data_offer = on_tick_data_offer # 賣價
unitrade.fquote.on_tick_data_implied = on_tick_data_implied # 隱含
unitrade.fquote.on_tick_data_high_low = on_tick_data_high_low # 高低
unitrade.fquote.on_tick_data_open_close = on_tick_data_open_close# 開收
unitrade.fquote.on_tick_data_settle = on_tick_data_settle # 結算
# 2. 發送訂閱請求
# 參數: 交易所, 商品, 年月, 履約價, CP
subok, msg = unitrade.fquote.subscribe("CME", "NQ", "202509", "", "F")
print(f"訂閱結果: {subok}, 訊息: {msg}")
步驟二:實作 Callback 處理邏輯
以下為各類行情的 Callback 範例及回傳資料結構。
# 成交價量處理
def on_tick_data_trade(tickdatatrade: FTickDataTrade):
print(f"成交: {tickdatatrade.lastprice} 量: {tickdatatrade.lastvolume}")
# 資料結構範例:
# FTickDataTrade(
# exchange='CME', symbol='NQ', ym='202509', cp='F',
# lastprice=21857.75, lastvolume=1, total=33017, time='141835084'
# )
# 最佳買價處理
def on_tick_data_bid(tickdatabid: FTickDataBid):
print(f"最佳買價1: {tickdatabid.BidDOM1Price}")
# 資料結構範例:
# FTickDataBid(
# exchange='CME', ...,
# BidDOM1Price=21846.5, BidDOM1Volume=1,
# BidDOM2Price=21846.25, BidDOM2Volume=3,
# ...
# )
# 最佳賣價處理
def on_tick_data_offer(tickdataOffer: FTickDataOffer):
print(f"最佳賣價1: {tickdataOffer.OfferDOM1Price}")
# 資料結構範例:
# FTickDataOffer(
# exchange='CME', ...,
# OfferDOM1Price=21844.0, OfferDOM1Volume=1,
# OfferDOM2Price=21844.25, OfferDOM2Volume=2,
# ...
# )
# 隱含買賣價處理
def on_tick_data_implied(tickdataimplied: FTickDataImplied):
print(tickdataimplied)
# FTickDataImplied(ImpliedBidPrice=0.0, ImpliedOfferPrice=0.0, ...)
# 最高最低價處理
def on_tick_data_high_low(tickdatahighlow: FTickDataHighLow):
print(f"高: {tickdatahighlow.High}, 低: {tickdatahighlow.Low}")
# 開收盤價處理
def on_tick_data_open_close(tickdataopenclose: FTickDataOpenclose):
print(f"開: {tickdataopenclose.Opening}, 收: {tickdataopenclose.Closing}")
# 結算價處理
def on_tick_data_settle(tickdatasettle: FTickDataSettle):
print(f"目前結算: {tickdatasettle.CurrStl}")
反註冊報價 (Unsubscribe)
若要停止接收特定商品的行情,使用 unsubscribe。
# 反註冊報價
unsub_ok, msg = unitrade.fquote.unsubscribe("CME", "NQ", "202509", "", "F")
print(f'反註冊結果: {unsub_ok}, 訊息: {msg}')
3. 查詢歷史 K 線 (History Bars)
版本需求: V1.0.0.4 以上版本提供
透過 get_history_bardata 方法查詢。
參數說明:
- Interval: 週期 (
D: 日K,1K: 1分K) - Start Date: 起始日期 (datetime 物件)
- End Date: 結束日期 (datetime 物件)
- Kind: 商品種類
- Exchange: 交易所
- Symbol: 商品代碼
- YM: 年月
- CP: Call/Put/Futures
- Strike: 履約價
- Count: 取得K線數量 (選填)
from datetime import datetime
# 查詢 1 分 K 線範例
response = unitrade.fquote.get_history_bardata(
"1K", # 週期
datetime(2025, 6, 10, 0, 0, 0), # 起始時間
datetime(2025, 7, 7, 0, 0, 0), # 結束時間
"1", # 商品種類
"CMX", # 交易所
"GC", # 商品代碼
"202508", # 年月
"F", # CP
"", # 履約價
2 # 數量
)
# 回傳 BarDataResponse 範例
if response.ok:
for bar in response.data:
print(f"時間: {bar.date} {bar.time}, 收盤: {bar.close}, 量: {bar.volume}")
# data 列表內容範例:
# [
# BarData(
# productId='CMX|GC|202508|F|',
# date='20250626', time='144500',
# open=3350.3, high=3351.1, low=3350.2, close=3350.6,
# volume=169
# ),
# ...
# ]