前段时间帮一个做东南亚资讯站的朋友对接泰国股市数据,顺手把整个流程记录下来,正好也是泰国股票API、SET实时行情、泰国历史K线这几个搜索需求的答案。泰国证券交易所(SET)的PTT、CPALL、AOT这几只权重股基本是所有东南亚资讯产品的标配,用itick的Python SDK对接起来其实挺顺畅的。

朋友的产品是个泰股资讯聚合站,需要两块数据:一是首页展示的实时报价滚动条,二是个股详情页的K线图。这两块正好对应itick的WebSocket实时推送和REST历史K线两套接口,不需要额外接第三方数据源。
pip install itick-sdk去itick.org注册账号拿token,这个流程跟其他市场没区别,itick的账号体系是全市场通用的,不需要为每个国家单独开账号。
from itick.sdk import Client
token = "your_api_token"
client = Client(token)
# 泰国region代码是TH
# PTT石油天然气公司
kline = client.get_stock_kline("TH", "PTT", 8, 90)
print("PTT日K线(近90天):", kline)
# 匹迈泰国机场公司 AOT,小时线
kline_aot = client.get_stock_kline("TH", "AOT", 5, 24)
print("AOT小时线:", kline_aot)这个接口返回的数据结构里t是时间戳、o/h/l/c是开高低收、v是成交量,直接喂给前端的K线图表库(比如TradingView的轻量图表)就能画图,字段名不用做二次映射。
import time
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()
# 同时订阅三只泰国权重股的报价
client.send_websocket_message(
'{"ac":"subscribe","params":"PTT$TH,CPALL$TH,AOT$TH","types":"quote"}'
)
time.sleep(20)
client.close_websocket()推送过来的quote数据长这样,字段说明我顺手也列一下:
{
"code": 1,
"data": {
"s": "PTT",
"r": "TH",
"ld": 34.25,
"o": 34.0,
"h": 34.5,
"l": 33.75,
"p": 33.9,
"ch": 0.35,
"chp": 1.03,
"v": 15234000,
"tu": 521000000,
"ts": 0,
"t": 1731689407000,
"type": "quote"
}
}p是昨收价,ch和chp是涨跌额与涨跌幅,这两个字段就是滚动条上红涨绿跌的数据来源,泰股这边跟A股一样是涨红跌绿的显示习惯,做前端展示的时候记得区分好颜色逻辑,别套用美股那套涨绿跌红的配色,不然本地用户看着会觉得很奇怪。
刚开始对接的时候订阅老是收不到推送,排查了半天发现是订阅时间刚好是泰国市场的午休时段(泰股中午有个休市时间),交易时间之外自然没有tick推送,这个属于市场本身的交易时段问题,不是接口的锅。后来加了个逻辑,非交易时间用REST接口的quote拿最后收盘价顶着展示,交易时间再切回WebSocket实时推送,体验上就顺畅多了。
这块跟其他市场一样,SDK自动处理心跳(30秒一次)和断线重连(5秒间隔,最多10次),重连之后订阅也会自动恢复,朋友的产品跑了大概两周没出现过手动介入重连的情况,稳订性还可以。
泰国这条线对接下来,最大的收获其实是搞清楚了本地交易时段和涨跌颜色这些"非技术"细节,接口本身的调用跟其他市场没什么差别,region传TH就行。如果你也在做东南亚市场的资讯或者量化产品,这套流程可以直接复用到越南、新加坡这些相邻市场。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。