越南股市数据获取实践:用 Python 轻松接入 HOSE 实时行情

胡志明证券交易所(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周期
11分钟
25分钟
315分钟
430分钟
51小时
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/

0
0
0
0
评论
未登录
暂无评论