求 如何写 不同的 filter 从同一个流表进行订阅

在使用聚合函数将 tick 聚合成 1分钟K线时,想根据不同的交易品种设定不同的 过滤标准,如:

例如品种 IF/IC:  sessionBegin=09:30:00.000 13:00:00.000, sessionEnd=11:30:00.000 15:00:00.000,

例如品种 RB:  sessionBegin=21:00:00.000 09:00:00.000 10:30:00.000 13:30:00.000, sessionEnd=23:00:00.000 10:15:00.000 11:30:00.000 15:00:00.000

例如品种 NI/AL:  sessionBegin=21:00:00.000 09:00:00.000 10:30:00.000 13:30:00.000, sessionEnd=01:00:00.000 10:15:00.000 11:30:00.000 15:00:00.000


目前的想法是,根据不同的品种 设定不同的 filter, 从同一个表(ticks) 进行不同的订阅,并输出到不同的表中。


想请教, 在这里,如何写 这些 filter?

另,上面的第3类品种,因为交易时段跨越过了 24点,sessionBegin/sessionEnd 的写法是否有误?

谢谢

请先 登录 后评论

1 个回答

Boye
  • filter 参数需要配合setStreamTableFilterColumn函数一起使用。使用setStreamTableFilterColumn指定流数据表的过滤列,流数据表过滤列在filter中的数据才会发布到订阅端,不在filter中的数据不会发布。filter不支持过滤BOOL类型数据。

filter 参数可以使用以下三种方法指定。其中范围过滤与哈希过滤于1.30.3版本发布。

  • 值过滤:一个向量。
  • 范围过滤:一个数据对。范围包含下限值,但不包括上限值。
  • 哈希过滤:一个元组。第一个元素表示bucket的个数;第二个元素是一个标量或数据对,其中标量表示bucket的索引(从0开始),数据对表示bucket的索引范围(包含下限值,但不包括上限值)。
  • 设置filter的示例如下:
share streamTable(10000:0,`time`symbol`price, [TIMESTAMP,SYMBOL,INT]) as trades
setStreamTableFilterColumn(trades, `symbol)
trades_1=table(10000:0,`time`symbol`price, [TIMESTAMP,SYMBOL,INT])
filter=symbol(`IBM`GOOG)
subscribeTable(tableName=`trades, actionName=`trades_1, handler=append!{trades_1}, msgAsTable=true, filter=filter);

session的设置,可参阅k线计算教程第1.2节
https://gitee.com/dolphindb/Tutorials_CN/blob/master/OHLC.md#12-%E6%8C%87%E5%AE%9Ak%E7%BA%BF%E7%AA%97%E5%8F%A3%E7%9A%84%E8%B5%B7%E5%A7%8B%E6%97%B6%E5%88%BB

请先 登录 后评论
  • 1 关注
  • 0 收藏,962 浏览
  • MrJin 提出于 2021-10-07 08:21

相似问题