马来西亚股票数据API对接文档

news/2025/9/23 10:31:54/文章来源:https://www.cnblogs.com/CryptoRzz/p/19106713

马来西亚股票数据API对接文档

本文档提供StockTV马来西亚股票市场(Bursa Malaysia)数据API的完整对接指南,包含实时行情、历史数据、公司信息等核心功能

一、接口概览

1.1 支持交易所

交易所代码 交易所名称 覆盖股票数量
MYX 马来西亚交易所 900+

1.2 数据特性

  • 实时行情:毫秒级延迟
  • 历史数据:支持最长10年历史K线
  • 基本面数据:包含PE比率、市值等指标
  • 多维度数据:指数、IPO、公司信息等
  • 数据格式:统一JSON格式
  • 货币单位:所有价格均为马来西亚林吉特(MYR)

二、接入准备

2.1 获取API Key

联系官方获取密钥:https://t.me/CryptoRzz

2.2 请求基础URL

https://api.stocktv.top

2.3 请求头设置

X-Api-Key: YOUR_API_KEY
Content-Type: application/json

三、核心接口说明

3.1 市场列表接口

获取马来西亚交易所股票列表

接口地址

GET /stock/stocks

请求参数

参数 必选 说明 示例值
countryId 国家ID(马来西亚为42) 42
exchangeId 交易所ID(MYX为62) 62
pageSize 每页数量 100
page 页码 1

响应示例

{"code": 200,"data": {"records": [{"id": 41602,           // 股票唯一ID"symbol": "MAYBANK",   // 股票代码"name": "Malayan Banking Berhad","last": 9.25,          // 最新价"chgPct": 0.5,         // 涨跌幅%"volume": 1241700,     // 成交量"high": 9.30,          // 当日最高"low": 9.20,           // 当日最低"open": true,          // 是否开市"cfd": false,          // 是否为CFD"marketCap": 105000000000 // 市值(百万MYR)}],"total": 900,"pages": 9}
}

3.2 股票详情查询

获取指定股票实时行情

接口地址

GET /stock/queryStocks

请求参数

参数 必选 说明 示例值
id 股票ID 41602

响应示例

{"code": 200,"data": [{"id": 41602,"symbol": "MAYBANK","name": "Malayan Banking Berhad","last": 9.25,"prevClose": 9.20,       // 前收盘价"open": 9.22,            // 开盘价"high": 9.30,"low": 9.20,"volume": 1241700,"avgVolume": 1150000,    // 平均成交量"peRatio": 12.5,         // 市盈率"eps": 0.74,             // 每股收益"dividendYield": 5.4,    // 股息率"beta": 0.92,            // Beta值"sector": "Financial"    // 行业分类}]
}

3.3 指数数据

获取马来西亚主要指数行情

接口地址

GET /stock/indices

请求参数

参数 必选 说明 示例值
countryId 国家ID(马来西亚为42) 42

响应示例

{"code": 200,"data": [{"id": 18460,"symbol": "KLSE",       // 吉隆坡综合指数"name": "FTSE Bursa Malaysia KLCI","last": 1605.25,"change": 12.45,        // 涨跌额"changePct": 0.78,      // 涨跌幅%"high": 1608.50,"low": 1598.75,"prevClose": 1592.80,"time": 1716458537      // 更新时间戳}]
}

3.4 历史K线数据

获取股票历史价格数据

接口地址

GET /stock/kline

请求参数

参数 必选 说明 示例值
pid 股票ID 41602
interval 时间粒度 PT15M(15分钟)
P1D(日线)

响应示例

{"code": 200,"data": [{"time": 1725004800000, // 时间戳(ms)"open": 9.22,"high": 9.30,"low": 9.20,"close": 9.25,"volume": 1241700},// 更多K线数据...]
}

四、高级数据接口

4.1 IPO新股日历

获取即将上市的新股信息

接口地址

GET /stock/getIpo

请求参数

参数 必选 说明 示例值
countryId 国家ID 42
type 1=即将上市, 2=已上市 1

响应示例

{"code": 200,"data": [{"id": 28,"company": "Tech Solutions Malaysia","symbol": "TSM","exchange": "MYX","ipoPrice": "1.20",       // 发行价"listingDate": "2024-10-15", // 上市日期"ipoValue": "500M",       // 发行市值"last": "1.18",           // 最新价"pid": 1218998            // 股票ID}]
}

4.2 涨跌排行榜

获取涨幅榜/跌幅榜数据

接口地址

GET /stock/updownList

请求参数

参数 必选 说明 示例值
countryId 国家ID 42
type 1=涨幅榜, 2=跌幅榜, 3=涨停, 4=跌停 1

响应示例

{"code": 200,"data": [{"id": 41605,"symbol": "SIME","name": "Sime Darby Berhad","last": 2.85,"change": 0.25,"changePct": 9.62,"volume": 4500000}]
}

4.3 公司基本面数据

获取公司详细信息

接口地址

GET /stock/companies

请求参数

参数 必选 说明 示例值
countryId 国家ID 42
pageSize 每页数量 10
page 页码 1

响应示例

{"code": 200,"data": {"records": [{"companyName": "Malayan Banking Berhad","description": "马来西亚最大的银行集团...","industry": "Banking","sector": "Financial Services","employeeCount": 42000,"market": "Malaysia","url": "/equities/maybank","financials": {"revenue": "52.4B MYR",  // 营收"netIncome": "8.2B MYR",  // 净利润"assets": "890.5B MYR"    // 总资产}}],"total": 900,"pages": 90}
}

五、实时数据推送

5.1 WebSocket连接

wss://ws-api.stocktv.top/connect?key=YOUR_API_KEY

5.2 订阅消息

{"action": "subscribe","pids": [41602, 41605]  // 订阅的股票ID列表
}

5.3 实时数据格式

{"pid": "41602",         // 股票ID"symbol": "MAYBANK",    // 股票代码"last": "9.25",         // 最新价"change": "0.05",       // 涨跌额"changePct": "0.5",     // 涨跌幅%"volume": "1241700",    // 成交量"bid": "9.24",          // 买一价"ask": "9.26",          // 卖一价"high": "9.30",         // 当日最高"low": "9.20",          // 当日最低"open": "9.22",         // 开盘价"prevClose": "9.20",    // 前收盘"timestamp": 1725008213  // 更新时间
}

5.4 心跳机制

客户端需每30秒发送心跳消息:

{"action": "ping"}

六、代码示例

6.1 Python获取股票数据

import requestsdef get_malaysia_stocks():"""获取马来西亚股票列表"""url = "https://api.stocktv.top/stock/stocks"params = {"countryId": 42,    # 马来西亚国家ID"exchangeId": 62,   # MYX交易所"pageSize": 100,"key": "YOUR_API_KEY"}try:response = requests.get(url, params=params)if response.status_code == 200:data = response.json()if data["code"] == 200:for stock in data["data"]["records"]:print(f"{stock['symbol']}: {stock['name']} - {stock['last']} MYR")else:print(f"API Error: {data['message']}")else:print(f"Request failed with status: {response.status_code}")except Exception as e:print(f"Error fetching stock list: {str(e)}")# 调用函数
get_malaysia_stocks()

6.2 Java实时数据订阅

import org.java_websocket.client.WebSocketClient;
import org.java_websocket.handshake.ServerHandshake;import java.net.URI;public class MalaysiaStockWS extends WebSocketClient {public MalaysiaStockWS(URI serverUri) {super(serverUri);}@Overridepublic void onOpen(ServerHandshake handshakedata) {System.out.println("Connected to Malaysia Stock API");// 订阅MAYBANK和PUBLIC BANK股票send("{\"action\":\"subscribe\",\"pids\":[41602, 41603]}");}@Overridepublic void onMessage(String message) {System.out.println("Received: " + message);// 实际应用中解析JSON并处理实时数据}@Overridepublic void onClose(int code, String reason, boolean remote) {System.out.println("Connection closed: " + reason);}@Overridepublic void onError(Exception ex) {ex.printStackTrace();}public static void main(String[] args) {String wsUrl = "wss://ws-api.stocktv.top/connect?key=YOUR_API_KEY";MalaysiaStockWS client = new MalaysiaStockWS(URI.create(wsUrl));client.connect();}
}

6.3 Node.js获取K线数据

const axios = require('axios');async function getKlineData() {try {const response = await axios.get('https://api.stocktv.top/stock/kline', {params: {pid: 41602,        // MAYBANK股票IDinterval: 'P1D'    // 日线数据},headers: {'X-Api-Key': 'YOUR_API_KEY'}});console.log('MAYBANK Historical Data:');response.data.data.forEach(kline => {const date = new Date(kline.time);console.log(`${date.toISOString().split('T')[0]}: ${kline.open} - ${kline.close}`);});} catch (error) {console.error('API Error:', error.response ? error.response.data : error.message);}
}getKlineData();

七、最佳实践

7.1 数据缓存策略

from cachetools import TTLCache
import time# 创建缓存,有效期5秒
stock_cache = TTLCache(maxsize=100, ttl=5)def get_stock_quote(stock_id):"""获取股票行情(带缓存)"""# 检查缓存if stock_id in stock_cache:return stock_cache[stock_id]# 调用API获取数据quote = fetch_from_api(stock_id)# 存入缓存if quote:stock_cache[stock_id] = quotereturn quote

7.2 错误处理与重试

import requests
import timedef fetch_with_retry(url, params, max_retries=3):"""带重试机制的API请求"""for attempt in range(max_retries):try:response = requests.get(url, params=params, timeout=5)if response.status_code == 200:data = response.json()if data.get("code") == 200:return dataelif data.get("code") == 429:  # 请求过多retry_after = int(data.get("retryAfter", 10))print(f"请求过于频繁,等待 {retry_after} 秒后重试...")time.sleep(retry_after)else:print(f"API返回错误: {data.get('message')}")else:print(f"请求失败,状态码: {response.status_code}")except Exception as e:print(f"请求异常: {str(e)}")if attempt < max_retries - 1:wait = 2 ** attempt  # 指数退避print(f"等待 {wait} 秒后重试 (尝试 {attempt+1}/{max_retries})")time.sleep(wait)print(f"请求失败,已达最大重试次数 {max_retries}")return None

7.3 实时数据批处理

class RealTimeBatchProcessor:def __init__(self, batch_size=10, batch_interval=0.5):self.batch_size = batch_sizeself.batch_interval = batch_intervalself.buffer = {}self.last_process_time = time.time()def add_data(self, symbol, data):"""添加实时数据到缓冲区"""if symbol not in self.buffer:self.buffer[symbol] = []self.buffer[symbol].append(data)# 检查是否达到批处理条件current_time = time.time()if (len(self.buffer[symbol]) >= self.batch_size or current_time - self.last_process_time >= self.batch_interval):self.process_batch(symbol)self.last_process_time = current_timedef process_batch(self, symbol):"""处理缓冲区的数据"""if symbol not in self.buffer or not self.buffer[symbol]:returndata_points = self.buffer[symbol]# 计算统计指标prices = [d["last"] for d in data_points]volumes = [d["volume"] for d in data_points]avg_price = sum(prices) / len(prices)max_price = max(prices)min_price = min(prices)total_volume = sum(volumes)print(f"\n{symbol} 实时数据统计 (最近 {len(data_points)} 个更新):")print(f"平均价格: {avg_price:.2f}, 最高: {max_price:.2f}, 最低: {min_price:.2f}")print(f"总成交量: {total_volume}")# 清空缓冲区self.buffer[symbol] = []

八、数据字典

8.1 马来西亚主要指数

代码 指数名称 说明
KLSE 富时大马综合指数 马来西亚主要股票指数
FBM70 富时大马70指数 70家市值最大的公司
FBMEMAS 富时大马EMAS指数 大马交易所全股指数

8.2 交易时间(马来西亚时间)

交易时段 时间 说明
早盘 09:00-12:30 上午交易时段
午休 12:30-14:30 市场休市
午盘 14:30-17:00 下午交易时段

8.3 行业分类

分类代码 行业名称
FINANCE 金融
PLANTATION 种植业
INDUSTRIAL 工业
PROPERTY 房地产
CONSUMER 消费

十、附录

10.1 常见问题解答

Q: 如何获取马来西亚股票的英文名称?
A: API默认返回英文名称,如需本地名称可在请求头中添加 X-Language: ms

Q: 马来西亚股票的交易单位是多少?
A: 大部分股票交易单位为100股,但API返回的价格为每股价格

Q: 支持哪些历史数据粒度?
A: 支持1分钟、5分钟、15分钟、30分钟、1小时、日线、周线、月线

Q: 是否有盘前盘后数据?
A: 马来西亚股市不提供盘前盘后交易

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/912219.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

电子类网站建设wordpress文章名加后缀

在 Apache Flink 中&#xff0c;时间在流处理中是一个重要的概念&#xff0c;而时间语义则用于定义事件发生的时间。Flink 支持三种时间语义&#xff0c;分别是&#xff1a; Processing Time&#xff08;处理时间&#xff09;&#xff1a; 以机器的系统时间为基准&#xff0c;…

网站建设下单源码莱芜金点子信息港二手市场

参考 ​​​​​​【RabbitMQ】RabbitMQ架构模型_rabbitmq结构模型-CSDN博客 之前的学习都只是知道名字&#xff0c;但并没有真正的理解&#xff0c;每次看还是不懂&#xff0c;所以今日理解透 &#xff01; RabbitMQ 收发消息过程如下&#xff1a; 首先从消费者开始&#xff1…

深圳建企业网站公司云主机 asp 网站

1. 简述 SVM涉及的东西很多&#xff0c;如果要理解全面的话&#xff0c;要理解经验风险与置信风险&#xff0c;VC维理论&#xff0c;推导出最优化公式&#xff0c;最优化求解的拉格朗日解法&#xff0c;核函数&#xff0c;等等方面的内容&#xff0c;当前对SVM理解太少&#xf…

网站开发架构分类58同城推广电话

简介&#xff1a; 如何使用Spark On MaxCompute连接Phonix&#xff0c;将Hbase的数据写入到MaxCompute的对应表中&#xff0c;目前没有对应的案例&#xff0c;为了满足用户的需求。本文主要讲解使用Spark连接Phonix访问Hbase的数据再写入到MaxCompute方案实践。该方案的验证是使…

tuzicms做企业手机网站如何上海 房地产网站建设

一、消息队列消息队列中间件是分布式系统中重要的组件&#xff0c;主要解决应用耦合、异步消息、流量削锋等问题&#xff0c;实现高性能、高可用、可伸缩和最终一致性架构&#xff0c;是大型分布式系统不可缺少的中间件。目前在生产环境中使用较多的消息队列有ActiveMQ、Rabbit…

网站架构设计图怎么做wordpress网站如何播放视频

组合评价模型—模糊Borda(Matlab) 我们的征途是星辰大海&#xff0c;而并非烟尘人间。 目录 组合评价模型—模糊Borda(Matlab) 一、模糊Borda法简介 二、模糊Borda法主要步骤 &#xff08;1&#xff09;计算隶属度 &#xff08;2&#xff09;计算模糊频数 &#xff08;…

门源县住房和城乡建设局网站wordpress+悬浮+登录

目录 欧拉函数一、用公式求代码 二、线性筛法求欧拉函数扩展欧拉定理 欧拉函数 AcWing 873. 欧拉函数 一、用公式求 定义&#xff1a;1 ~ N 中与 N 互质的数的个数被称为欧拉函数&#xff0c;记为ϕ(N)。 怎么求呢&#xff1f;&#xff1f; 有一个公式&#xff1a; N p1a1 X…

中国铁道工程建设协会查证网站微信crm管理系统免费

zookeeper 集群 1、zookeeper 集群说明 initLimit 是Zookeeper用它来限定集群中的Zookeeper服务器连接到Leader的时限 syncLimit 限制了follower服务器与leader服务器之间请求和应答之间的时限 服务器名称与地址&#xff1a;集群信息&#xff08;服务器编号&#xff0c;服务器…

[OpenGL]相机环境

[OpenGL]相机环境pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Cou…

指令流水线的影响因素

机器周期的设置 为了方便流水线设计,每个阶段耗时都设置成一样的,以最长耗时为准 影响流水线的因素 结构相关(资源冲突) 多条指令在同一个时间争夺使用同一个资源而形成的冲突称为结构相关 例子在书本第257页第一张…

HT-SC4PS-33+:小功分大胃口,300 MHz-3 GHz全场通吃

HT-SC4PS-33+:小功分大胃口,300 MHz-3 GHz全场通吃HT-SC4PS-33+ 是成都恒利泰推出的 300-3000 MHz 超宽带一分四贴片功分器,插损低到 1.6 dB,隔离度 17 dB,幅度不平衡仅 0.4 dB,-40 ℃~+85 ℃全温漂得住;5G 小基…

网站开发新乡网站建设服务

os模块 在Python中文件和文件夹的操作要借助os模块里面的相关功能&#xff0c;具体步骤如下&#xff1a; 第一步&#xff1a;导入os模块 import os 第二步&#xff1a;调用os模块中的相关方法 os.函数名() 与文件操作相关方法 编号函数功能1os.rename(目标文件名称&…

济南建设厅网站安全员威海建设局网站楼盘信息公布

文章目录 1. 概述2. 内连接3. 外连接4. 自连接5. 联合查询-union,union all6. 子查询 1. 概述 在项目开发中&#xff0c;在进行数据库表结构设计是&#xff0c;会根据业务需求和业务模块之间的关系&#xff0c;分析并设计表结构&#xff0c;由于业务之间相互关联&#xff0c;所…

东莞市建设安监局网站首页网站运行维护

1.摘要 在细粒度图像识别(FGIR)中&#xff0c;区域注意力的定位和放大是一个重要因素&#xff0c;基于卷积神经网络(cnn)的方法对此进行了大量探索。近年来发展起来的视觉变压器(ViT)在计算机视觉任务中取得了可喜的成果。与cnn相比&#xff0c;图像序列化是一种全新的方式。然…

win7网站后台无法编辑青原区城乡建设局门户网站

接入CDN对免备案网站服务器来说有以下几个好处&#xff1a; 提高网站的访问速度&#xff1a;CDN会将网站的静态资源&#xff08;如图片、文档等&#xff09;缓存到离用户最近的节点服务器上&#xff0c;用户访问时可以从离他们最近的节点服务器获取资源&#xff0c;加快访问速度…

个人网站带论坛 备案百度发布信息的免费平台

摘要&#xff1a;在本博客中介绍了基于YOLOv8/v7/v6/v5的机场航拍小目标检测系统。该系统的核心技术是采用YOLOv8&#xff0c;并整合了YOLOv7、YOLOv6、YOLOv5算法&#xff0c;从而进行性能指标的综合对比。我们详细介绍了国内外在机场航拍小目标检测领域的研究现状、数据集处理…

高端网站的制作做标签这个网站刷单安全吗

UI Automator为Android程序的UI开发提供了测试环境,这里我们就来看一下Android App开发的自动化测试框架UI Automator使用教程,需要的朋友可以参考下 Android的自动化测试有很多框架&#xff0c;其中ui automator是google官方提供的黑盒UI相关的自动化测试工具&#xff0c;&am…

电子商务网站用什么语言开发辽宁建设工程信息网站

“我讲课不割韭菜&#xff0c;宗旨是免费、分享、科普、交流。AI时代技术发展迅速&#xff0c;AI知识普及尤为重要。”2月29日&#xff0c;360公司创始人周鸿祎免费课正式开启&#xff0c;全网多平台直播了AI系列第一讲“预见AGI”&#xff0c;千万网友观看。免费课上&#xff…

像素时代网站建设手机站设计wordpress的.htaccess

目录 自动映射 表映射 字段映射 字段失效 视图属性 Mybatis框架之所以能够简化数据库操作&#xff0c;是因为他内部的映射机制&#xff0c;通过自动映射&#xff0c;进行数据的封装&#xff0c;我们只要符合映射规则&#xff0c;就可以快速高效的完成SQL操作的实现。既然…

[vscode] 快捷键记录

[vscode] 快捷键记录$(".postTitle2").removeClass("postTitle2").addClass("singleposttitle");1. 代码折叠 1.1 折叠所有: Windows/Linux: Ctrl + K, Ctrl + 0 (先按 Ctrl+K,然后按…