You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

DolphinDB批量处理期货数据:过滤非交易时间的方案可行性及优化咨询

在DolphinDB中批量过滤期货合约交易时段的方案优化

一、你提出的元编程方案是否可行?

完全可行。DolphinDB支持通过元编程动态生成SQL语句(比如字符串拼接或sql函数构造),执行后用unionAll合并所有结果。但这种方式存在明显效率瓶颈:

  • 合约数量较多时,多次查询会带来重复的编译和IO开销;
  • 大量结果集合并时,unionAll的内存占用和计算成本会显著上升。

二、更高效的替代方案

推荐两种无需循环、批量处理的简洁方案,性能远优于元编程批量查询:

方案1:合约-时段映射表关联过滤

先维护一个包含所有合约交易时段的映射表(每个交易小节对应一行),通过关联原数据表一次性完成过滤:

// 1. 创建合约交易时段映射表(示例数据)
contractTradingHours = table(
    `cu`cu`rb`rb as sym,
    09:00:00`21:00:00`09:00:00`21:00:00 as startTime,
    10:15:00`02:30:00`10:15:00`01:00:00 as endTime
)

// 2. 关联原表并过滤符合时段的数据
filteredData = select t.* from t join contractTradingHours on t.sym = contractTradingHours.sym 
               where t.time between contractTradingHours.startTime and contractTradingHours.endTime

这种方式利用DolphinDB的批量关联优化,在引擎层一次性完成所有合约的时段过滤,避免了多次查询和结果合并的开销,是处理这类场景的最优选择之一。

方案2:自定义时段判断函数过滤

如果合约的交易时段有固定规则(比如大部分品种遵循日盘+夜盘统一规则,少数特殊),可以编写自定义函数实现时段判断,直接在原表上过滤:

// 自定义函数:根据合约代码判断时间是否在交易时段内
def checkTradingHour(sym, time) {
    if sym in `cu`al`zn {
        // 有色品种时段:日盘+夜盘
        return (time between 09:00:00 and 10:15:00) 
            or (time between 10:30:00 and 11:30:00) 
            or (time between 13:30:00 and 15:00:00) 
            or (time between 21:00:00 and 02:30:00)
    } else if sym in `rb`hc {
        // 黑色品种时段:日盘+短夜盘
        return (time between 09:00:00 and 10:15:00) 
            or (time between 10:30:00 and 11:30:00) 
            or (time between 13:30:00 and 15:00:00) 
            or (time between 21:00:00 and 01:00:00)
    } else {
        return false
    }
}

// 直接过滤原表
filteredData = select * from t where checkTradingHour(sym, time)

这种方式代码更简洁,适合时段规则稳定的场景,DolphinDB会自动将函数转化为向量运算,效率远高于循环查询。

三、方案对比

方案优点缺点适用场景
元编程批量查询合并逻辑直观,无需额外映射表效率低,开销大合约数量极少的测试场景
映射表关联过滤效率最高,批量处理优化需要维护映射表合约时段频繁变动的场景
自定义函数过滤代码简洁,无额外表依赖规则变动时需修改函数时段规则稳定的场景

内容的提问来源于stack exchange,提问作者Polly

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 22:52:20