印度股票实时数据API接口

一、API概述

StockTV API为印度股票市场提供全面的数据解决方案:

全面数据覆盖:支持印度国家证券交易所(NSE,交易所ID:46)和孟买证券交易所(BSE,交易所ID:74)的全市场股票实时行情、深度数据、历史K线、指数、IPO信息等,覆盖1800+ NSE股票和5000+ BSE股票。

低延迟高性能:WebSocket协议提供毫秒级延迟的实时行情推送。

双协议支持:同时提供RESTful API用于查询静态数据和历史信息,WebSocket用于实时数据推送,满足不同场景需求。

二、快速接入准备

1. 获取API密钥

访问StockTV官网可以获取测试API Key。

2. 基础配置

import os
from dotenv import load_dotenv

load_dotenv()  # 加载.env文件
API_KEY = os.getenv("STOCKTV_API_KEY")
BASE_URL = "https://api.stocktv.top"
INDIA_COUNTRY_ID = 14  # 印度国家代码
NSE_EXCHANGE_ID = 46   # NSE交易所代码
BSE_EXCHANGE_ID = 74   # BSE交易所代码

三、核心接口详解

1. 获取印度股票列表

接口地址GET /stock/stocks

请求参数

  • countryId:国家ID,印度为14(必填)

  • exchangeId:交易所ID,46=NSE,74=BSE(可选)

  • pageSize:每页数量,默认10

  • page:页码,默认1

  • key:API密钥(必填)

代码示例

import requests

def get_indian_stocks():
    url = f"{BASE_URL}/stock/stocks"
    params = {
        "countryId": INDIA_COUNTRY_ID,
        "pageSize": 100,
        "page": 1,
        "key": API_KEY
    }
    response = requests.get(url, params=params)
    if response.status_code == 200:
        data = response.json()
        return data["data"]["records"]
    else:
        print(f"请求失败: {response.status_code}")
        return None

返回示例

{
  "code": 200,
  "message": "操作成功",
  "data": {
    "records": [
      {
        "id": 41602,
        "symbol": "TCS",
        "name": "Tata Consultancy",
        "last": 3856.15,
        "chg": 12.45,
        "chgPct": 0.32,
        "high": 3872.30,
        "low": 3825.60,
        "volume": 1254875,
        "exchangeId": 46,
        "countryId": 14,
        "open": true
      }
    ],
    "total": 1850
  }
}

2. 查询特定股票

接口地址GET /stock/queryStocks

请求参数

  • id:股票ID(可选)

  • symbol:股票代码,如"RELIANCE"(可选)

  • name:股票名称(可选)

  • key:API密钥(必填)

代码示例

def query_indian_stock(symbol):
    url = f"{BASE_URL}/stock/queryStocks"
    params = {
        "symbol": symbol,
        "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

3. 获取印度指数数据

接口地址GET /stock/indices

请求参数

  • countryId:国家ID,印度为14(必填)

  • key:API密钥(必填)

代码示例

def get_indian_indices():
    url = f"{BASE_URL}/stock/indices"
    params = {
        "countryId": INDIA_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

返回示例

{
  "code": 200,
  "message": "操作成功",
  "data": [
    {
      "symbol": "NSEI",
      "name": "Nifty 50",
      "last": 21678.35,
      "chg": 123.45,
      "chgPct": 0.57,
      "isOpen": true
    }
  ]
}

4. 获取K线数据

接口地址GET /stock/kline

请求参数

  • pid:股票ID(必填)

  • interval:时间间隔(必填),支持PT1M(1分钟)、PT5M(5分钟)、PT15M(15分钟)、PT1H(1小时)、P1D(1天)、P1W(1周)、P1M(1月)

  • key:API密钥(必填)

代码示例

import pandas as pd

def get_indian_kline(pid, interval="P1D"):
    url = f"{BASE_URL}/stock/kline"
    params = {
        "pid": pid,
        "interval": interval,
        "key": API_KEY
    }
    response = requests.get(url, params=params)
    if response.status_code == 200:
        data = response.json()
        df = pd.DataFrame(data["data"])
        df['time'] = pd.to_datetime(df['time'], unit='ms')
        return df
    else:
        print(f"请求失败: {response.status_code}")
        return None

返回示例

{
  "code": 200,
  "message": "操作成功",
  "data": [
    {
      "time": 1721832000000,
      "open": 66895.35,
      "high": 67038.81,
      "low": 66850.15,
      "close": 66876.57,
      "volume": 241.28984
    }
  ]
}

5. 获取IPO新股信息

接口地址GET /stock/getIpo

请求参数

  • countryId:国家ID,印度为14(必填)

  • type:类型,1=即将上市,2=已上市(可选)

  • key:API密钥(必填)

代码示例

def get_indian_ipo(type=1):
    url = f"{BASE_URL}/stock/getIpo"
    params = {
        "countryId": INDIA_COUNTRY_ID,
        "type": type,
        "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

6. 获取涨跌排行榜

接口地址GET /stock/updownList

请求参数

  • countryId:国家ID,印度为14(必填)

  • type:类型,1=涨幅榜,2=跌幅榜,3=涨停,4=跌停(必填)

  • key:API密钥(必填)

代码示例

def get_indian_updown_list(type=1):
    url = f"{BASE_URL}/stock/updownList"
    params = {
        "countryId": INDIA_COUNTRY_ID,
        "type": type,
        "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

四、WebSocket实时数据推送

StockTV还提供WebSocket实时数据推送服务,适用于高频交易和实时监控场景。

WebSocket连接地址wss://ws-api.stocktv.top/connect

代码示例

import websocket
import json

def on_message(ws, message):
    data = json.loads(message)
    print(f"收到实时数据: {data}")

def on_error(ws, error):
    print(f"连接错误: {error}")

def on_close(ws, close_status_code, close_msg):
    print(f"连接关闭: {close_status_code} - {close_msg}")

def on_open(ws):
    print("连接已建立")
    # 订阅股票行情
    subscribe_data = {
        "action": "subscribe",
        "symbols": ["TCS", "RELIANCE"],
        "exchange": "NSE"
    }
    ws.send(json.dumps(subscribe_data))

# 建立WebSocket连接
ws = websocket.WebSocketApp(
    "wss://ws-api.stocktv.top/connect",
    on_message=on_message,
    on_error=on_error,
    on_close=on_close,
    on_open=on_open
)
ws.run_forever()

五、实战应用场景

1. 构建实时行情监控系统

通过WebSocket实时推送,构建印度股票实时行情监控系统,支持价格提醒、异常波动告警等功能。

2. 技术分析图表绘制

利用K线数据接口,绘制专业的技术分析图表,支持多种时间周期(1分钟至月线)。

3. 量化交易策略回测

获取历史K线数据,回测量化交易策略,评估策略的有效性和盈利能力。

4. IPO新股追踪

实时监控IPO新股信息,捕捉新股上市投资机会。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值