多品种数据过滤非交易时间段

请教一下,如果数据中有非交易时段的话,怎么去除啊,不同的品种又有不同的时间模板?

需要过滤掉时间范围外的数据。

请先 登录 后评论

2 个回答

veryOrdinary

可以参考下述脚本,将不同品种的时间段用字典存储,然后在查询中过滤:


T = rand(24*60*60,100)$SECOND
sym = take(`a`b, 100)
val = rand(10.0, 100)
t = table(T, sym, val)
R=dict(`a`b, ([09:30:00:11:00:00,13:00:00:15:00:00], [08:30:00:10:00:00,14:00:00:16:00:00]))
def timeFilter(R, T, sym): any(T between:R R[sym])
re1= select * from t where each(timeFilter{R}, T, sym)
re2 = select * from t where (sym=`a and byRow(any, T between:R R[`a])) or (sym=`b and byRow(any, T between:R R[`b]))
eachRight(between, T, R[`a])
eqObj(re1.values(), re2.values())
请先 登录 后评论
SaintM

可以通过字典+过滤函数的方法,达到过滤非交易时间段数据的效果。

假设要过滤的表 tb 中有 a、b、c 三个品种,时间列的跨度为 8:00 到 16:20,一共10万条数据。

n = 100000
time = 2024.01.02 08:00:00.000 + 300 * 0..(n-1)
sym = take(`a`b`c, n)
price = rand(100.0, n)
tb = table(sym, time, price)

attachments-2024-01-0qxjrCQf65b36924ec4c4.png创建一个字典,以证券品种作为键,有效交易时间段的数据对列表作为值。每个品种都需要填入有效交易时间段。

tradeTimeDict = dict(`STRING, ANY)
tradeTimeDict[`a] = [09:30m:11:30m,13:00m:15:00m]
tradeTimeDict[`b] = [09:30m:12:00m,13:00m:16:00m]
tradeTimeDict[`c] = [09:30m:11:30m]

对 tb 应用自定义函数 tradeTimeFilter 就可以实现非交易时间段数据的过滤。

def tradeTimeFilter(tradeTimeDict, time, sym):  between:R(time,tradeTimeDict[sym]).any()
tb[tradeTimeFilter{tradeTimeDict} :E (minute(tb.time),tb.sym)]

attachments-2024-01-BnTVpntz65b3694947893.png

请先 登录 后评论
  • 2 关注
  • 0 收藏,374 浏览
  • Polly 提出于 2023-11-10 11:42

相似问题