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)日线数据跨度很长,做均线/布林带回测够用;短线策略建议走 PT5M 或 PT15M,但要注意印度交易时段是 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 的。

相关推荐
7yewh8 小时前
SLAM 三维空间刚体运动(2)
数据结构·人工智能·机器人·嵌入式·slam
小虎AI生活8 小时前
WorkBuddy 模型选型实操:0.03 倍的 Space-Bunny 怎么用、派什么活、避什么坑
人工智能·超级个体·一人公司·青玥ai
ai小陈8 小时前
GPU服务器租用存储验收:检查点写入与磁盘吞吐实战
运维·服务器·人工智能·ai·ssh·gpu算力
微三云马玮均—GEO源码系统 私有化部署8 小时前
消费返物业费:消费+服务趋势的必然产物!
大数据·人工智能·物联网·区块链·生活
明月_清风9 小时前
Muse 登顶 App Store 第一,SDK 直接开源:AI Agent 开始进入下一个阶段
人工智能·后端
JackSparrow4149 小时前
和AI一起将全部CSDN博文迁移到个人博客站
人工智能·程序人生·ai·github·cloudflare·astro·静态博客
55873 生态系统9 小时前
第 22 篇|社区聊天|55873 文明共建者的日常交流与协作界面
人工智能·区块链·55873全域文明生态体系·55873操作系统·55873社区聊天
搬砖的小码农_Sky9 小时前
AI Agent:如何处理Claude Code 最近版本(2026年更新)引入的模型上下文限制
人工智能·windows·ai·ai编程
企业数字化笔记9 小时前
视频目标跟踪怎么选?SORT、DeepSORT、ByteTrack 的连续性、遮挡与计算成本对比
人工智能·目标跟踪·音视频