概述
本文档详细说明如何对接StockTV全球股票API中的印度尼西亚股票数据。印尼股票市场是东南亚重要的金融市场之一,以雅加达综合指数为代表。
认证方式
所有API请求都需要在URL参数中包含API Key:
key=您的API密钥
基础信息
- 印度尼西亚国家ID:
countryId=48
- 主要交易所ID:
- 印尼证券交易所(IDX):
exchangeId=61
- 雅加达证券交易所:
exchangeId=61
(同IDX)
- 印尼证券交易所(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 requestsdef 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"] = symbolresponse = 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 resultsblue_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密钥`; // 修正为48if (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 datetimeclass IndonesiaMarketMonitor:def __init__(self, api_key):self.api_key = api_keyself.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 Nonedef 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_pricechange_pct = (change / prev_price) * 100trend = "↑" 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_pricetime.sleep(interval)except KeyboardInterrupt:print("\n监控已停止")breakexcept 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 | 服务不可用 | 印尼市场可能处于非交易时间 |
印尼股市特点
- 交易货币: 印尼盾(IDR)
- 交易时间: 周一至周五,上午9:00-12:00,下午13:30-16:00
- 涨跌幅限制: ±20%(主板),±35%(发展板)
- 行业分布: 金融、消费、资源、电信是主要板块
- 外资限制: 部分行业有外资持股限制
注意事项
- 时区差异: 印尼有三个时区,股市交易以西印尼时间(WIB)为准
- 货币单位: 印尼盾面值较大,注意数值处理
- 伊斯兰历法: 印尼伊斯兰节日可能影响交易日安排
技术支持
如有疑问或需要帮助,请通过以下方式联系:
- Telegram: https://t.me/CryptoRzz
- 邮箱: stocktv.top@outlook.com
- 技术支持时间: 周一至周五 9:00-18:00 (北京时间)