注意

  1. 操作功能前請先登入。
  2. 詳細功能請參考 API Reference/fquote

Open In Colab

下載範例 Notebook

1. 查詢即時快照 (Snapshot Query)

以下方法用於主動查詢當前的最新行情狀態。若 okTrue 表示查詢成功,資料存放於 data 欄位中。

查詢成交價量

使用 query_tick_data_trade

# 參數: 交易所, 商品, 年月, 履約價(無則空字串), 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)

使用 query_tick_data_bid

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)

使用 query_tick_data_offer

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)
# )

隱含買賣價量

使用 query_tick_data_implied

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         # 收盤價
# )

查詢最高最低價

使用 query_tick_data_high_low

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              # 最低價
# )

查詢結算價

使用 query_tick_data_settle

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 方法查詢。

參數說明:

  1. Interval: 週期 (D: 日K, 1K: 1分K)
  2. Start Date: 起始日期 (datetime 物件)
  3. End Date: 結束日期 (datetime 物件)
  4. Kind: 商品種類
  5. Exchange: 交易所
  6. Symbol: 商品代碼
  7. YM: 年月
  8. CP: Call/Put/Futures
  9. Strike: 履約價
  10. 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
#   ),
#   ...
# ]


Back to top

支援Python版本: 3.7 3.8 3.9 3.10 3.11 3.12

支援 OS: Linux, macOS, Windows