继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

外汇行情不准,竟是休市没判断对?

kelos
关注TA
已关注
手记 36
粉丝 0
获赞 1

最近在做外汇行情相关的课程项目,踩了一个很典型的坑:节假日休市时数据不更新,程序还在跑,结果逻辑全乱了。今天把我从踩坑到解决的完整过程整理成手记,方便大家直接复用。


一、为什么外汇休市判断这么麻烦?

外汇是全球市场,伦敦、纽约、东京、悉尼轮着开盘,时区、节假日、夏令时、半天交易全都不一样。

我一开始天真地用固定时间判断:几点开盘、几点收盘。很快就翻车:

  • 欧美夏令时一换,开盘时间直接前移一小时;

  • 各国节假日完全不统一,手动维护年年漏;

  • 临时提前收盘、突发闭市,硬编码根本扛不住。

简单说:靠自己写交易日历,又累又不准。

先把主流市场正常交易时间(北京时间)记下来,方便对照:

  • 伦敦:16:00 – 次日 01:00

  • 纽约:21:00 – 次日 06:00

  • 东京:08:00 – 17:00

  • 悉尼:06:00 – 15:00


二、两种方案对比:我选了最简单稳定的

方案 1:自己维护节假日表

优点:直观、好理解。缺点:维护成本高、易漏、不能自动适配夏令时和临时休市。适合小作业,不适合线上项目。

方案 2:让 API 告诉你 “开没开盘”

很多外汇实时 API 会返回 isOpen / marketStatus 字段,直接告诉你当前市场是否开市。一句话:不用猜,API 直接给结果

我用 AllTick API 的 WebSocket 做了实战,代码直接可用:

import websocket
import json

def on_message(ws, message):
    data = json.loads(message)
    if not data.get("isOpen"):
        print("市场休市,跳过数据")
        return
    # 正常处理tick数据
    print(data["symbol"], data["lastPrice"])

ws = websocket.WebSocketApp(
    "wss://apis.alltick.co/ws/quote",
    on_message=on_message
)
ws.run_forever()

逻辑非常干净:休市就跳过,开市才处理,完全不用管节假日和夏令时。


三、课程项目里常见的 3 个坑(亲测有效)

  1. 夏令时不用改代码:API 会自动调整时段,isOpen 自动同步。

  2. 半天交易要过滤:提前收盘时数据虽然有,但量少、容易失真,用状态字段直接跳过。

  3. 跨市场别乱堆数据:同一货币对优先用主市场状态,避免多个来源打架。


四、学完这个,你能得到什么?

  • 不再手动维护复杂的节假日表,省时间、少出错

  • 自动适配节假日、夏令时、临时休市,代码更稳

  • 实盘、回测、行情展示都能用,一套逻辑通吃


五、小结

做外汇项目,别自己硬写休市规则,交给专业 API。用 isOpen 字段做判断,简单、干净、稳定,课程作业和线上项目都够用。

如果你也在做量化 / 金融数据相关练习,建议直接把这套代码拿去跑一遍,印象会很深。


打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP