Historical Daily
查詢期貨與選擇權某一交易日的歷史日行情(依商品代號查詢)。一次取得該商品當日全部掛牌合約(選擇權各履約價的買權與賣權、期貨各月份與價差),可用 contractMonth 只取單一契約月份;支援日盤與夜盤,可回溯至 2010 年。
historical/daily/{product}
版本資訊
v2.5.0 起新增功能
Parameters
| Name | Type | Description |
|---|---|---|
product* | string | 商品代號,例如期貨 TXF、MXF,選擇權 TXO(大寫)。週契約亦以商品代號查詢,再以 contractMonth 指定(例:TXO 搭配 202610W1)。契約代碼(例:TXFJ6)不可作為 product,會回傳 400 |
date | string | 交易日(格式:yyyy-MM-dd),未帶時預設為今日 |
session | string | 交易時段,未帶時預設為 regular 日盤;可選 afterhours 夜盤(盤後交易時段) |
contractMonth | string | 只回傳此契約月份,未帶時回傳當日全部合約。可填:月份 yyyyMM(例:202610);週契約 yyyyMMWn(週三到期,例:202610W1)、yyyyMMFn(週五到期,例:202610F1);期貨價差 yyyyMM/yyyyMM(例:202610/202611)。期貨另可填連續合約 1! 近月、2! 次近月、3! 第三近月(4! 以上回傳 400);選擇權不支援連續合約,帶入會回傳 400 |
info
- 日行情可回溯至 2010 年。當日資料於盤後產出,約 17:30 後可查詢 。
- 本端點一次查詢一個交易日,只接受
date、session、contractMonth三個查詢參數,from/to等其他參數不會生效。要取得單一合約跨日的序列,請改用 歷史 K 線。 - 查詢日為非交易日、資料尚未產出,或商品代號、契約月份不存在時,回傳 404 Resource Not Found。
date帶入時間(例:2026-10-02T00:00:00)會回傳 400。 - 夜盤依期交所規則歸屬次一交易日,例如
session=afterhours&date=2026-10-02回傳的是 2026-10-01 15:00 至 2026-10-02 05:00 這一場夜盤。 data依到期日先後排列(例:202610W1、202610F1、202610W2、202610F2、202610、202610F3、202611),同一到期日再依履約價由低到高、買權在前;期貨價差列排在最後。- 期貨會一併回傳價差合約列,其
contractMonth為兩個月份以/相連(例:202610/202611),可據此辨識或排除。
Response
| Name | Type | Description |
|---|---|---|
date* | string | 交易日 |
product* | string | 商品代號 |
exchange* | string | 交易所 |
session* | string | 盤別,REGULAR 日盤、AFTERHOURS 夜盤 |
contractMonth | string | 查詢時帶入的契約月份;帶入連續合約時為解析後的實際月份。未帶 contractMonth 時不回傳此欄位 |
data* | object[] | 日行情資料 |
data.contractMonth* | string | 契約月份:月份 yyyyMM、週契約 yyyyMMWn/yyyyMMFn、期貨價差 yyyyMM/yyyyMM |
data.strikePrice* | number | 履約價;期貨與價差列為 null |
data.callPut* | string | 買賣權別,CALL 買權、PUT 賣權;期貨與價差列為 null |
data.exchange* | string | 交易所 |
data.openPrice* | number | 開盤價;無成交為 null |
data.highPrice* | number | 最高價;無成交,或期交所未提供時為 null |
data.lowPrice* | number | 最低價;無成交,或期交所未提供時為 null |
data.closePrice* | number | 收盤價;無成交為 null |
data.change* | number | 漲跌;無成交為 null,部分價差列亦為 null |
data.changePercent* | number | 漲跌幅(%);無成交,或期交所未提供時為 null |
data.volume* | number | 成交量(口數),無成交為 0;價差列為價差委託之間的成交量 |
data.volumeSpread* | number | 價差對單式委託的成交量,僅期貨價差列有值,其餘為 null;與 volume 口徑不同,不可相加 |
data.openInterest* | number | 未沖銷契約量;夜盤與價差列為 null |
data.settlementPrice* | number | 結算價;夜盤與價差列為 null |
Examples
期貨:某日全部月份
查詢臺股期貨 2026-10-02 日盤的全部月份,價差列排在最後:
- Python
- Node.js
- C#
from fubon_neo.sdk import FubonSDK, Order
sdk = FubonSDK()
accounts = sdk.login("Your ID", "Your password", "Your cert path", "Your cert password") # 需登入後,才能取得行情權限
sdk.init_realtime() # 建立行情連線
restfutopt = sdk.marketdata.rest_client.futopt
## 2.2.4 及以後版本 (使用 Exception 進行例外處理)
from fubon_neo.fugle_marketdata.rest.base_rest import FugleAPIError
try:
daily = restfutopt.historical.daily(**{"product": "TXF", "date": "2026-10-02"})
print(daily)
except FugleAPIError as e:
print(f"Error: {e}")
print("------------")
print(f"Status Code: {e.status_code}") # 例: 429
print(f"Response Text: {e.response_text}") # 例: {"statusCode":429,"message":"Rate limit exceeded"}
const { FubonSDK } = require('fubon-neo');
const sdk = new FubonSDK();
const accounts = sdk.login("Your ID", "Your Password", "Your Cert Path", "Your Cert Password");
sdk.initRealtime(); // 建立行情連線
const client = sdk.marketdata.restClient
client.futopt.historical.daily({ product: 'TXF', date: '2026-10-02' })
.then(data => console.log(data));
using FubonNeo.Sdk;
using FugleMarketData.QueryModels.FuOpt.Historical; //引入 DailyRequest
var sdk = new FubonSDK();
var result = sdk.Login("Your ID", "Your Password", "Your Cert Path", "Your Cert Password");
sdk.InitRealtime(); // 建立行情連線
var rest = sdk.MarketData.RestClient.FutureOption;
var daily = await rest.Historical.Daily("TXF", new DailyRequest(new DateTime(2026,10,2)));
var daily_cont = daily.Content.ReadAsStringAsync().Result;
Console.WriteLine(daily_cont);
Response Body(節錄):
{
"date": "2026-10-02",
"product": "TXF",
"exchange": "TAIFEX",
"session": "REGULAR",
"data": [
{
"contractMonth": "202610",
"strikePrice": null,
"callPut": null,
"exchange": "TAIFEX",
"openPrice": 48552,
"highPrice": 48802,
"lowPrice": 48472,
"closePrice": 48671,
"change": -27,
"changePercent": -0.06,
"volume": 34014,
"volumeSpread": null,
"openInterest": 106691,
"settlementPrice": 48669
},
{
"contractMonth": "202611",
"strikePrice": null,
"callPut": null,
"exchange": "TAIFEX",
"openPrice": 48730,
"highPrice": 48981,
"lowPrice": 48668,
"closePrice": 48841,
"change": -17,
"changePercent": -0.03,
"volume": 450,
"volumeSpread": null,
"openInterest": 1445,
"settlementPrice": 48840
},
...
{
"contractMonth": "202610/202611",
"strikePrice": null,
"callPut": null,
"exchange": "TAIFEX",
"openPrice": 174,
"highPrice": 180,
"lowPrice": 173,
"closePrice": 180,
"change": null,
"changePercent": null,
"volume": 255,
"volumeSpread": 156,
"openInterest": null,
"settlementPrice": null
},
...
]
}
選擇權:指定契約月份
查詢臺指選擇權 2026-10-02 日盤 202610 月份的全部履約價:
- Python
- Node.js
- C#
from fubon_neo.sdk import FubonSDK, Order
sdk = FubonSDK()
accounts = sdk.login("Your ID", "Your password", "Your cert path", "Your cert password") # 需登入後,才能取得行情權限
sdk.init_realtime() # 建立行情連線
restfutopt = sdk.marketdata.rest_client.futopt
## 2.2.4 及以後版本 (使用 Exception 進行例外處理)
from fubon_neo.fugle_marketdata.rest.base_rest import FugleAPIError
try:
daily = restfutopt.historical.daily(**{"product": "TXO", "date": "2026-10-02", "contractMonth": "202610"})
print(daily)
except FugleAPIError as e:
print(f"Error: {e}")
print("------------")
print(f"Status Code: {e.status_code}") # 例: 429
print(f"Response Text: {e.response_text}") # 例: {"statusCode":429,"message":"Rate limit exceeded"}
const { FubonSDK } = require('fubon-neo');
const sdk = new FubonSDK();
const accounts = sdk.login("Your ID", "Your Password", "Your Cert Path", "Your Cert Password");
sdk.initRealtime(); // 建立行情連線
const client = sdk.marketdata.restClient
client.futopt.historical.daily({ product: 'TXO', date: '2026-10-02', contractMonth: '202610' })
.then(data => console.log(data));
using FubonNeo.Sdk;
using FugleMarketData.QueryModels.FuOpt.Historical; //引入 DailyRequest
var sdk = new FubonSDK();
var result = sdk.Login("Your ID", "Your Password", "Your Cert Path", "Your Cert Password");
sdk.InitRealtime(); // 建立行情連線
var rest = sdk.MarketData.RestClient.FutureOption;
var daily = await rest.Historical.Daily("TXO", new DailyRequest(new DateTime(2026,10,2), contractMonth: "202610"));
var daily_cont = daily.Content.ReadAsStringAsync().Result;
Console.WriteLine(daily_cont);
Response Body(節錄):
{
"date": "2026-10-02",
"product": "TXO",
"exchange": "TAIFEX",
"session": "REGULAR",
"contractMonth": "202610",
"data": [
...
{
"contractMonth": "202610",
"strikePrice": 47000,
"callPut": "CALL",
"exchange": "TAIFEX",
"openPrice": 1910,
"highPrice": 2060,
"lowPrice": 1870,
"closePrice": 1970,
"change": -20,
"changePercent": -1.01,
"volume": 17,
"volumeSpread": null,
"openInterest": 893,
"settlementPrice": 1930
},
{
"contractMonth": "202610",
"strikePrice": 47000,
"callPut": "PUT",
"exchange": "TAIFEX",
"openPrice": 330,
"highPrice": 340,
"lowPrice": 245,
"closePrice": 259,
"change": -35,
"changePercent": -11.9,
"volume": 280,
"volumeSpread": null,
"openInterest": 494,
"settlementPrice": 259
},
...
]
}
夜盤範例(連續合約)
帶 session=afterhours 查詢夜盤,並以連續合約 1! 只取近月。date 填夜盤所屬的交易日(2026-10-02),回傳的是 2026-10-01 15:00 起至 2026-10-02 05:00 的夜盤;頂層 contractMonth 為解析後的實際月份:
- Python
- Node.js
- C#
from fubon_neo.sdk import FubonSDK, Order
sdk = FubonSDK()
accounts = sdk.login("Your ID", "Your password", "Your cert path", "Your cert password") # 需登入後,才能取得行情權限
sdk.init_realtime() # 建立行情連線
restfutopt = sdk.marketdata.rest_client.futopt
## 2.2.4 及以後版本 (使用 Exception 進行例外處理)
from fubon_neo.fugle_marketdata.rest.base_rest import FugleAPIError
try:
daily = restfutopt.historical.daily(**{"product": "TXF", "date": "2026-10-02", "session": "afterhours", "contractMonth": "1!"})
print(daily)
except FugleAPIError as e:
print(f"Error: {e}")
print("------------")
print(f"Status Code: {e.status_code}") # 例: 429
print(f"Response Text: {e.response_text}") # 例: {"statusCode":429,"message":"Rate limit exceeded"}
const { FubonSDK } = require('fubon-neo');
const sdk = new FubonSDK();
const accounts = sdk.login("Your ID", "Your Password", "Your Cert Path", "Your Cert Password");
sdk.initRealtime(); // 建立行情連線
const client = sdk.marketdata.restClient
client.futopt.historical.daily({ product: 'TXF', date: '2026-10-02', session: 'afterhours', contractMonth: '1!' })
.then(data => console.log(data));
using FubonNeo.Sdk;
using FugleMarketData.QueryModels.FuOpt; //引入 TradeSession
using FugleMarketData.QueryModels.FuOpt.Historical; //引入 DailyRequest
var sdk = new FubonSDK();
var result = sdk.Login("Your ID", "Your Password", "Your Cert Path", "Your Cert Password");
sdk.InitRealtime(); // 建立行情連線
var rest = sdk.MarketData.RestClient.FutureOption;
var daily = await rest.Historical.Daily("TXF", new DailyRequest(new DateTime(2026,10,2), TradeSession.AfterHours, "1!"));
var daily_cont = daily.Content.ReadAsStringAsync().Result;
Console.WriteLine(daily_cont);
Response Body:
{
"date": "2026-10-02",
"product": "TXF",
"exchange": "TAIFEX",
"session": "AFTERHOURS",
"contractMonth": "202610",
"data": [
{
"contractMonth": "202610",
"strikePrice": null,
"callPut": null,
"exchange": "TAIFEX",
"openPrice": 48622,
"highPrice": 48661,
"lowPrice": 48210,
"closePrice": 48475,
"change": -223,
"changePercent": -0.46,
"volume": 37554,
"volumeSpread": null,
"openInterest": null,
"settlementPrice": null
}
]
}
info
'*' 表示必揭示欄位。