聚合引擎,分别用 keyedTable 和 keyedStreamTable 生成的表接收结果时,效果不一样。使用前者能接收,但不能作为更大周期的数据源;后者没有起到聚合作用,仅是截取了每分钟 ticks数据的第一条记录。
GUI执行的代码如下:
////////// bar 结构
barColNames=`ActionTime`InstrumentID`Open`High`Low`Close`Volume`Amount`OpenPosition`AvgPrice`TradingDay
barColTypes=[TIMESTAMP,SYMBOL,DOUBLE,DOUBLE,DOUBLE,DOUBLE,INT,DOUBLE,DOUBLE,DOUBLE,DATE]
/////// 下面的2行代码分别选用其一,发现结果不一致
/////////// 先生成1分钟K线 (barsMin01) 此时为空表
share keyedTable(`ActionTime`InstrumentID,100:0, barColNames, barColTypes) as barsMin01 //////// <=== 选用此代码,能起聚合作用,但无法作为其他周期的 数据源
share keyedStreamTable(`ActionTime`InstrumentID,100:0, barColNames, barColTypes) as barsMin01 //////// <=== 选用此代码,不能起聚合作用,发现仅是将每分钟的第一条 tick 截取过来了
////////// 定义 各列数据来源(算法)
metrics=<[first(LastPrice), max(LastPrice), min(LastPrice), last(LastPrice), sum(Volume), sum(Amount), sum(OpenPosition), sum(Amount)/sum(Volume)/300, last(TradingDay) ]>
//////////// 聚合引擎
//////////// 生成 1分钟 K线 聚合引擎
nMin01=1*60000
tsAggrKlineMin01 = createTimeSeriesAggregator(name="aggr_kline_min01", windowSize=nMin01, step=nMin01, metrics=metrics, dummyTable=ticks, outputTable=barsMin01, timeColumn=`ActionTime, keyColumn=`InstrumentID,updateTime=500, useWindowStartTime=true)
/////////// 订阅 应会有 1分K线产生
subscribeTable(tableName="ticks", actionName="act_tsaggr_min01", offset=0, handler=append!{getStreamEngine("aggr_kline_min01")}, batchSize=1000, throttle=1, hash=0, msgAsTable=true)
请问是哪里出问题了吗?