印度尼西亚股票实时数据API对接文档

概述

本文档详细说明如何对接StockTV全球股票API中的印度尼西亚股票数据。印尼股票市场是东南亚重要的金融市场之一,以雅加达综合指数为代表。

认证方式

所有API请求都需要在URL参数中包含API Key:

key=您的API密钥

基础信息

  • 印度尼西亚国家ID: countryId=48
  • 主要交易所ID:
    • 印尼证券交易所(IDX): exchangeId=61
    • 雅加达证券交易所: exchangeId=61 (同IDX)

API端点

1. 印尼股票市场列表

获取印尼股票市场列表,支持分页查询。

请求示例:

GET https://api.stocktv.top/stock/stocks?countryId=48&pageSize=50&page=1&key=您的API密钥

参数说明:

  • countryId: 必须为48(印度尼西亚)
  • pageSize: 每页返回数量(默认10,最大100)
  • page: 页码(默认1)
  • exchangeId: 可选,交易所ID

响应示例:

{
  "code": 200,
  "message": "操作成功",
  "data": {
    "records": [
      {
        "id": 89234,
        "name": "Bank Central Asia",
        "symbol": "BBCA",
        "last": 9850,
        "chg": 150,
        "chgPct": 1.55,
        "high": 9900,
        "low": 9800,
        "volume": 45678200,
        "avgVolume": 35214800,
        "exchangeId": 61,
        "countryId": 48,
        "flag": "ID",
        "open": true,
        "lastClose": 9700,
        "time": 1716458537,
        "url": "/equities/bank-central-asia",
        "fundamentalMarketCap": 985000000000000,
        "fundamentalRevenue": "125.4T",
        "performanceDay": 1.55,
        "performanceWeek": 3.21,
        "performanceMonth": 8.45,
        "performanceYear": 22.36,
        "technicalDay": "buy",
        "technicalWeek": "strong_buy"
      }
    ],
    "total": 800,
    "size": 50,
    "current": 1,
    "pages": 16
  }
}

2. 查询特定印尼股票

通过股票ID、名称或代码查询印尼股票信息。

请求示例:

GET https://api.stocktv.top/stock/queryStocks?countryId=48&symbol=BBCA&key=您的API密钥

参数说明:

  • id: 股票PID(可选)
  • name: 股票名称(可选)
  • symbol: 股票代码(可选)
  • url: 股票详情页URL(可选)

3. 印尼指数数据

获取印尼主要股票指数信息。

请求示例:

GET https://api.stocktv.top/stock/indices?countryId=48&key=您的API密钥

响应包含:

  • 雅加达综合指数(JCI/IDX Composite)
  • LQ45指数
  • Jakarta Islamic Index等

4. 印尼股票K线数据

获取印尼股票的K线图表数据。

请求示例:

GET https://api.stocktv.top/stock/kline?pid=89234&interval=PT1H&key=您的API密钥

时间间隔参数:

  • PT5M: 5分钟
  • PT15M: 15分钟
  • PT1H: 1小时
  • PT5H: 5小时
  • P1D: 1天
  • P1W: 1周
  • P1M: 1月

5. 印尼股票涨跌排行榜

获取印尼股票的涨跌幅排行榜。

请求示例:

GET https://api.stocktv.top/stock/updownList?countryId=48&type=1&key=您的API密钥

类型参数:

  • 1: 涨幅榜
  • 2: 跌幅榜
  • 3: 涨停榜
  • 4: 跌停榜

6. 印尼上市公司信息

获取印尼上市公司的详细信息。

请求示例:

GET https://api.stocktv.top/stock/companies?countryId=48&pageSize=10&page=1&key=您的API密钥

7. WebSocket实时数据

通过WebSocket获取印尼股票的实时价格数据。

连接示例:

const ws = new WebSocket("wss://ws-api.stocktv.top/connect?key=您的API密钥");

数据说明

交易时间

  • 印尼股市交易时间(西部印尼时间WIB):
    • 早盘: 9:00-12:00
    • 午盘: 13:30-16:00
  • API中的open字段表示当前是否处于交易时间

价格货币

  • 所有印尼股票价格均以印尼盾(IDR)为单位

特殊处理

  • 印尼股票代码通常为4位字母
  • 印尼市场有独特的行业分类体系

印尼主要指数

指数代码 指数名称 说明
JCI 雅加达综合指数 印尼主要股票指数,包含所有上市公司
LQ45 LQ45指数 45只最具流动性的股票
JII 雅加达伊斯兰指数 符合伊斯兰教法的股票指数

印尼知名上市公司

公司名称 股票代码 行业 中文名称
Bank Central Asia BBCA 银行 中亚银行
Bank Rakyat Indonesia BBRI 银行 印尼人民银行
Telkom Indonesia TLKM 电信 印尼电信
Astra International ASII 汽车 阿斯特拉国际
Unilever Indonesia UNVR 消费品 联合利华印尼

示例代码

Python示例

import requests

def get_indonesia_stocks(symbol=None):
    """获取印尼股票数据"""
    url = "https://api.stocktv.top/stock/stocks"
    params = {
        "countryId": 48,  # 修正为48
        "pageSize": 50,
        "page": 1,
        "key": "您的API密钥"
    }
    
    if symbol:
        params["symbol"] = symbol
        
    response = requests.get(url, params=params)
    return response.json()

# 获取中亚银行股票数据
bbca_data = get_indonesia_stocks("BBCA")
print(bbca_data)

# 获取印尼指数数据
def get_indonesia_indices():
    url = "https://api.stocktv.top/stock/indices"
    params = {
        "countryId": 48,  # 修正为48
        "key": "您的API密钥"
    }
    response = requests.get(url, params=params)
    return response.json()

indices_data = get_indonesia_indices()
print(indices_data)

# 批量获取印尼蓝筹股
def get_indonesia_blue_chips():
    blue_chips = ["BBCA", "BBRI", "TLKM", "ASII", "UNVR"]
    results = {}
    
    for symbol in blue_chips:
        data = get_indonesia_stocks(symbol)
        if data["code"] == 200 and data["data"]["records"]:
            results[symbol] = data["data"]["records"][0]
    
    return results

blue_chips_data = get_indonesia_blue_chips()
print(blue_chips_data)

JavaScript示例

async function fetchIndonesiaStocks(symbol = null) {
  let url = `https://api.stocktv.top/stock/stocks?countryId=48&pageSize=50&page=1&key=您的API密钥`;  // 修正为48
  
  if (symbol) {
    url += `&symbol=${symbol}`;
  }
  
  try {
    const response = await fetch(url);
    const data = await response.json();
    return data;
  } catch (error) {
    console.error('获取数据失败:', error);
    return null;
  }
}

// 使用示例
fetchIndonesiaStocks('BBCA').then(data => {
  if (data && data.code === 200) {
    console.log('中亚银行数据:', data);
  }
});

// 获取印尼指数
async function fetchIndonesiaIndices() {
  try {
    const response = await fetch(
      `https://api.stocktv.top/stock/indices?countryId=48&key=您的API密钥`  // 修正为48
    );
    const data = await response.json();
    return data;
  } catch (error) {
    console.error('获取指数数据失败:', error);
    return null;
  }
}

// 实时监控函数
async function monitorIndonesiaMarket() {
  const indices = await fetchIndonesiaIndices();
  const jci = indices.data.find(index => index.symbol === 'JCI' || index.name.includes('Composite'));
  
  if (jci) {
    console.log(`雅加达综合指数: ${jci.last} (${jci.chg > 0 ? '+' : ''}${jci.chgPct}%)`);
  }
  
  // 监控主要股票
  const stocks = await fetchIndonesiaStocks();
  if (stocks) {
    stocks.data.records.slice(0, 5).forEach(stock => {
      console.log(`${stock.symbol} - ${stock.name}: ${stock.last}`);
    });
  }
}

// 每5分钟执行一次监控
setInterval(monitorIndonesiaMarket, 300000);

实时监控示例

import time
import requests
from datetime import datetime

class IndonesiaMarketMonitor:
    def __init__(self, api_key):
        self.api_key = api_key
        self.previous_prices = {}
    
    def get_stock_data(self, symbol):
        """获取单只股票数据"""
        url = "https://api.stocktv.top/stock/queryStocks"
        params = {
            "countryId": 48,  # 修正为48
            "symbol": symbol,
            "key": self.api_key
        }
        
        try:
            response = requests.get(url, params=params, timeout=10)
            return response.json()
        except Exception as e:
            print(f"获取{symbol}数据失败: {e}")
            return None
    
    def monitor_stocks(self, symbols, interval=60):
        """监控多只股票"""
        while True:
            try:
                current_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
                print(f"\n=== 印尼股市监控 {current_time} ===")
                
                for symbol in symbols:
                    data = self.get_stock_data(symbol)
                    if data and data["code"] == 200 and data["data"]:
                        stock = data["data"][0]
                        current_price = stock["last"]
                        
                        if symbol in self.previous_prices:
                            prev_price = self.previous_prices[symbol]
                            change = current_price - prev_price
                            change_pct = (change / prev_price) * 100
                            
                            trend = "↑" if change > 0 else "↓" if change < 0 else "→"
                            print(f"{symbol} {trend} {current_price:,.0f} ({change:+.0f}, {change_pct:+.2f}%)")
                        else:
                            print(f"{symbol} → {current_price:,.0f} (首次获取)")
                        
                        self.previous_prices[symbol] = current_price
                
                time.sleep(interval)
                
            except KeyboardInterrupt:
                print("\n监控已停止")
                break
            except Exception as e:
                print(f"监控出错: {e}")
                time.sleep(30)

# 使用示例
if __name__ == "__main__":
    monitor = IndonesiaMarketMonitor("您的API密钥")
    # 监控印尼主要股票
    symbols = ["BBCA", "BBRI", "TLKM", "ASII", "UNVR"]
    monitor.monitor_stocks(symbols, interval=300)  # 每5分钟更新

WebSocket实时数据

通过WebSocket获取印尼股票的实时价格数据。

连接示例:

const ws = new WebSocket("wss://ws-api.stocktv.top/connect?key=您的API密钥");

// 连接建立时
ws.onopen = function() {
    console.log("已连接到印尼股市实时数据");
};

// 接收消息时
ws.onmessage = function(event) {
    const data = JSON.parse(event.data);
    
    // 印尼股票通常以.JK后缀标识
    if (data.symbol && data.symbol.includes('.JK')) {
        const symbol = data.symbol.replace('.JK', '');
        console.log(`印尼股票 ${symbol} 实时价格: ${data.last_numeric}`);
        
        // 更新界面显示
        updateStockDisplay(symbol, data.last_numeric, data.chg, data.chgPct);
    }
};

// 错误处理
ws.onerror = function(error) {
    console.error("WebSocket错误:", error);
};

// 连接关闭时
ws.onclose = function() {
    console.log("连接已关闭,尝试重连...");
    setTimeout(connectWebSocket, 5000);
};

// 更新界面显示的函数
function updateStockDisplay(symbol, price, change, changePercent) {
    const element = document.getElementById(`stock-${symbol}`);
    if (element) {
        const trend = change > 0 ? '↑' : change < 0 ? '↓' : '→';
        element.innerHTML = `${symbol}: ${price} <span class="${change > 0 ? 'positive' : change < 0 ? 'negative' : 'neutral'}">${trend} ${change} (${changePercent}%)</span>`;
    }
}

错误处理

错误代码 说明 处理建议
400 参数错误 检查countryId参数是否正确设置为48
401 认证失败 检查API Key是否有效
404 资源不存在 检查股票代码或ID是否正确
500 服务器错误 稍后重试或联系技术支持
503 服务不可用 印尼市场可能处于非交易时间

印尼股市特点

  1. 交易货币: 印尼盾(IDR)
  2. 交易时间: 周一至周五,上午9:00-12:00,下午13:30-16:00
  3. 涨跌幅限制: ±20%(主板),±35%(发展板)
  4. 行业分布: 金融、消费、资源、电信是主要板块
  5. 外资限制: 部分行业有外资持股限制

注意事项

  1. 时区差异: 印尼有三个时区,股市交易以西印尼时间(WIB)为准
  2. 货币单位: 印尼盾面值较大,注意数值处理
  3. 伊斯兰历法: 印尼伊斯兰节日可能影响交易日安排

技术支持

如有疑问或需要帮助,请通过以下方式联系:

  • Telegram: https://t.me/CryptoRzz
  • 邮箱: stocktv.top@outlook.com
  • 技术支持时间: 周一至周五 9:00-18:00 (北京时间)
posted @ 2025-10-10 15:24  CryptoRzz  阅读(24)  评论(0)    收藏  举报