BSE股票K线数据接入实战:从接口调用到前端图表展示

一、先定位 BSE 在接口里的身份

StockTV 把所有市场挂在国家 ID + 交易所 ID 两层下面,印度是 countryId=14,BSE 本身是 exchangeId=74(NSE 是 46,别写错)。

市场 countryId exchangeId 代表指数
印度 NSE 14 46 Nifty 50
印度 BSE 14 74 S&P BSE SENSEX

后面所有 BSE 请求都带着这俩参数走。


二、拿到 BSE 股票池,取到 pid

K 线接口不吃 symbol,吃内部 pid,所以第一步先把 BSE 股票列表拉下来,把 id 记下来。

python 复制代码
import requests

BASE = "https://api.stocktv.top"
KEY  = "YOUR_KEY"          # 联系官方拿:https://t.me/stocktvpaopao
COUNTRY_ID = 14
BSE_ID = 74

def fetch_bse_list(page=1, page_size=20):
    url = f"{BASE}/stock/stocks"
    params = {
        "countryId": COUNTRY_ID,
        "exchangeId": BSE_ID,
        "page": page,
        "pageSize": page_size,
        "key": KEY
    }
    r = requests.get(url, params=params, timeout=5)
    r.raise_for_status()
    return r.json()

data = fetch_bse_list()
for s in data["data"]["records"][:5]:
    print(s["id"], s["symbol"], s["name"])

返回的 id 就是后面 /stock/kline 要的 pid。比如 Reliance 在 BSE 也有挂牌,用 symbol=RELIANCE/stock/queryStocks 也能反查 pid。


三、拉 K 线(/stock/kline)

接口:GET /stock/kline?pid=xxx&interval=xxx&key=xxx

interval 给的是 ISO 8601 duration 风格:

  • PT5M / PT15M / PT1H → 短周期
  • P1D → 日线
python 复制代码
def fetch_kline(pid, interval="P1D", limit=100):
    url = f"{BASE}/stock/kline"
    params = {"pid": pid, "interval": interval, "key": KEY}
    r = requests.get(url, params=params, timeout=5)
    r.raise_for_status()
    return r.json()

# 举个栗子:TCS(假设 pid=xxx,先用 /queryStocks 查一下真实 pid)
kline = fetch_kline(pid=41602, interval="P1D")
print(kline["data"][:3])

返回一般是 time / open / high / low / close / volume 这一组,直接能喂给图表库。

💡 BSE 有些老牌股票(Tata、Reliance、Infosys)日线数据跨度很长,做均线/布林带回测够用;短线策略建议走 PT5MPT15M,但要注意印度交易时段是 UTC+5:30,不是北京时间,做时间戳转换时别踩坑。


四、挂到前端 K 线(KChat)上

后端拿到 K 线 JSON 之后,前端随便挑一个轻量图表都能接。下面用 TradingView Lightweight Charts(体积小、专为 K 线优化)示意:

js 复制代码
// 假设 /api/bse/kline?pid=xxx&interval=P1D 返回 [{t,o,h,l,c,v}]
const raw = await fetch(`/api/bse/kline?pid=${pid}&interval=P1D`).then(r => r.json());

const data = raw.data.map(b => ({
  time:  b.t / 1000,   // 秒级
  open:  b.o,
  high:  b.h,
  low:   b.l,
  close: b.c,
}));

const chart = LightweightCharts.createChart(document.getElementById('tv'), { width: 800, height: 500 });
const candlestick = chart.addCandlestickSeries();
candlestick.setData(data);

如果你项目里已经用了 ECharts,思路一样------dataset 塞进去,series 用 candlestick 类型就行。整个链路:

复制代码
BSE /stock/stocks → 拿 pid
        ↓
   /stock/kline → JSON (ohlc+v)
        ↓
  后端透传 / 缓存
        ↓
Lightweight Charts / ECharts 渲染

五、想让 K 线动起来:WebSocket 补实时

光日线还不够,做盯盘的话 K 线最右一根得跟着 tick 推。StockTV 的 WS 地址是 wss://ws-api.stocktv.top/connect?key=xxx,连上后 subscribe 对应的 pid 就行:

json 复制代码
{"action": "subscribe", "pids": [41602]}

前端收到 push 后自己改最后一根 candle 的 close / high / low / volume,比轮询优雅多了。BSE 那边延迟官方标"毫秒级",实测得看你机房位置,新加坡/孟买节点会稳一点。


六、几个 BSE 特有的小坑

  • 同一只票 NSE 和 BSE 都有,pid 不一样、价格也略有价差,套利党会关心这个,普通展示别混。
  • Sensex(BSESN) 是指数不是股票,走 /stock/indices?countryId=14 单独拿,pid 和个股不在一个表里。
  • 接口限流 ------key 是明文挂 URL 的,生产别把 key 写前端,走后端中转,否则容易被刷。

访问凭证申请和文档入口在这:官网 https://pao.stocktv.top/ ,对接中遇到字段含义不清的也可以直接去 https://t.me/stocktvpaopao 。下一篇打算把"NSE vs BSE 价差监控"那个小 demo 写完,有兴趣接着看。


要不要下一篇直接把 WebSocket + 动态 K 线(最后一 candle 实时刷新) 那段补齐?BSE 的 Sensex 做指数联动那个玩法也挺适合当 demo 的。

相关推荐
M1582276905516 小时前
工业跨网段通信零改造方案!SG-NAT-210/410 NAT 网关全功能解析,不改 PLC IP 实现多协议互通
网络·网络协议·tcp/ip
水瓶夜之16 小时前
.NET 中的新增功能系列文章——.NET SDK中的新增功能
前端·chrome·.net
2401_8812039616 小时前
一网统管 | 赋能智慧养老,守护夕阳美好时光
大数据·智慧养老·一网统管
cxr82816 小时前
第6章 强制执行令牌
人工智能·智能体
vibecoding7716 小时前
GitHub 2026 年 7 月热榜:累计 Star 总榜与月度飙星榜
人工智能·github·ai编程
anscos16 小时前
面向人工智能安全和 ISO/PAS 8800 的自动化 C/C++ 测试路线图
人工智能·parasoft
A hao16 小时前
免校准 XR技术:打造沉浸式显示系统的关键技术
大数据
<-->16 小时前
Megatron-LM 深度学习与源码分析文档
人工智能·深度学习
aqi0016 小时前
15天学会AI应用开发(十八)使用LangGraph实现精确记忆功能
人工智能·python·大模型·ai编程·ai应用
Michaelliu_dev17 小时前
RoPE通俗讲解
人工智能·llm·位置编码·多模态大模型·rope·旋转位置编码·mllm