義大利股票 API 接入指南:使用 iTick 獲取即時行情與歷史資料

在全球資產配置需求日益增長的 2026 年,義大利作為歐元區第三大經濟體,其股市價值愈發凸顯。米蘭證券交易所(Borsa Italiana)匯聚了眾多全球知名企業,從輪胎巨頭倍耐力到豪華汽車品牌法拉利,從能源龍頭埃尼到銀行翹楚聯合聖保羅,義大利股票正成為量化交易者與跨境投資者的重要配置標的。
本文將為您詳細講解如何透過 iTick API 一站式接入義大利股票市場,獲取即時行情、歷史 K 線及深度盤口資料,並提供完整的 Python 實戰程式碼,助您快速建構義大利股市資料分析系統。
一、為什麼選擇 iTick 接入義大利股市?
在比較了主流金融資料 API 服務後,iTick 憑藉以下優勢成為接入義大利市場的理想選擇:
| 比較維度 | iTick API | 傳統資料來源 | 免費公共介面 |
|---|---|---|---|
| 義大利市場覆蓋 | 米蘭交易所全部股票 | 通常僅指數成分股 | 極少或無 |
| 即時延遲 | <50ms (WebSocket) | 100-500ms | 15 分鐘延遲 |
| 歷史資料長度 | 超過 15 年 | 約 10 年 | 僅 1-2 年 |
| 協議支援 | REST + WebSocket + FIX | 通常僅 REST | 僅 REST |
| 免費方案 | 基礎行情無限呼叫 | 無免費方案 | 有次數限制 |
| 多資產支援 | 股票/外匯/期貨/基金一站式 | 通常僅股票 | 僅股票 |
iTick 的核心優勢
- 真正的歐洲市場覆蓋:iTick 支援義大利米蘭證券交易所全部股票的即時與歷史資料,無論藍籌股還是中小型股票,皆可透過統一的 API 介面獲取。
- 開發者友善設計:提供標準易用的 REST API 與 WebSocket 協議,文件簡潔清晰,並附各語言範例程式碼,幫助開發者快速接入。
- 超低延遲即時資料:專業級資料流,延遲 <50ms,支援 WebSocket 協議實現真正的即時推送,每秒更新頻率,捕捉每一個市場波動。
- 靈活的資料類型:支援成交(tick)、報價(quote)、盤口(depth)等多種資料類型,滿足量化交易的不同需求。
- 免費方案足夠使用:新用戶可享免費方案,包含基礎行情無限呼叫與 WebSocket 連線支援,足以滿足個人學習與輕量級開發需求。
二、環境準備
在開始接入之前,需完成以下準備工作:
1. 註冊 iTick 帳號並取得 API Token
訪問 iTick 官網 註冊帳號,30 秒完成註冊,無需信用卡。在控制台即可找到您的專屬 API Token。
2. 安裝 Python 依賴套件
本教學需要安裝 requests 與 websocket-client 套件:
pip install requests websocket-client pandas matplotlib
三、義大利股票即時行情接入(WebSocket)
對於量化交易系統,即時性是關鍵。WebSocket 協議能夠實現低延遲的資料推送,是建構高頻交易系統的理想選擇。
WebSocket API 參數說明
WebSocket 連線地址:wss://api.itick.org/stock
連線認證:在 HTTP Header 中傳遞 token 參數
訂閱請求格式:
| 參數 | 描述 | 類型 | 必填 | 範例 |
|---|---|---|---|---|
| ac | 操作類型,固定為 "subscribe" | String | 是 | "subscribe" |
| params | 標的代碼,支援多個,用逗號分隔。格式:code$IT | String | 是 | "ENI$IT,FERR$IT,ISP$IT" |
| types | 訂閱類型,支援 "tick"(成交)、"quote"(報價)、"depth"(盤口) | String | 是 | "tick,quote,depth" |
Python 實戰:訂閱義大利股票即時資料
以下程式碼範例訂閱義大利三家代表性公司的即時行情:
- Eni (ENI$IT) - 義大利能源巨頭
- Ferrari (FERR$IT) - 豪華跑車製造商
- Intesa Sanpaolo (ISP$IT) - 義大利最大銀行之一
import websocket
import json
import threading
import time
# WebSocket 連線地址與 token
WS_URL = "wss://api.itick.org/stock"
API_TOKEN = "your_api_token_here" # 請替換為您的實際 Token
def on_message(ws, message):
"""處理接收到的訊息"""
data = json.loads(message)
# 處理連線成功的訊息
if data.get("code") == 1 and data.get("msg") == "Connected Successfully":
print("✅ WebSocket 連線成功,等待認證...")
# 處理認證結果
elif data.get("resAc") == "auth":
if data.get("code") == 1:
print("✅ 認證成功,準備訂閱資料...")
subscribe(ws)
else:
print("❌ 認證失敗")
ws.close()
# 處理訂閱結果
elif data.get("resAc") == "subscribe":
if data.get("code") == 1:
print("✅ 訂閱成功")
else:
print(f"❌ 訂閱失敗: {data.get('msg')}")
# 處理市場資料
elif data.get("data"):
market_data = data["data"]
data_type = market_data.get("type")
symbol = market_data.get("s")
if data_type == "quote":
print(f"[{symbol}] 最新價: {market_data.get('ld')} EUR | "
f"漲跌幅: {market_data.get('chp')}% | "
f"成交量: {market_data.get('v')}")
elif data_type == "tick":
print(f"[{symbol}] 成交: {market_data.get('ld')} EUR | "
f"時間: {time.strftime('%H:%M:%S', time.localtime(market_data.get('t')/1000))}")
elif data_type == "depth":
bids = market_data.get("b", [])[:3] # 買三檔
asks = market_data.get("a", [])[:3] # 賣三檔
print(f"[{symbol}] 買盤: {bids} | 賣盤: {asks}")
def on_error(ws, error):
"""處理錯誤"""
print(f"❌ WebSocket 錯誤: {error}")
def on_close(ws, close_status_code, close_msg):
"""連線關閉回調"""
print(f"🔌 WebSocket 連線關閉: {close_msg}")
def on_open(ws):
"""連線建立後的回調"""
print("🌐 WebSocket 連線已開啟")
def subscribe(ws):
"""訂閱義大利股票行情資料"""
subscribe_msg = {
"ac": "subscribe",
"params": "ENI$IT,FERR$IT,ISP$IT", # 義大利股票代碼:埃尼、法拉利、聯合聖保羅銀行
"types": "tick,quote,depth" # 訂閱成交、報價與盤口資料
}
ws.send(json.dumps(subscribe_msg))
print(f"📤 訂閱請求已發送: {subscribe_msg['params']}")
def send_ping(ws):
"""定期發送心跳包維持連線"""
while True:
time.sleep(30) # 每 30 秒發送一次心跳
ping_msg = {
"ac": "ping",
"params": str(int(time.time() * 1000))
}
ws.send(json.dumps(ping_msg))
print("💓 心跳已發送")
if __name__ == "__main__":
# 建立 WebSocket 連線,透過 header 傳遞 token
ws = websocket.WebSocketApp(
WS_URL,
header={"token": API_TOKEN},
on_open=on_open,
on_message=on_message,
on_error=on_error,
on_close=on_close
)
# 在獨立執行緒中啟動心跳機制
ping_thread = threading.Thread(target=send_ping, args=(ws,))
ping_thread.daemon = True
ping_thread.start()
print("🚀 啟動 WebSocket 連線...")
# 啟動 WebSocket 連線
ws.run_forever()
四、歷史資料接入(REST API)
歷史資料是策略回測的基礎。iTick 提供 REST API 查詢 K 線資料,支援從分鐘線到月線的多週期。
REST API 參數說明
請求 URL:GET https://api.itick.org/stock/kline
| 參數 | 描述 | 類型 | 必填 | 範例 |
|---|---|---|---|---|
| region | 市場代碼,義大利為 "IT" | String | 是 | "IT" |
| code | 股票代碼 | String | 是 | "ENI" |
| kType | K 線類型:1-分鐘,2-5 分鐘,3-15 分鐘,4-30 分鐘,5-60 分鐘,8-日線,9-週線,10-月線 | Integer | 是 | 8 |
| limit | 獲取 K 線數量 | Integer | 是 | 100 |
| et | 截止時間戳(毫秒),預設為當前時間 | Integer | 否 | 1741680000000 |
Python 實戰:獲取義大利股票歷史 K 線
以下程式碼獲取義大利埃尼公司(ENI)的日線歷史資料,並進行簡單視覺化:
import requests
import pandas as pd
import matplotlib.pyplot as plt
from datetime import datetime
def get_italian_stock_kline(symbol, ktype=8, limit=100):
"""
獲取義大利股票歷史 K 線資料
:param symbol: 股票代碼,如 "ENI"
:param ktype: K 線類型,8 為日線
:param limit: 獲取 K 線數量
:return: DataFrame 格式的 K 線資料
"""
url = "https://api.itick.org/stock/kline"
params = {
"region": "IT", # 義大利市場代碼
"code": symbol,
"kType": ktype,
"limit": limit
}
headers = {
"accept": "application/json",
"token": "your_api_token_here" # 請替換為您的實際 Token
}
try:
response = requests.get(url, params=params, headers=headers)
result = response.json()
if result.get("code") == 0: # 0 表示成功
kline_data = result.get("data", [])
if not kline_data:
print(f"❌ 未獲取到 {symbol} 的資料")
return None
# 轉換為 DataFrame
df = pd.DataFrame(kline_data)
# 轉換時間戳並設定索引
df['datetime'] = pd.to_datetime(df['t'], unit='ms')
df.set_index('datetime', inplace=True)
# 重新命名欄位
df.rename(columns={
'o': 'open', 'h': 'high', 'l': 'low',
'c': 'close', 'v': 'volume', 'tu': 'turnover'
}, inplace=True)
# 轉換為數值型態
for col in ['open', 'high', 'low', 'close', 'volume', 'turnover']:
if col in df.columns:
df[col] = pd.to_numeric(df[col])
print(f"✅ 獲取到 {len(df)} 條 K 線資料")
print(f"資料範圍: {df.index[0]} 至 {df.index[-1]}")
# 顯示最新 5 條資料
print("\n📊 最新 5 條 K 線資料:")
print(df[['open', 'high', 'low', 'close', 'volume']].tail())
return df
else:
print(f"❌ API 錯誤: {result.get('msg', '未知錯誤')}")
return None
except Exception as e:
print(f"❌ 請求異常: {str(e)}")
return None
def plot_stock_data(df, symbol):
"""繪製股票 K 線收盤價走勢"""
if df is None or df.empty:
return
plt.figure(figsize=(14, 7))
plt.plot(df.index, df['close'], 'b-', linewidth=1.5, label='收盤價')
plt.title(f'{symbol} 收盤價走勢圖', fontsize=16)
plt.xlabel('日期')
plt.ylabel('價格 (EUR)')
plt.grid(True, alpha=0.3)
plt.legend()
# 格式化 x 軸日期
plt.gcf().autofmt_xdate()
# 加入簡單移動平均線
df['MA20'] = df['close'].rolling(window=20).mean()
plt.plot(df.index, df['MA20'], 'r--', linewidth=1, label='20日均線')
plt.legend()
plt.tight_layout()
plt.show()
# 獲取埃尼公司最近 100 個交易日資料
eni_df = get_italian_stock_kline("ENI", ktype=8, limit=100)
if eni_df is not None:
# 繪製走勢圖
plot_stock_data(eni_df, "ENI (埃尼)")
# 計算簡單統計指標
print(f"\n📈 統計指標:")
print(f"最新收盤價: {eni_df['close'].iloc[-1]:.3f} EUR")
print(f"期間最高價: {eni_df['high'].max():.3f} EUR")
print(f"期間最低價: {eni_df['low'].min():.3f} EUR")
print(f"平均成交量: {eni_df['volume'].mean():.0f} 股")
print(f"期間漲跌幅: {((eni_df['close'].iloc[-1] / eni_df['close'].iloc[0] - 1) * 100):.2f}%")
五、義大利市場實用指南
1. 股票代碼格式
義大利市場股票採用本地代碼,在 iTick API 中透過 region=IT 參數指定市場。WebSocket 訂閱時,格式為 代碼$IT。
2. 主要義大利股票代碼參考
| 公司名稱 | 股票代碼 | 所屬板塊 | ISIN(供參考) |
|---|---|---|---|
| Eni (埃尼) | ENI | 能源 | IT0003132476 |
| Ferrari (法拉利) | FERR | 汽車 | NL0011585146 |
| Intesa Sanpaolo (聯合聖保羅銀行) | ISP | 金融 | IT0000072618 |
| Unicredit (裕信銀行) | UCG | 金融 | IT0005239360 |
| Enel (義大利國家電力) | ENEL | 公用事業 | IT0003128367 |
| Stellantis | STLA | 汽車 | NL00150001Q9 |
| Generali (忠利保險) | G | 保險 | IT0000062072 |
3. 交易時間
義大利股市交易時間(米蘭證券交易所):
- 開盤時間:當地時間 9:00
- 收盤時間:當地時間 17:30
- 對應北京時間:
- 夏令時(3 月底–10 月底):15:00 – 23:30
- 冬令時:16:00 – 00:30(次日)
4. 常見問題
Q:免費方案有哪些限制?
A:免費方案包含基礎即時行情無限呼叫、歷史日線資料存取與 WebSocket 連線支援,對於個人學習與輕量級開發完全足夠。
Q:如何獲取更長時間的歷史資料?
A:付費方案支援超過 15 年的完整歷史資料,適合專業回測需求。
Q:WebSocket 連線不穩定怎麼辦?
A:程式碼中已包含心跳機制(每 30 秒發送 ping),可有效維持連線穩定。如仍遇斷線,可實作自動重連邏輯。
六、總結與下一步
透過本文詳細教學,您已掌握如何使用 iTick API 接入義大利股票市場的完整流程:
- WebSocket 即時行情:低延遲訂閱義大利股票的成交、報價與盤口資料,適用於高頻交易與即時監控
- REST API 歷史資料:獲取多週期 K 線資料,支援策略回測與趨勢分析
iTick 的義大利股票資料服務具備以下核心優勢:
- 全面覆蓋:支援米蘭證券交易所全部股票
- 低延遲:WebSocket 延遲 <50ms,滿足量化交易需求
- 開發者友善:官方文件完善,對接極簡
- 性價比高:免費版夠用,付費版實惠
現在就訪問 iTick 官網 註冊帳號,開始您的義大利股市資料之旅吧!
延伸閱讀: