印度股市数据从哪来?itick India Stock API Python对接手册
印度股市这几年在新兴市场里存在感很强,NSE(National Stock Exchange)和BSE(Bombay Stock Exchange)两大交易所的行情数据需求也越来越多。印度股票API、NSE实时行情、印度历史K线,这篇教程用itick的Python SDK把对接流程走一遍,重点讲一下印度市场比较特殊的交易所参数写法。
印度市场的特殊之处:exchange参数是必填的
跟美股、港股不一样,印度同一只股票可能同时在NSE和BSE两个交易所挂牌交易,价格还可能有细微差异。所以itick对接印度市场的时候,WebSocket订阅参数格式要求是代码$交易所$地区,也就是exchange这一段不能省略,这跟其他大部分市场"代码$地区"两段式的写法不太一样,第一次用容易踩这个坑。
举例,信实工业(Reliance Industries)在NSE的订阅参数写法是:
RELIANCE$NSE$IN而REST接口这边,exchange是可选参数,留空默认返回主交易所(一般是NSE)的数据,如果明确要指定BSE的数据,就把exchange传成BSE。
安装SDK、拿Token
pipinstallitick-sdk去itick官网注册账号,登录后台复制token,免费套餐先测试用,够验证需求。
fromitick.sdkimportClient token="your_api_token"client=Client(token)REST查询实时报价与历史K线
# 信实工业,region=INquote=client.get_stock_quote("IN","RELIANCE")print("Reliance Quote:",quote)# 塔塔咨询服务 TCS,历史日K线,取最近20根kline=client.get_stock_kline("IN","TCS",8,20)print("TCS Kline:",kline)kType参数:1=1分钟, 2=5分钟, 3=15分钟, 4=30分钟, 5=1小时, 8=1天, 9=1周, 10=1月。返回结构跟其他市场保持一致,o/h/l/c/v/tu/t这几个字段含意都是通用的。
WebSocket订阅(注意exchange段不能漏)
importtimedefon_message(msg):print("推送:",msg)defon_error(err):print("错误:",err)client.set_message_handler(on_message)client.set_error_handler(on_error)client.connect_stock_websocket()# 印度市场订阅必须带上交易所段:代码$交易所$地区client.send_websocket_message('{"ac":"subscribe","params":"RELIANCE$NSE$IN,TCS$NSE$IN","types":"quote,depth"}')time.sleep(20)client.close_websocket()如果漏写了交易所段直接传RELIANCE$IN,大概率会收到解析失败的错误响应,这是印度市场和其他市场在参数格式上最大的区别,务必留意。
自动重连和心跳,SDK都包好了
跨国网络请求本来就容易抖动,尤其是国内访问印度交易所数据源,链路上的波动比访问美股数据源明显一些。好在itick-sdk内置了断线自动重连(5秒间隔,最多10次)和心跳保活(默认30秒一次),这些都不需要开发者自己写,SDK内部已经处理好了,重连之后订阅关系也会自动恢复。
# 手动检查连接状态ifnotclient.is_websocket_connected():print("连接已断开,SDK会自动尝试重连")套餐怎么选
| 套餐 | REST频率 | WS连接数 | WS订阅数 |
|---|---|---|---|
| Free | 5次/分钟 | 1 | 3 |
| Base | 120次/分钟 | 3 | 200 |
| Professional | 600次/分钟 | 6 | 500 |
| Premium | 1200次/分钟 | 12 | 2000 |
个人开发者拿Free套餐先把流程跑通,等要接入更多印度股票标的、需要更高并发的时候,再根据实际订阅数量选Base或者Professional,Premium这个档位更适合有一定规模的量化团队或者资讯类产品。
小结
印度市场对接的核心记忆点就一句话:exchange参数不能省,订阅格式是代码$交易所$地区。除此之外调用方式跟美股、港股、A股完全一致,同一套SDK换个region参数就能切换市场,这也是itick这类聚合数据接口相对自己单独接各国交易所数据源省事的地方。更多细节可以翻itick的WebSocket文档。