PHP对接马来西亚股票API:实时数据、IPO与K线方案
对接马来西亚股票市场,获取实时行情、历史K线、指数与IPO信息,是金融数据应用的核心场景。以下基于StockTV API,整理一套完整的PHP对接方案,覆盖从基础配置到核心接口调用,再到WebSocket实时推送的完整链路。
一、基础配置
调用任何接口前,必须先获取API Key,这是所有请求的通行凭证。配置一个基础请求函数,后续所有接口均通过它发起HTTP GET请求。
'CURL Error: ' . curl_error($ch)];
}
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
$decoded = json_decode($response, true);
if (json_last_error() !== JSON_ERROR_NONE) {
return ['error' => 'JSON Decode Error'];
}
return $decoded;
}
?>
二、马来西亚股票核心数据对接
根据官方文档,股票相关接口集中在 /stock/ 路径下。马来西亚的关键参数是 countryId=42,后续所有接口均需使用此编码。
1. 获取马来西亚市场股票列表
最基础的接口——分页拉取马来西亚交易所全部股票,返回包含实时行情、基本面和技术指标,数据量非常全面。
42, // 马来西亚
'page' => $page,
'pageSize' => $pageSize,
];
if ($exchangeId !== null) {
$params['exchangeId'] = $exchangeId; // 可用于筛选特定交易所
}
return stocktvApiRequest($endpoint, $params);
}
// 使用示例
$result = getMalaysiaStockList(1, 10);
if (isset($result['code']) && $result['code'] == 200) {
$stocks = $result['data']['records'];
echo "马来西亚股票列表(第1页,共" . $result['data']['total'] . "只):n";
foreach ($stocks as $stock) {
$trend = $stock['chgPct'] >= 0 ? '↑' : '↓';
echo sprintf(" %s (%s): %.3f %s%.2f%%n",
$stock['name'],
$stock['symbol'],
$stock['last'],
$trend,
abs($stock['chgPct'])
);
}
} else {
echo "请求失败: " . ($result['message'] ?? '未知错误');
}
?>
接口返回字段说明(摘自官方文档):
id: 股票的唯一PID,后续查询K线或订阅WebSocket时使用。name/symbol: 股票名称与代码。last/chg/chgPct: 最新价、涨跌额、涨跌幅。high/low: 当日最高/最低价。volume: 成交量。open: 是否开市。technicalDay/technicalHour等: 日线/小时线技术指标信号(如strong_buy)。
2. 查询特定马来西亚股票
若已知股票的PID、代码或名称,可通过此接口精确查询。注意该接口不含 countryId 参数,返回结果涵盖全球股票,需手动筛选 flag 为 'MY' 的条目。
3. 获取马来西亚市场指数
富时大马综合指数(FTSE Bursa Malaysia KLCI)等基准指数,通过此接口即可获取。
42, // 马来西亚
];
return stocktvApiRequest($endpoint, $params);
}
?>
4. 获取马来西亚股票K线数据
技术分析的核心环节。支持多种时间周期:5分钟、15分钟、1小时、5小时、日线、周线、月线,对应的 interval 参数分别为 PT5M、PT15M、PT1H、PT5H、P1D、P1W、P1M。
$pid,
'interval' => $interval,
];
return stocktvApiRequest($endpoint, $params);
}
// 使用示例:获取某股票(PID=41602)的日K线
$klineData = getMalaysiaStockKline(41602, 'P1D');
if (isset($klineData['code']) && $klineData['code'] == 200) {
$klines = $klineData['data'];
echo "K线数据(日线)最新3条:n";
$recent = array_slice($klines, -3); // 取最后3条
foreach ($recent as $bar) {
$date = date('Y-m-d', $bar['time'] / 1000);
echo "日期: {$date}, 开:{$bar['open']}, 高:{$bar['high']}, 低:{$bar['low']}, 收:{$bar['close']}, 量:{$bar['volume']}n";
}
}
?>
5. 获取马来西亚IPO新股日历
追踪马来西亚市场新股发行与上市计划,该接口返回待上市和已上市的IPO信息。
42];
if (in_array($type, [1, 2])) {
$params['type'] = $type;
}
return stocktvApiRequest($endpoint, $params);
}
?>
6. 获取马来西亚股票涨跌排行榜
实时捕捉市场热点:涨幅榜、跌幅榜、涨停榜、跌停榜,通过 type 参数控制。
42,
'type' => $type,
];
return stocktvApiRequest($endpoint, $params);
}
?>
三、高级功能:WebSocket 实时数据
若仅需静态数据,上述HTTP接口足够。但如果需要实时行情推送——比如监控自选股价格变化——必须使用WebSocket,它比HTTP轮询高效得多。马来西亚股票的实时数据同样通过此方式获取。
关键步骤:
- 连接:连接到
wss://ws-api.stocktv.top/connect?key=您的Key。 - 订阅:连接成功后,发送订阅消息,指定要订阅的马来西亚股票的
pid。 - 接收:服务器持续推送订阅股票的实时行情。
- 心跳:定期发送心跳消息以保持连接。
文档提供了一个前端Demo,后端方面有Ja va示例。至于PHP,可使用 ratchet/pawl 这类WebSocket客户端库实现。具体实现依赖业务场景,此处不展开完整代码,但核心流程即上述四步。
四、完整对接流程与注意事项
- 获取API Key——第一道门槛,所有请求必须携带
key参数。 根据数据需求选择接口:
- 批量列表/监控:用
getMalaysiaStockList或getMalaysiaStockRank。 - 特定股票查询:用
queryMalaysiaStock,或先从列表接口获取股票的pid。 - 历史数据分析:用
getMalaysiaStockKline。 - 实时推送:必须使用WebSocket接口。
- 市场概况:用
getMalaysiaIndices。 - 新股信息:用
getMalaysiaIpo。
- 批量列表/监控:用
核心参数说明:
countryId: 马来西亚固定为 42。pid: 股票的唯一标识,用于K线、WebSocket订阅等精细操作。务必从列表或查询接口获取正确的pid。interval: K线周期,根据分析需求选择。
- 错误处理与日志:生产环境中,必须对API返回的
code和message做校验,并记录日志,便于问题追踪。 - 性能与频率:虽然文档未明确限制请求频率,但应避免高频轮询。若需对大量股票做实时监控,WebSocket是唯一推荐方案——HTTP轮询的负载和延迟无法满足要求。
以上接口覆盖了马来西亚股票市场的主要数据需求:实时行情、历史K线、市场指数、IPO信息、涨跌排行。实际使用时,根据具体场景组合调用这些函数即可。
