外汇量化:非交易日行情数据过滤实战

用户头像sh_****447dvu
2026-05-08 发布

在外汇量化策略研发与实盘运行过程中,实时汇率数据的有效性直接影响信号生成、风险控制与回测可信度。一个高频且易被忽视的问题是:非交易时段,行情接口仍持续推送历史收盘数据,造成策略误触发、告警失效、回测曲线失真。

本文以实战视角,给出一套轻量、稳定、可直接集成到量化框架的数据过滤逻辑,解决非交易日无效数据污染问题。


一、问题背景:无效数据对量化系统的实际影响

外汇市场常规交易时段为周一至周五,周末及法定节假日休市。但多数实时汇率接口(含免费与商用)未内置交易日校验,在非交易时段持续推送最近一条有效行情,表现为:

  1. 价格长期不变,时间戳持续更新,形成 “伪实时行情”;
  2. 触发波动阈值、均线突破等条件类信号,导致实盘误下单;
  3. 回测阶段引入无效数据,使得收益曲线、回撤指标偏离真实水平;
  4. 数据存储与计算资源被无效占用,降低策略执行效率。

该问题并非接口故障,而是数据传输机制与量化业务逻辑不匹配,必须在策略层做有效性校验


二、核心思路:三层数据有效性校验

为保证策略输入纯净,我在行情数据解析入口处加入前置过滤,不侵入主策略逻辑,不引入额外依赖,仅通过交易日判断 + 价格校验 + 时间戳校验实现精准过滤。

  1. 交易日历过滤:非交易日直接丢弃全量数据;
  2. 价格变动校验:连续数据价格无变化判定为过期数据;
  3. 时间戳合法性校验:时间不递增则判定为无效推送。

三、代码实现:可直接嵌入量化策略的过滤逻辑

以下代码基于 Python 实现,兼容主流量化框架与 WebSocket 行情接入,以 AllTick API 为例提供完整可运行示例。

1. 数据有效性判断函数

def is_valid_trading_data(price, timestamp, last_price, last_timestamp):
    # 价格无变动,判定为旧数据
    if price == last_price:
        return False
    # 时间戳未递增,无效数据
    if timestamp <= last_timestamp:
        return False
    # 非交易日直接过滤
    if not is_trading_day():
        return False
    return True

2. WebSocket 行情接收与过滤实战

import websocket
import json
from datetime import datetime

# 全局记录上一笔有效数据
last_price = None
last_ts = None

def on_message(ws, message):
    global last_price, last_ts
    data = json.loads(message)
  
    current_price = data.get('price')
    current_ts = data.get('timestamp')
  
    # 第一层:非交易日直接跳过
    if not is_trading_day():
        return
  
    # 第二层:价格无变动,过滤旧数据
    if current_price == last_price:
        return
  
    # 有效数据进入策略逻辑
    print(f"有效汇率数据: {current_price}")
    last_price = current_price
    last_ts = current_ts

# 交易日判断(可扩展为年度交易日历)
def is_trading_day():
    return datetime.now().weekday() < 5

# WebSocket接口地址
WS_DOMAIN = "wss://apis.alltick.co"
WS_PATH = "/websocket-api/stock-websocket-interface-api/transaction-quote-subscription"
ws_url = WS_DOMAIN + WS_PATH

# 启动行情订阅
ws = websocket.WebSocketApp(ws_url, on_message=on_message)
ws.run_forever()

四、量化场景优化建议

为适配回测与实盘双场景,建议在上述基础上做三点强化:

  1. 预加载年度交易日历
    本地缓存全年交易日清单,替代简单星期判断,提高节假日识别精度。
  2. 数据时延阈值过滤
    增加数据生成时间与当前时间差判断,过滤延迟过高的历史数据。
  3. 过滤日志记录
    统计无效数据占比,用于接口质量评估与策略稳定性分析。

该方案可显著提升:

  • 实盘信号准确率,降低非交易时段误操作风险;
  • 回测数据纯度,提升策略评估可信度;
  • 系统运行效率,减少无效计算与存储开销。

五、总结

实时行情接口仅负责数据传输,数据有效性必须由量化策略自主保障。非交易日旧数据推送是外汇量化中的典型问题,通过前置轻量过滤逻辑,可在不增加系统复杂度的前提下,彻底解决数据污染问题。

该方案已在多套外汇趋势与震荡策略中验证稳定,适合各类实时汇率数据接入场景,欢迎同行交流优化。

评论