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

DolphinDB:如何用createDailyTimeSeriesEngine聚合期货跨日夜盘至同一交易日?

DolphinDB 跨日夜盘期货日K线聚合问题解决

问题背景

使用createDailyTimeSeriesEngine聚合期货日K线时,周五21:00-23:00夜盘与周一09:00-15:00昼盘被拆分为两根独立K线,但需求是将二者合并为周一交易日的单根K线(期货规则中周五夜盘归属下周一交易日)。

源数据表mdAllJoin结构:

列名类型描述
InstrumentIDSYMBOL合约代码
TimestampTIMESTAMP行情实际时间戳
ActionDayDATE交易所定义的交易日
tradeTimeTIME交易时间
LastPriceDOUBLE最新价
VolumeLONG累计成交量

关键逻辑:Timestamp为自然日时间(如2024.01.12 21:30:00),ActionDay为交易所指定的归属交易日(对应上述时间为2024.01.15,即周一)。

核心结论

createDailyTimeSeriesEngine支持跨日夜盘聚合,可通过两种方式实现需求:


方案一:直接基于ActionDay分组聚合(离线场景首选)

由于源数据已包含交易所定义的ActionDay,直接按合约+交易日分组计算K线指标是最简洁的方式,无需依赖时间序列引擎:

select 
    last(ActionDay) as ActionDay,
    last(tradeTime) as LastTradeTime,
    first(LastPrice) as Open,
    max(LastPrice) as High,
    min(LastPrice) as Low,
    last(LastPrice) as Close,
    last(Volume) - first(Volume) as Volume
from mdAllJoin
group by InstrumentID, ActionDay

该方案天然将同一ActionDay下的周五夜盘与周一昼盘数据聚合为单根K线,完全匹配业务规则。


方案二:配置createDailyTimeSeriesEngine实现实时聚合

若需实时流处理,需正确配置交易时段参数,让引擎识别跨日归属关系:

1. 定义交易时段与归属星期

// 定义两个交易时段:周一昼盘、周五夜盘
segStartRaw = [09:00:00, 21:00:00]
segEndRaw = [15:00:00, 23:00:00]
// 指定每个时段对应的星期几(1=周一,5=周五)
sessionDay = [1, 5]
// 窗口大小设为1个自然日的毫秒数
tradetimeMillisec = 86400000

2. 调整时间序列引擎参数

tsAggr1d = createDailyTimeSeriesEngine(
    name="tsAggr1d",
    windowSize = tradetimeMillisec,   
    step       = tradetimeMillisec, 
    metrics    = <[last(ActionDay), last(tradeTime), first(LastPrice), max(LastPrice), 
                   min(LastPrice), last(LastPrice), last(Volume) - first(Volume)]>, 
    dummyTable = mdAllJoin,
    outputTable= tsRse1d,
    timeColumn = `Timestamp,
    keyColumn=`InstrumentID,
    updateTime=0,
    useWindowStartTime=false,
    useSystemTime = false,
    sessionBegin = segStartRaw,
    sessionEnd   = segEndRaw,
    sessionDay = sessionDay,  // 关联时段与归属星期
    roundTime = false,
    mergeLastWindow = true,  // 合并跨日同归属的时段数据
    keyPurgeDaily = true,
    fill = "none"
)

参数说明

  • sessionDay:明确指定周五夜盘(21:00-23:00)属于周五时段,配合mergeLastWindow=true,引擎会将其与下周一昼盘数据合并到同一个交易日窗口。
  • last(ActionDay):确保输出结果中的交易日始终以交易所定义的ActionDay为准,避免自然日混淆。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.11 17:44:51