使用Python对接全球金融市场API:获取马来西亚、印度等多国实时数据

使用Python对接全球金融市场API:获取多国实时数据

一、StockTV API简介

StockTV API提供全球股票、外汇、期货、加密货币的实时行情数据,覆盖多个国家市场,包括马来西亚、印度、越南、日本、美国等。其核心优势如下:

  • 不限请求次数,适合高频数据抓取与监控
  • WebSocket低延迟推送,毫秒级实时行情更新
  • REST API响应快,平均响应时间小于200ms
  • 多国数据支持,新兴市场数据覆盖全面

二、准备工作

1. 获取API Key

联系Telegram客服获取测试Key,免费试用期内包含所有接口权限。

2. Python环境配置

pip install requests websockets pandas

三、HTTP API对接示例

1. 获取马来西亚股票列表

import requests
import pandas as pd

API_KEY = "YOUR_KEY"
url = "https://api.stocktv.top/stock/stocks"
params = {
    "countryId": 42,  # 马来西亚countryId
    "pageSize": 10,
    "page": 1,
    "key": API_KEY
}

response = requests.get(url, params=params)
data = response.json()

# 转换为DataFrame
df = pd.DataFrame(data['data']['records'])
print(df[['symbol', 'name', 'last', 'chgPct']])

2. 查询印度Nifty50指数

url = "https://api.stocktv.top/stock/indicesById"
params = {
    "id": 17940,  # Nifty50指数ID
    "key": API_KEY
}

data = requests.get(url, params).json()
index_data = data['data'][0]
print(f"{index_data['name']} 最新价: {index_data['last']} 涨跌幅: {index_data['chgPct']}%")

3. 获取越南股票历史K线

url = "https://api.stocktv.top/stock/kline"
params = {
    "pid": 7310,        # 股票产品ID
    "interval": "PT1H", # 1小时粒度
    "key": API_KEY
}

klines = requests.get(url, params).json()['data']
df_kline = pd.DataFrame(klines)
df_kline['time'] = pd.to_datetime(df_kline['time'], unit='ms')  # 时间戳转换

四、WebSocket实时推送

import asyncio
import websockets
import json

async def stock_websocket():
    uri = f"wss://ws-api.stocktv.top/connect?key={API_KEY}"
    
    async with websockets.connect(uri) as ws:
        # 心跳维持(每30秒)
        asyncio.create_task(send_heartbeat(ws))
        
        while True:
            msg = await ws.recv()
            data = json.loads(msg)
            handle_realtime_data(data)

async def send_heartbeat(ws):
    while True:
        await asyncio.sleep(30)
        await ws.send('{"action":"ping"}')

def handle_realtime_data(data):
    print(f"""实时行情更新:
    代码: {data['pid']}
    最新价: {data['last_numeric']}
    涨跌幅: {data['pcp']}%
    成交量: {data['turnover_numeric']}""")

# 启动监听
asyncio.get_event_loop().run_until_complete(stock_websocket())

五、高级技巧

1. 多国数据并行获取

from concurrent.futures import ThreadPoolExecutor

countries = [
    {'name': 'Malaysia', 'id': 42},
    {'name': 'India', 'id': 14},
    {'name': 'Vietnam', 'id': 58}
]

def fetch_market(country_id):
    params = {'countryId': country_id, 'key': API_KEY}
    return requests.get("https://api.stocktv.top/stock/stocks", params).json()

with ThreadPoolExecutor() as executor:
    results = executor.map(fetch_market, [c['id'] for c in countries])

2. 数据存储方案

import sqlite3

def save_to_db(data):
    conn = sqlite3.connect('stocktv.db')
    df = pd.DataFrame(data)
    df.to_sql('realtime_quotes', conn, if_exists='append', index=False)

3. 异常处理

from tenacity import retry, stop_after_attempt

@retry(stop=stop_after_attempt(3))
def safe_api_call(url, params):
    try:
        return requests.get(url, params, timeout=5)
    except requests.exceptions.RequestException as e:
        print(f"API请求失败: {str(e)}")
        raise

六、应用场景

  1. 量化交易系统:实时获取东南亚新兴市场数据
  2. 跨市场监控看板:同时展示多国指数行情
  3. 财经APP开发:快速搭建行情模块
  4. 基本面分析:获取公司财务数据接口

七、常见问题

Q1 如何获取其他国家countryId?

  • 调用 /stock/stocks 接口查看返回的countryId字段

Q2 WebSocket如何订阅特定股票?

  • 连接后发送格式:{"action":"subscribe", "pid":[股票ID列表]}

Q3 历史数据获取限制?

  • K线数据默认返回最近3个月,可通过start/end参数指定时间范围
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值