StockTV全球股票数据API对接实战:构建智能金融分析系统
一、StockTV API核心功能解析
StockTV作为覆盖200+国家证券市场的数据平台,其API提供三大核心模块的对接能力:
- 市场列表查询 - 获取指定国家的股票基础数据
- 个股详情检索 - 查询实时行情与技术指标
- 股票指数监控 - 跟踪大盘指数动态变化
数据字段价值解读(以马来西亚市场为例)
{
"id": 41602, // 唯一标识符(用于关联K线数据)
"symbol": "MDCH", // 股票代码(全球标准格式)
"last": 0.12, // 最新价(含自动汇率换算)
"chgPct": 0, // 涨跌幅(机构策略制定关键指标)
"technicalDay": "strong_sell", // AI技术分析信号(量化模型输入)
"fundamentalMarketCap": 202470000 // 基本面市值(价值投资参考)
}
二、开发环境搭建
1. 基础依赖安装
# 安装HTTP请求库与实时数据组件
pip install requests websocket-client
# 高性能缓存支持(可选)
pip install redis
2. API密钥配置
# config.py 安全存储密钥
API_KEY = "MY5975e1aeceed4245905b72dc9aee02fa" # 测试环境密钥
BASE_URL = "https://api.stocktv.top/stock"
三、核心功能实现代码
1. 市场列表分页查询模块
import requests
from config import API_KEY
def fetch_stock_list(country_id=42, page=1, page_size=10):
"""获取指定国家股票列表(支持分页)"""
params = {
"key": API_KEY,
"countryId": country_id,
"page": page,
"pageSize": page_size
}
response = requests.get(f"{BASE_URL}/stocks", params=params)
response.raise_for_status()
# 数据结构化处理
stocks = response.json()['data']['records']
return [{
'symbol': s['symbol'],
'name': s['name'],
'price': s['last'],
'change': f"{s['chgPct']}%",
'volume': s['volume']
} for s in stocks]
# 示例:获取马来西亚市场第一页股票
msia_stocks = fetch_stock_list()
print(f"马来西亚Top10股票:{msia_stocks}")
2. 个股实时行情查询
def get_stock_detail(pid):
"""根据股票PID获取深度数据"""
params = {"key": API_KEY, "id": pid}
response = requests.get(f"{BASE_URL}/queryStocks", params=params)
data = response.json()['data'][0]
# 构建技术面分析报告
tech_analysis = {
'day_trend': data['technicalDay'],
'hour_trend': data['technicalHour'],
'risk_level': "高风险" if data['performanceYtd'] < -10 else "中低风险"
}
return {
'symbol': data['symbol'],
'price': data['last'],
'52_week_high': data['high'],
'analyst_rating': tech_analysis
}
# 示例:查询PID为7310的股票
stock_detail = get_stock_detail(7310)
print(f"个股深度数据:{stock_detail}")
3. 股票指数实时监控
def monitor_indices(country_id=42):
"""获取指定国家大盘指数"""
params = {"key": API_KEY, "countryId": country_id}
response = requests.get(f"{BASE_URL}/indices", params=params)
indices = response.json()['data']
return [{
'index_name': idx['name'],
'current': idx['last'],
'change': idx['chg'],
'status': "开市中" if idx['isOpen'] else "已闭市"
} for idx in indices]
# 示例:监控马来西亚指数
market_indices = monitor_indices()
print(f"大盘指数:{market_indices}")
四、生产环境高级配置
1. 异常处理机制
from requests.exceptions import RequestException
import logging
# 配置日志记录
logging.basicConfig(filename='stock_api.log', level=logging.ERROR)
def safe_api_call(func):
"""API调用异常处理装饰器"""
def wrapper(*args, **kwargs):
try:
return func(*args, **kwargs)
except RequestException as e:
logging.error(f"API请求失败: {str(e)}")
return {"error": "数据服务暂不可用"}
return wrapper
# 使用装饰器增强稳定性
@safe_api_call
def get_stock_list_safe(country_id):
return fetch_stock_list(country_id)
2. 性能优化方案
import redis
from datetime import timedelta
# Redis缓存连接
cache = redis.Redis(host='localhost', port=6379, db=0)
def cached_stock_data(country_id):
"""带缓存的市场数据查询"""
cache_key = f"stock_list_{country_id}"
cached_data = cache.get(cache_key)
if not cached_data:
fresh_data = fetch_stock_list(country_id)
cache.setex(cache_key, timedelta(minutes=30), str(fresh_data))
return fresh_data
return eval(cached_data)
五、行业应用场景
1. 量化交易信号生成
def generate_trading_signal(stock_data):
"""基于技术指标生成交易信号"""
if stock_data['technicalDay'] == 'strong_buy':
return {"action": "买入", "confidence": 0.85}
elif stock_data['technicalWeek'] == 'strong_sell':
return {"action": "卖出", "confidence": 0.78}
return {"action": "持有", "confidence": 0.65}
2. 财经资讯自动播报
import pandas as pd
def create_market_report():
"""生成市场日报自动化模板"""
df = pd.DataFrame(fetch_stock_list())
report = f"""
## {pd.Timestamp.now().date()} 马来西亚股市日报
**涨幅前三**:
{df.nlargest(3, 'change').to_markdown()}
**交易量异动**:
{df.nlargest(3, 'volume').to_markdown()}
"""
return report
六、调试与错误排查指南
问题现象 | 可能原因 | 解决方案 |
---|---|---|
返回403错误 | API密钥失效 | 检查密钥有效期并联系StockTV更换 |
数据延迟超过5秒 | 本地网络抖动 | 启用WebSocket实时推送功能 |
分页数据重复 | 未处理时区差异 | 在请求头添加X-TimeZone: Asia/Kuala_Lumpur |
版权声明:本文示例代码遵循 StockTV API 使用条款,商业应用需获取正式授权。
技术咨询:联系StockTV开发者支持