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

  1. iTick
  2. 教程
秘魯股票API接入指南:如何通過RESTful API獲取BVL實時行情與歷史數據 - iTick
秘魯股票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,然後運行本文的代碼示例,體驗從利馬證券交易所獲取實時數據的便捷與高效。

延伸閱讀: