对接印度股票指数API完整指南:从入门到实战
对接印度股票指数API完整指南:从入门到实战
快速获取印度股市行情数据,助力投资决策
印度作为全球增长最快的主要经济体之一,其股票市场受到越来越多投资者的关注。本文将详细介绍如何通过API对接印度主要股票指数(如Nifty 50和Sensex),提供实用的技术方案和代码示例。
一、印度股票市场概述
印度证券市场由孟买证券交易所(BSE) 和印度国家证券交易所(NSE) 主导,截至2024年总市值超5万亿美元,位列全球第四。其中,Nifty 50(代表NSE前50大公司)和Sensex(代表BSE前30大公司)是印度股市最受关注的两个基准指数。
印度股市交易时间为印度标准时(IST)周一至周五9:15-15:30,盘前阶段为8:00-9:00。了解这些基本信息对确定数据更新时间频率至关重要。
二、API接入准备工作
1. 获取API密钥
首先需要从数据服务商(如StockTV)获取API密钥:
- 联系官方Telegram(@stocktvpaopao)申请密钥
- 密钥格式通常类似:
MY4b781f618e3f43c4b055f25fa61941ad
- 所有API请求都需携带此密钥参数
2. 基础参数配置
印度市场的国家ID固定为14,两个主要交易所ID分别为:NSE(46) 和BSE(74)。
# 关键参数常量
API_KEY = "YOUR_API_KEY" # 替换为实际密钥
BASE_URL = "https://api.stocktv.top"
COUNTRY_ID = 14 # 印度国家ID
三、核心API接口详解
1. 获取指数实时数据
获取印度主要指数实时行情(包含Nifty 50、Sensex等):
接口地址:GET /stock/indices
请求参数:
参数 | 必选 | 说明 | 示例值 |
---|---|---|---|
countryId | 是 | 国家ID(印度为14) | 14 |
key | 是 | API密钥 | YOUR_KEY |
Python示例代码:
import requestsdef get_indian_indices():url = f"{BASE_URL}/stock/indices"params = {"countryId": COUNTRY_ID,"key": API_KEY}response = requests.get(url, params=params)if response.status_code == 200:data = response.json()return data["data"]else:print(f"请求失败,状态码:{response.status_code}")return None# 调用示例
indices = get_indian_indices()
if indices:for index in indices:if index["name"] in ["Nifty 50", "BSE SENSEX"]:print(f"{index['name']}({index['symbol']}): {index['last']} {index['chgPct']}%")
响应示例:
{"code": 200,"data": [{"id": 17940,"name": "Nifty 50","symbol": "NSEI","last": 22967.65,"chgPct": 1.64,"change": 369.85,"high": 22993.6,"low": 22577.45,"prevClose": 22597.80,"isOpen": false,"time": 1716458537}]
}
2. 获取历史K线数据
获取指数或个股的历史价格数据,支持多种时间粒度。
接口地址:GET /stock/kline
请求参数:
参数 | 必选 | 说明 | 示例值 |
---|---|---|---|
pid | 是 | 指数或股票ID | 17940(Nifty 50) |
interval | 是 | 时间间隔 | PT15M(15分钟) |
key | 是 | API密钥 | YOUR_KEY |
支持的时间间隔:
PT5M
:5分钟PT15M
:15分钟PT1H
:1小时P1D
:日线
Java示例代码:
import java.net.HttpURLConnection;
import java.net.URL;
import java.io.BufferedReader;
import java.io.InputStreamReader;public class IndianIndexAPI {public static void getKLineData(String pid, String interval) {try {String urlStr = "https://api.stocktv.top/stock/kline?pid=" + pid + "&interval=" + interval + "&key=YOUR_API_KEY";URL url = new URL(urlStr);HttpURLConnection conn = (HttpURLConnection) url.openConnection();conn.setRequestMethod("GET");BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));String line;StringBuilder response = new StringBuilder();while ((line = reader.readLine()) != null) {response.append(line);}reader.close();// 解析响应数据System.out.println("K线数据: " + response.toString());} catch (Exception e) {e.printStackTrace();}}
}
3. WebSocket实时数据推送
对于需要实时行情的情景(如交易系统),建议使用WebSocket接口,实现毫秒级延迟的数据更新。
连接地址:wss://ws-api.stocktv.top/connect?key=YOUR_KEY
JavaScript示例:
const ws = new WebSocket("wss://ws-api.stocktv.top/connect?key=YOUR_KEY");ws.onopen = function(event) {console.log("WebSocket连接已建立");// 订阅特定指数const subscribeMsg = {action: "subscribe",pids: [17940, 17941] // Nifty 50和Sensex的ID};ws.send(JSON.stringify(subscribeMsg));
};ws.onmessage = function(event) {const data = JSON.parse(event.data);console.log(`指数 ${data.symbol} 最新价: ${data.last_numeric}`);
};// 每30秒发送心跳包维持连接
setInterval(() => {if (ws.readyState === WebSocket.OPEN) {ws.send(JSON.stringify({action: "ping"}));}
}, 30000);
实时数据格式:
{"pid": "17940","symbol": "NSEI","last": "22967.65","change": "369.85","changePct": "1.64","volume": "4521890","timestamp": 1725008213
}
四、高级功能接口
1. 涨跌排行榜
获取当日涨幅榜/跌幅榜数据,了解市场热点。
接口地址:GET /stock/updownList
请求参数:
params = {"countryId": 14,"type": 1, # 1=涨幅榜, 2=跌幅榜, 3=涨停, 4=跌停"key": API_KEY
}
2. IPO新股日历
获取印度市场即将上市或已上市的新股信息。
接口地址:GET /stock/getIpo
五、实战案例:印度指数监控系统
以下是一个完整的Python示例,实现印度主要指数的实时监控和报警功能:
import requests
import time
import smtplib
from email.mime.text import MimeTextclass IndiaIndexMonitor:def __init__(self, api_key):self.api_key = api_keyself.base_url = "https://api.stocktv.top"self.tracked_indices = [{"name": "Nifty 50", "id": 17940, "threshold": 2.0},{"name": "BSE SENSEX", "id": 17941, "threshold": 1.5}]def get_index_data(self, index_id):"""获取单个指数数据"""url = f"{self.base_url}/stock/queryStocks"params = {"id": index_id, "key": self.api_key}response = requests.get(url, params=params)if response.status_code == 200:data = response.json()return data["data"][0] if data["data"] else Nonereturn Nonedef check_alert_conditions(self, index_data):"""检查是否触发报警条件"""alerts = []for index in self.tracked_indices:if index_data["id"] == index["id"]:if abs(float(index_data["chgPct"])) > index["threshold"]:alerts.append({"name": index["name"],"change": index_data["chgPct"],"current_price": index_data["last"]})return alertsdef send_alert(self, alerts):"""发送报警通知(可扩展为邮件、短信等)"""for alert in alerts:message = f"报警: {alert['name']} 涨跌幅 {alert['change']}%,当前价格 {alert['current_price']}"print(f"[ALERT] {message}")# 这里可以集成邮件、短信等通知方式def start_monitoring(self, interval=60):"""启动监控循环"""while True:for index in self.tracked_indices:data = self.get_index_data(index["id"])if data:alerts = self.check_alert_conditions(data)if alerts:self.send_alert(alerts)time.sleep(1) # 短暂间隔避免请求过于频繁time.sleep(interval) # 等待设置的时间间隔# 使用示例
monitor = IndiaIndexMonitor("YOUR_API_KEY")
monitor.start_monitoring(interval=300) # 每5分钟检查一次
六、最佳实践与注意事项
1. 频率限制与性能优化
- 频率限制:免费版API通常限制为10次请求/秒,需合理控制请求频率
- 缓存机制:对指数信息等不常变化的数据实施本地缓存
- 数据压缩:启用Gzip压缩减少流量消耗
- 错误处理:实现指数退避重试策略
import time
import mathdef request_with_retry(url, params, max_retries=3):"""带重试机制的请求函数"""for i in range(max_retries):try:response = requests.get(url, params=params, timeout=10)if response.status_code == 200:return response.json()except Exception as e:print(f"请求失败,第{i+1}次重试: {e}")wait_time = math.pow(2, i) # 指数退避time.sleep(wait_time)return None
2. 时区处理
印度使用IST时区(UTC+5:30),所有API返回的时间戳均为UTC时间,需进行转换:
from datetime import datetime
import pytzdef convert_to_ist(utc_timestamp):"""将UTC时间戳转换为印度时区时间"""utc_time = datetime.utcfromtimestamp(utc_timestamp)ist_timezone = pytz.timezone('Asia/Kolkata')ist_time = utc_time.replace(tzinfo=pytz.utc).astimezone(ist_timezone)return ist_time
3. 常见错误码处理
- 401:API密钥无效,检查密钥是否正确
- 429:请求频率超限,降低请求频率
- 500:服务器内部错误,稍后重试
七、总结
通过本文介绍的API接口,您可以快速构建印度股票指数监控系统、量化交易策略或投资分析平台。关键步骤包括:
- 获取API密钥并了解基本参数(如印度国家ID=14)
- 选择合适的接口:实时数据用WebSocket,历史数据用REST API
- 实现错误处理和频率控制,确保系统稳定性
- 结合业务需求扩展监控、报警或分析功能
印度股市作为全球重要的新兴市场,为投资者提供了丰富的机会。通过程序化接入市场数据,您可以更加高效地把握投资机会,管理投资风险。
官方完整API文档参考:https://documenter.getpostman.com/view/42914868/2sB2ixkEZR