StockTV 对印度市场的支持非常完善,覆盖 NSE(国家证券交易所)和 BSE(孟买证券交易所)的实时行情、指数及 K 线数据。以下是基于官方文档整理的印度股票数据对接指南

一、基础配置与参数说明

在对接前,你需要了解印度市场的特定参数:

参数 Key固定值说明
countryId14印度国家 ID(核心参数)
exchangeId46NSE(国家证券交易所,主流)
exchangeId74BSE(孟买证券交易所)
key你的密钥必填,需联系 StockTV 获取

API 基础信息:

  • Base URL: https://api.stocktv.top
  • 格式: JSON
  • 认证: 所有请求必须在 URL 参数中携带 key

二、核心接口对接代码(PHP)

以下代码封装了印度股票数据的常用操作,你只需替换 YOUR_API_KEY 即可运行。

<?php
// StockTV API 配置
define('STOCKTV_API_KEY', 'YOUR_API_KEY'); // 请替换为你的实际 Key
define('STOCKTV_BASE_URL', 'https://api.stocktv.top');

/**
 * 通用 API 请求函数(锁定印度市场 countryId=14)
 */
function stocktvIndiaApiRequest($endpoint, $params = []) {
    // 1. 必填参数:Key 和印度 countryId=14
    $defaultParams = [
        'key' => STOCKTV_API_KEY,
        'countryId' => 14, // 锁定印度市场
    ];
    $queryParams = array_merge($defaultParams, $params);
    $url = STOCKTV_BASE_URL . $endpoint . '?' . http_build_query($queryParams);

    // 2. 发起请求(生产环境建议使用 Guzzle 并增加超时/重试逻辑)
    $ch = curl_init();
    curl_setopt_array($ch, [
        CURLOPT_URL => $url,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_SSL_VERIFYPEER => false,
    ]);
    $response = curl_exec($ch);
    $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);

    // 3. 解析响应
    if ($httpCode === 200) {
        return json_decode($response, true);
    }
    return ['code' => $httpCode, 'message' => 'HTTP Request Failed'];
}

/**
 * 1. 获取印度股票列表(支持分页 & 交易所筛选)
 * @param int $page 页码
 * @param int $pageSize 每页条数
 * @param int|null $exchangeId 46(NSE) 或 74(BSE)
 */
function getIndiaStockList($page = 1, $pageSize = 20, $exchangeId = null) {
    $endpoint = '/stock/stocks';
    $params = [
        'page' => $page,
        'pageSize' => $pageSize,
    ];
    // 按交易所筛选(可选)
    if ($exchangeId !== null) {
        $params['exchangeId'] = $exchangeId;
    }
    return stocktvIndiaApiRequest($endpoint, $params);
}

/**
 * 2. 查询个股实时行情(通过 PID 或 Symbol)
 * @param int|string $identifier 股票的 PID(推荐) 或 代码(如 'RELIANCE')
 */
function getIndiaStockQuote($identifier) {
    $endpoint = '/stock/queryStocks';
    $params = [];
    // 判断传入的是数字 PID 还是字符串代码
    if (is_numeric($identifier)) {
        $params['id'] = $identifier; // 使用 PID 查询(更精准)
    } else {
        $params['symbol'] = $identifier; // 使用股票代码查询
    }
    return stocktvIndiaApiRequest($endpoint, $params);
}

/**
 * 3. 获取印度指数(Nifty 50, Sensex 等)
 */
function getIndiaIndices() {
    $endpoint = '/stock/indices';
    return stocktvIndiaApiRequest($endpoint);
}

/**
 * 4. 获取历史 K 线数据
 * @param int $pid 股票 PID(从列表接口获取)
 * @param string $interval 周期: PT1M, PT5M, PT1H, P1D 等
 */
function getIndiaKline($pid, $interval = 'P1D') {
    $endpoint = '/stock/kline';
    $params = [
        'pid' => $pid,
        'interval' => $interval,
    ];
    return stocktvIndiaApiRequest($endpoint, $params);
}

// ==================== 使用示例 ====================

// 示例1:获取 NSE 交易所股票列表(exchangeId=46)
$result = getIndiaStockList(1, 10, 46);
if (isset($result['code']) && $result['code'] == 200) {
    $stocks = $result['data']['records'];
    foreach ($stocks as $stock) {
        echo "代码: {$stock['symbol']}, 名称: {$stock['name']}, 最新价: {$stock['last']}\n";
    }
}

// 示例2:查询 Reliance Industries 实时行情
$quote = getIndiaStockQuote('RELIANCE');
if ($quote['code'] == 200) {
    $stockData = $quote['data'];
    echo "Reliance: {$stockData['last']} INR, 涨跌幅: {$stockData['chgPct']}%\n";
}
?>

三、接口返回数据结构参考

1. 股票列表/行情 (/stock/stocks)

返回字段(部分关键字段):

{
  "code": 200,
  "data": {
    "records": [
      {
        "id": 7310,              // 股票PID(重要,用于查K线)
        "symbol": "RELIANCE",    // 股票代码(Reliance Industries)
        "name": "Reliance Industries Ltd.",
        "last": 2850.50,         // 最新价(印度卢比)
        "chg": 25.50,            // 涨跌额
        "chgPct": 0.90,          // 涨跌幅(百分比)
        "volume": 24567890,       // 成交量
        "exchangeId": 46,        // 交易所ID (46=NSE)
        "lastPairDecimal": 2     // 价格小数位数
      }
    ]
  }
}

2. 指数数据 (/stock/indices)

返回 Nifty 50、Sensex 等主要指数:

{
  "code": 200,
  "data": [
    {
      "name": "Nifty 50",
      "symbol": "NSEI",
      "last": 22450.75,
      "chgPct": 0.45,
      "high": 22500.00,
      "low": 22300.50
    }
  ]
}

四、印度市场特性与注意事项

  1. 交易所选择:印度主要有 NSEexchangeId=46)和 BSEexchangeId=74)两家交易所,NSE 交易更活跃,是 API 对接的首选 。
  2. PID 的重要性id(产品ID)是 StockTV 系统的内部唯一标识,查询 K 线历史数据时必须使用 PID,不能直接使用股票代码 。
  3. 交易时间:印度股市交易时间为 IST 09:15 - 15:30(北京时间 11:45 - 18:00)。非交易时间接口可能返回闭市价格或无数据。
  4. 货币与精度:价格单位为 印度卢比 (INR),多数股票价格保留 2 位小数(lastPairDecimal 字段指示)。

五、WebSocket 实时推送(可选)

如果你需要毫秒级实时行情,StockTV 支持 WebSocket 协议。

  • 连接地址: wss://ws-api.stocktv.top/connect?key=YOUR_KEY
  • 订阅方式: 连接成功后,发送订阅指令(包含股票 PID 和动作)即可接收实时 Tick 。
第一步:请先申请 API Key(联系 StockTV 官方),将上述代码中的 YOUR_API_KEY 替换后即可测试获取印度股票数据。

标签: none

添加新评论