美股、加拿大、墨西哥、秘鲁等股票实时行情数据获取指南

iTick 提供覆盖全球的外汇、股票、期货、基金等实时行情数据,支持实时行情、技术分析、公司信息等多种功能。我们将探讨如何利用其统一的接口,高效接入纽约(NYSE/NASDAQ)、多伦多(TSX)、墨西哥城(BMV)以及利马(BVL)的股票数据。
美股、加拿大、墨西哥、秘鲁等股票实时行情数据.png

一、美洲市场数据接入概览

在开始编码之前,我们需要了解不同市场的特性和接入难点:

美股:数据源最丰富,但合规要求严格。对于实时数据,通常需要处理两大交易所集团(NYSE/NASDAQ)的数据,且对低延迟要求极高。

加拿大:主要由TMX集团运营(多伦多交易所)。获取 Consolidated 数据(如CBBO, CDF)往往需要专门的供应商。

墨西哥与秘鲁 (MEX/PERU):作为拉丁美洲市场,数据格式和传输稳定性是需要关注的重点,通常可以通过一些覆盖泛美地区的综合数据服务商获取

核心接入方式:

  1. REST API:通过 HTTP GET 请求获取单次数据快照,适合查询个股实时报价、历史 K 线等 。
  2. WebSocket:建立长连接,实现数据的实时、低延迟推送,是交易型应用的首选 。

二、美股实时行情 (REST API)

美股是全球金融中心,数据需求最旺盛。通过 iTick,我们可以轻松获取其毫秒级的实时报价。

import requests

# 配置区域
API_TOKEN = '你的_iTick_Token'  # 替换为你的真实Token
BASE_URL = 'https://api.itick.org'

def get_us_stock_quote(symbol):
    """
    获取美股实时报价
    :param symbol: 股票代码,如 'AAPL'
    """
    headers = {
        'accept': 'application/json',
        'token': API_TOKEN
    }
    # 美国市场region固定为US
    url = f'{BASE_URL}/stock/quote?region=US&code={symbol}'

    try:
        response = requests.get(url, headers=headers, timeout=10)
        if response.status_code == 200:
            data = response.json()
            quote = data.get('data', {})
            return quote
        else:
            print(f"请求失败 | 状态码: {response.status_code}")
            return None
    except Exception as e:
        print(f"网络异常: {str(e)}")
        return None

# 实战调用:苹果公司 AAPL
if __name__ == '__main__':
    quote = get_us_stock_quote('AAPL')
    if quote:
        print("=" * 60)
        print("美国股市 (NASDAQ) - 实时行情")
        print("=" * 60)
        print(f"股票名称: {quote.get('s', 'N/A')}")  # 字段's'通常为代码
        print(f"最新价: {quote.get('ld', 'N/A')} USD")  # ld 代表最新价 (last price)
        print(f"涨跌幅: {quote.get('chp', 'N/A')}%")    # chp 代表涨跌幅百分比
        print(f"成交量: {quote.get('v', '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('t', 'N/A')}")
    else:
        print("未获取到数据,请检查Token或网络")

三、加拿大市场(TSX)数据获取

加拿大市场与美股关联紧密,尤其在能源和矿业领域。iTick 对多伦多证券交易所(TSX)提供了完善的支持 。

1. REST API 获取 TSX 实时报价

以加拿大市值最大的金融股——加拿大皇家银行(RY)为例。

# 函数定义与 get_us_stock_quote 类似,只需修改 region 和 symbol
def get_ca_stock_quote(symbol):
    headers = {
        'accept': 'application/json',
        'token': API_TOKEN
    }
    # 加拿大市场region固定为CA
    url = f'{BASE_URL}/stock/quote?region=CA&code={symbol}'
    # ... (后续代码与美股示例相同,处理响应)
    # 返回的数据中,价格默认为加元 (CAD)

2. WebSocket 实时推送:构建 TSX 监控流水线

REST API 适合定时查询,而 WebSocket 能让你实时监控市场变化 。下面的示例展示了如何订阅多只 TSX 股票的实时报价和逐笔成交。

import websocket
import json
import threading
import time

WS_URL = "wss://api.itick.org/stock"
API_TOKEN = '你的_iTick_Token'

class TSXMonitor:
    def on_message(self, ws, message):
        try:
            data = json.loads(message)
            if 'data' in data:
                payload = data['data']
                symbol = payload.get('s')
                typ = payload.get('type')  # 数据类型:quote 或 tick
                if typ == 'quote':
                    print(f"[报价] {symbol}: 最新 {payload.get('ld')} CAD | 量 {payload.get('v')}")
                elif typ == 'tick':
                    print(f"[成交] {symbol}: 价 {payload.get('ld')} | 量 {payload.get('v')}")
        except Exception as e:
            print(f"解析错误: {e}")

    def on_open(self, ws):
        print("WebSocket 已连接,正在订阅 TSX 股票...")
        # 订阅格式:代码$市场region,类型:quote(报价)和 tick(成交)
        sub_msg = {
            "ac": "subscribe",
            "params": "RY$CA,ENB$CA,ABX$CA",  # 订阅加拿大皇家银行、安桥、巴里克黄金
            "types": "quote,tick"
        }
        ws.send(json.dumps(sub_msg))

    def on_error(self, ws, error):
        print(f"错误: {error}")

    def on_close(self, ws, code, msg):
        print("连接关闭")

    def start(self):
        headers = {"token": API_TOKEN}
        self.ws = websocket.WebSocketApp(
            WS_URL, header=headers,
            on_open=self.on_open, on_message=self.on_message,
            on_error=self.on_error, on_close=self.on_close
        )

        # 心跳包,防止连接断开 (iTick 要求定期发送 ping)
        def heartbeat():
            while True:
                time.sleep(30)
                if self.ws.sock and self.ws.sock.connected:
                    self.ws.send(json.dumps({"ac": "ping", "params": str(int(time.time()*1000))}))

        threading.Thread(target=heartbeat, daemon=True).start()
        self.ws.run_forever()

if __name__ == '__main__':
    monitor = TSXMonitor()
    monitor.start()

技术要点

  • 参数格式证券代码$市场代码 (例如 RY$CA),与美股 AAPL$US 的格式完全一致。
  • 订阅类型quote(报价)、tick(成交)、depth(盘口),可自由组合。
  • 心跳机制:每 30 秒发送一次 ping 以维持连接活跃。

四、墨西哥与秘鲁新兴市场

1. 墨西哥市场 (Mexico)

墨西哥证券交易所(BMV)是拉丁美洲重要的资本市场。iTick 使用 region=MX 来标识墨西哥市场 。

def get_mx_stock_quote(symbol):
    headers = {
        'accept': 'application/json',
        'token': API_TOKEN
    }
    # 墨西哥市场region固定为MX
    url = f'{BASE_URL}/stock/quote?region=MX&code={symbol}'

    response = requests.get(url, headers=headers)
    if response.status_code == 200:
        data = response.json()
        quote = data.get('data', {})
        print(f"墨西哥股票 {symbol}: {quote.get('ld')} MXN")  # 价格单位为墨西哥比索
        return quote
    else:
        print(f"请求失败: {response.text}")
        return None

# 调用示例:获取墨西哥美洲电信 (AMXL) 的实时行情
# get_mx_stock_quote('AMXL')

2. 秘鲁市场 (Peru)

对于秘鲁利马证券交易所(BVL),其 region 代码为 PE 来标识秘鲁市场。

# 秘鲁市场的 region 为 'PE'
def get_pe_stock_quote(symbol):
    headers = {
        'accept': 'application/json',
        'token': API_TOKEN
    }
    url = f'{BASE_URL}/stock/quote?region=PE&code={symbol}'

    response = requests.get(url, headers=headers)
    if response.status_code == 200:
        data = response.json()
        # 处理数据...
        print(data)
    else:
        print(f"无法获取秘鲁市场数据,请确认 region 代码和 symbol。错误: {response.text}")

# 尝试获取秘鲁信贷银行 (CREDITC1) 的数据
# get_pe_stock_quote('CREDITC1')

拉美市场开发者提示

  • 汇率处理:返回的价格是当地货币(墨西哥比索、秘鲁索尔),在展示给用户前,通常需要转换成美元或人民币,需要考虑引入实时汇率 API。
  • 确认代码:在实盘使用前,务必通过 iTick 的 /symbol/list 接口 或官方文档,确认目标股票的确切代码和对应 region

五、总结:REST vs WebSocket 的选择

通过本文,我们看到了 iTick API 如何通过统一的 region 参数,优雅地解决了覆盖美洲四个主要市场的难题 。

  • REST API:简单直接,非常适合用于盘前扫描、定时获取持仓股的报价快照,或者回测时拉取历史 K 线 。
  • WebSocket:是构建实时盯盘面板、高频交易或算法交易系统的基础设施。iTick 的 WebSocket 接口提供了毫秒级的推送能力 。

无论你是想监控美股科技巨头的波动,还是挖掘加拿大能源股的分红机会,亦或是布局拉美新兴市场的增长潜力,iTick 都提供了一个统一、高效且对开发者友好的数据接入方案。希望这份指南能为你的全球资产配置之路提供坚实的数据基础。

参考文档:https://blog.itick.org/stock-api/itick-tsx-canada-stock-api-python-tutorial
GitHub 项目地址https://github.com/itick-org/

posted @ 2026-02-27 01:21  forexLable  阅读(5)  评论(0)    收藏  举报