胡志明证券交易所(HOSE)的日均成交额在 2025 年已突破 20 万亿越南盾,外资净买入额连年攀升。Vinamilk(VNM)、Vingroup(VIC)这些标的不仅在本土有影响力,也逐渐进入全球新兴市场投资者的视野。但相比美股、港股,越南市场的行情数据接口在国内讨论得并不多——要么依赖国际券商提供的有限 API,要么自己爬取网页,稳定性堪忧。
最近我在调研东南亚市场的数据方案时,发现一套比较顺手的工具链,借着这篇文章把实践过程记录下来,希望能给对越南股市感兴趣的朋友节省一些踩坑时间。
数据接口的选型思路
最初我考虑过直接用 requests 爬取 Vietstock 或 CafeF 的页面,但很快就遇到两个问题:一是反爬策略越来越严,二是历史 K 线需要自己拼接计算,分钟级数据几乎拿不到。后来转向专业数据服务,对比了几家国际行情提供商,最终选了 itick,理由很朴素:
- 它对越南市场的覆盖以 HOSE 主流标的为主,正好是我需要的范围;
- Python SDK 封装得比较干净,WebSocket 自动重连和心跳保活都内置了,省去自己处理断线重连的麻烦;
- 免费套餐足够跑通流程,确认数据字段后再决定是否升级。
当然,如果你只需要收盘价做回测,用付费的普通 REST 接口也够;但如果要搭建实时看盘或策略监控,WebSocket 推送是更合适的方式。
环境准备与初次调用
安装 SDK 只需要一行:
pip install itick-sdk
注册账号后在后台拿到 token,就可以开始调用了。越南市场的 region 参数固定为 "VN",股票代码沿用 HOSE 的惯例(如 VNM、VIC、VCB)。
from itick.sdk import Client
client = Client("your_api_token")
# 获取 VNM 实时报价
quote = client.get_stock_quote("VN", "VNM")
print(quote)
返回的字段结构和其他新兴市场保持一致,核心字段包括:
ld—— 最新价ch/chp—— 涨跌额 / 涨跌幅o/h/l—— 开 / 高 / 低ts—— 交易状态(正常、熔断、停牌等)
这里特别提醒:越南股市有涨跌停板(HOSE 为 ±7%),如果 ts 字段显示熔断或停牌,一定不能把旧价格当作实时价展示,否则会误导用户。
历史 K 线获取与常用周期
对于回测或技术分析,历史 K 线是刚需。itick 的 get_stock_kline 接口支持从 1 分钟到月线多种周期,kType 参数对应关系如下:
| kType | 周期 |
|---|---|
| 1 | 1分钟 |
| 2 | 5分钟 |
| 3 | 15分钟 |
| 4 | 30分钟 |
| 5 | 1小时 |
| 8 | 日线 |
| 9 | 周线 |
| 10 | 月线 |
以下代码获取 Vingroup(VIC)近 60 个交易日的日线数据:
kline = client.get_stock_kline("VN", "VIC", 8, 60)
for bar in kline:
print(f"{bar['t']} O:{bar['o']} H:{bar['h']} L:{bar['l']} C:{bar['c']}")
返回的时间戳是 Unix 毫秒级,转换成北京时间需要注意时差(越南比北京慢 1 小时)。另外,越南盾面值较大,价格字段本身是整数或浮点数,前端渲染时记得做千分位格式化,避免一长串零影响阅读。
WebSocket 实时推送与分钟级 K 线
如果你需要做盘中实时监控或动态图表,REST 轮询的效率不够,WebSocket 是更好的选择。itick 的 SDK 已经封装好了连接、心跳和自动重连逻辑(5 秒间隔,最多 10 次重试),我们只需关注消息处理:
def on_message(msg):
print("收到推送:", msg)
def on_error(err):
print("连接错误:", err)
client.set_message_handler(on_message)
client.set_error_handler(on_error)
client.connect_stock_websocket()
# 订阅 VNM 和 VIC 的实时报价 + 1分钟 K 线推送
client.send_websocket_message(
'{"ac":"subscribe","params":"VNM$VN,VIC$VN","types":"quote,kline@1"}'
)
这里有个实际成本考量:kline@1(1 分钟 K 线实时推送)在 itick 的免费和基础套餐里是不可用的,需要 Premium 及以上或者单独购买股票数据包。如果你的产品对分钟级数据实时性要求不高,完全可以退而求其次,用 REST 接口每 60 秒拉取一次最新 K 线,成本会低很多,且逻辑足够简单。
对于日线级别的展示,REST 拉取已经绰绰有余,WebSocket 主要优势体现在需要捕捉盘中异动的场景。
越南市场特有的几个注意事项
- 交易所区分:HOSE 是胡志明市主板,HNX 是河内交易所(类似创业板)。itick 目前主要覆盖 HOSE 标的,如果需要查询某只代码是否支持,可以先调用
get_symbol_list("VN")遍历确认。 - 节假日与交易时段:越南股市交易时间为周一至周五的 9:00-11:30 和 13:00-14:45(越南时间),比 A 股早收盘。做定时任务时要注意时区和节假日日历,避免无效请求。
- 流动性分层:HOSE 上头部股票(VNM、VIC、VCB、HPG)流动性很好,但一些小盘股日内成交稀疏,tick 数据可能跳变较大,回测时需注意处理非活跃时段的数据。
如果扩展到其他东南亚市场
这套代码的可移植性是我比较满意的地方。itick 对印尼(ID)、菲律宾(PH)、马来西亚(MY)等市场也有支持,后续如果要做跨市场对比,只需要把 region 参数换成对应的国家代码,其余字段结构基本一致,开发成本非常低。
当然,前提是先确认目标市场在 itick 的产品目录中是否有 coverage——这一点建议直接查阅官方文档的 symbol 列表,比盲目尝试更高效。
结语
从零开始接入越南行情数据,其实没想象中复杂。一套 SDK + 几行代码就能拿到可用的实时报价和历史 K 线,剩下的精力可以放在策略逻辑和前端交互上。至于选哪家数据服务商,我觉得关键看三点:市场覆盖是否匹配、接口稳定性和维护成本、以及定价与自身需求的契合度。itick 在我这次调研中表现合格,特别是免费套餐让前期验证几乎没有门槛,算是比较务实的选择。
如果你也在研究东南亚市场,欢迎交流。数据是投资的起点,但远不是终点——祝大家都能在胡志明指数的起伏中找到自己的节奏。
参考文档:https://docs.itick.org/rest-api/stocks/stock-kline
GitHub:https://github.com/itick-org/
