秘魯股票API接入指南:如何通過RESTful API獲取BVL實時行情與歷史數據

引言
在全球資產配置的浪潮中,拉丁美洲市場正逐漸成為投資者關注的焦點。作為南美洲重要的經濟體之一,秘魯的利馬證券交易所(BVL)匯聚了眾多礦業、金融和消費行業的優質上市公司。然而,由於數據獲取渠道有限,許多開發者對這片"安第斯價值窪地"望而卻步。本文將手把手教你如何使用iTick API,通過簡潔的RESTful接口輕鬆獲取秘魯股票的實時行情與歷史K線數據,為你的量化分析和投資決策提供堅實的數據基礎。
一、為什麼選擇iTick接入秘魯市場?
在開始代碼實戰之前,我們先來了解一下iTick的優勢。作為專業的金融數據服務商,iTick提供了覆蓋全球多個市場的API接口,包括外匯、股票、期貨、基金等多種資產類別。其特色在於:
- 多市場覆蓋:支持美股、港股、A股、全球外匯、貴金屬、指數以及加密貨幣等。對於拉丁美洲市場,iTick的覆蓋範圍包括墨西哥、巴西、秘魯、阿根廷等主要經濟體,並且支持其他地區股票的定制化接入。
- 雙接口模式:提供REST API和WebSocket API,分別滿足批量數據查詢和實時低延遲數據流的需求。
- 開發者友好:統一的接口風格、簡潔的文檔和豐富的代碼示例,幫助開發者快速上手。
- 靈活定制:對於機構用戶和專業用戶,支持定制化數據解決方案。
二、準備工作:獲取API憑證
在開始調用接口之前,你需要在 iTick官網 註冊賬號並獲取API Token。這是所有請求的身份標識,需要在HTTP頭中傳遞。
# 你的API憑證
API_TOKEN = "your_token_here" # 替換為你在官網獲取的實際Token
BASE_URL = "https://api.itick.org"
三、REST API基礎:請求規範
iTick的REST API採用標準的HTTPS GET請求方式,基址為https://api.itick.org。所有請求都需要在headers中添加兩個關鍵字段:
headers = {
"accept": "application/json",
"token": API_TOKEN
}
響應數據統一為JSON格式,便於解析和處理。成功響應通常包含code字段(0表示成功)和data字段(實際數據內容)。
四、實戰一:獲取秘魯股票實時報價
實時報價是最基礎也最常用的接口。通過/stock/quote端點,我們可以獲取股票的當前最新價、開盤價、最高價、最低價、漲跌幅等關鍵信息。
接口說明
- 端點:
/stock/quote - 方法:GET
- 參數:
region:市場代碼(對於秘魯,代碼為"PE")code:股票代碼(如秘魯南方銅業為"SCCO")
代碼示例
import requests
def get_stock_quote(region, code):
"""
獲取股票實時報價
Args:
region: 市場代碼"PE"
code: 股票代碼,如"SCCO"(南方銅業)
Returns:
包含報價信息的字典
"""
url = f"{BASE_URL}/stock/quote"
params = {
"region": region,
"code": code
}
headers = {
"accept": "application/json",
"token": API_TOKEN
}
try:
response = requests.get(url, headers=headers, params=params)
response.raise_for_status()
data = response.json()
if data.get("code") == 0: # 返回碼0表示成功
quote = data.get("data", {})
print(f"股票: {quote.get('s', 'N/A')}")
print(f"最新價: {quote.get('ld', 'N/A')}")
print(f"開盤價: {quote.get('o', 'N/A')}")
print(f"最高價: {quote.get('h', 'N/A')}")
print(f"最低價: {quote.get('l', 'N/A')}")
print(f"漲跌額: {quote.get('ch', 'N/A')}")
print(f"漲跌幅: {quote.get('chp', 'N/A')}%")
print(f"成交量: {quote.get('v', 'N/A')}")
return quote
else:
print(f"API錯誤: {data.get('msg', 'Unknown error')}")
return None
except requests.exceptions.RequestException as e:
print(f"請求失敗: {e}")
return None
# 使用示例:獲取秘魯南方銅業實時報價
quote_data = get_stock_quote("PE", "SCCO")
這個示例代碼演示瞭如何構建請求、發送HTTP GET請求並解析返回的JSON數據。根據iTick官方文檔的示例,響應中的ld字段代表最新價(last price),ch代表漲跌額(change),chp代表漲跌幅(change percent)。
五、實戰二:獲取秘魯股票歷史K線數據
對於量化分析和策略回測,歷史K線數據是不可或缺的。iTick的/stock/kline接口提供了靈活的歷史數據查詢功能,支持多種時間週期。
接口說明
- 端點:
/stock/kline - 方法:GET
- 參數:
region:市場代碼code:股票代碼kType:K線類型(1=分鐘線,2=5分鐘,3=15分鐘,4=30分鐘,5=60分鐘,6=日線,7=周線,8=月線等)limit:返回的K線數量et:可選,截止時間戳
代碼示例
import requests
import pandas as pd
from datetime import datetime
def get_stock_kline(region, code, kType, limit=100, et=None):
"""
獲取股票歷史K線數據
Args:
region: 市場代碼
code: 股票代碼
kType: K線類型(1-分鐘線,2-5分鐘,3-15分鐘,4-30分鐘,5-60分鐘,8-日線,9-周線,10-月線)
limit: 返回K線數量
et: 截止時間戳(可選)
Returns:
Pandas DataFrame包含K線數據
"""
url = f"{BASE_URL}/stock/kline"
params = {
"region": region,
"code": code,
"kType": kType,
"limit": limit
}
if et:
params["et"] = et
headers = {
"accept": "application/json",
"token": API_TOKEN
}
try:
response = requests.get(url, headers=headers, params=params)
response.raise_for_status()
data = response.json()
if data.get("code") == 0:
kline_list = data.get("data", [])
if not kline_list:
print("未獲取到K線數據")
return None
# 轉換為DataFrame便於分析
df = pd.DataFrame(kline_list)
# 重命名字段為更直觀的名稱
df.rename(columns={
't': 'timestamp',
'o': 'open',
'h': 'high',
'l': 'low',
'c': 'close',
'v': 'volume'
}, inplace=True)
# 轉換時間戳為可讀格式
df['datetime'] = pd.to_datetime(df['timestamp'], unit='ms')
# 按時間排序
df.sort_values('timestamp', inplace=True)
print(f"獲取到 {len(df)} 條K線數據")
print(f"時間範圍: {df['datetime'].min()} 至 {df['datetime'].max()}")
return df
else:
print(f"API錯誤: {data.get('msg', 'Unknown error')}")
return None
except requests.exceptions.RequestException as e:
print(f"請求失敗: {e}")
return None
# 使用示例:獲取秘魯某股票最近30條日線數據
df = get_stock_kline("PE", "SCCO", kType=8, limit=30)
if df is not None:
# 顯示前5條數據
print("\n前5條數據預覽:")
print(df[['datetime', 'open', 'high', 'low', 'close', 'volume']].head())
# 簡單的統計分析
print(f"\n收盤價統計:")
print(f"最新收盤價: {df['close'].iloc[-1]:.2f}")
print(f"期間最高價: {df['high'].max():.2f}")
print(f"期間最低價: {df['low'].min():.2f}")
print(f"平均收盤價: {df['close'].mean():.2f}")
這個示例不僅獲取了K線數據,還將其轉換為Pandas DataFrame格式,便於後續的數據分析和可視化。根據iTick的API文檔,K線響應中的字段包括t(時間戳)、o(開盤)、h(最高)、l(最低)、c(收盤)和v(成交量)。
六、實戰三:批量獲取多隻股票數據
如果你需要同時監控多隻秘魯股票,iTick還提供了批量接口,可以一次性獲取多個標的的數據,大大提高效率。
批量實時報價示例
def get_batch_quotes(region, codes):
"""
批量獲取多隻股票實時報價
Args:
region: 市場代碼
codes: 股票代碼列表,如["SCCO", "BVN", "VOLCABC1"]
Returns:
包含多隻股票報價的字典
"""
# 將代碼列表轉換為逗號分隔的字符串
codes_str = ",".join(codes)
url = f"{BASE_URL}/stock/quotes" # 注意這裡是quotes(複數)
params = {
"region": region,
"codes": codes_str
}
headers = {
"accept": "application/json",
"token": API_TOKEN
}
try:
response = requests.get(url, headers=headers, params=params)
response.raise_for_status()
data = response.json()
if data.get("code") == 0:
quotes_dict = data.get("data", {})
# 打印每隻股票的報價
for code, quote in quotes_dict.items():
print(f"\n{code}:")
print(f" 最新價: {quote.get('ld', 'N/A')}")
print(f" 漲跌幅: {quote.get('chp', 'N/A')}%")
return quotes_dict
else:
print(f"API錯誤: {data.get('msg', 'Unknown error')}")
return None
except requests.exceptions.RequestException as e:
print(f"請求失敗: {e}")
return None
# 使用示例:批量獲取多隻秘魯股票報價
# 注意:股票代碼需要與iTick確認正確格式
batch_quotes = get_batch_quotes("PE", ["SCCO", "BVN", "VOLCABC1"])
七、常見問題與注意事項
1. 股票代碼的確認
對於秘魯市場的股票代碼格式,可參考 iTick 產品清單 建議聯繫iTick客服獲取準確信息(可通過Telegram: iticksupport 或 WhatsApp: +852 59046663 聯繫)。
2. API限流與用量
iTick提供免費套餐,適合個人量化開發者使用。但在生產環境中,需要注意API的調用頻率限制,避免因過量請求被限制訪問。
3. 數據延遲與準確性
實時行情數據通常有毫秒級延遲,對於高頻交易場景,建議使用WebSocket接口獲取實時推送。對於歷史數據的準確性,建議通過多個數據源交叉驗證。
4. 錯誤處理
在實際開發中,應當加入完善的錯誤處理機制,包括網絡超時、HTTP錯誤碼、API返回錯誤碼等情況的處理。
結語
通過本文的介紹,相信你已經掌握了使用iTick API獲取秘魯股票實時行情和歷史數據的方法。雖然秘魯市場相對小眾,但其豐富的礦產資源優勢和穩定的經濟增長潛力,使其成為全球資產配置中不可忽視的一環。借助iTick這樣專業的金融數據接口,開發者可以打破地域限制,輕鬆接入全球新興市場的數據洪流,構建自己的量化分析和投資決策系統。
無論你是量化交易員、金融科技開發者,還是對拉美市場感興趣的投資者,現在就開始你的秘魯股票數據探索之旅吧!記得先從iTick官網 獲取API Token,然後運行本文的代碼示例,體驗從利馬證券交易所獲取實時數據的便捷與高效。
延伸閱讀: