想订阅并合成K线,请帮我看看错在哪里

ticks 为流数据表(实时接收tick数据)

各列的名称和类型如下:

////////  ticks 表
/////// 表的 各 列 和 数据类型, 并建一张空表
tbColNames=
`TradingDay`InstrumentID`ExchangeID`ExchangeInstID`LastPrice`Volume`Amount`OpenPosition`PreSettlementPrice`PreClosePrice`PreOpenInterest`OpenPrice`HighestPrice`LowestPrice`TotalVolume`TotalTurnover`OpenInterest`ClosePrice`SettlementPrice`UpperLimitPrice`LowerLimitPrice`ActionTime`RecvTime`BidPrice1`BidVolume1`AskPrice1`AskVolume1`BidPrice2`BidVolume2`AskPrice2`AskVolume2`BidPrice3`BidVolume3`AskPrice3`AskVolume3`BidPrice4`BidVolume4`AskPrice4`AskVolume4`BidPrice5`BidVolume5`AskPrice5`AskVolume5`AveragePrice`PreDelta`CurrDelta`RecordNo`TotalRecordNo`InDbTime

tbColTypes=[DATE,SYMBOL,SYMBOL,SYMBOL,DOUBLE,INT,DOUBLE,DOUBLE,DOUBLE,DOUBLE,DOUBLE,DOUBLE,DOUBLE,DOUBLE,INT,DOUBLE,DOUBLE,DOUBLE,DOUBLE,DOUBLE,DOUBLE,TIMESTAMP, TIMESTAMP,DOUBLE,INT,DOUBLE,INT,DOUBLE,INT,DOUBLE,INT,DOUBLE,INT,DOUBLE,INT,DOUBLE,INT,DOUBLE,INT,DOUBLE,INT,DOUBLE,INT,DOUBLE,DOUBLE,DOUBLE,INT,INT,TIMESTAMP]
///////// 建空表
tbTicks = streamTable(100000:0,tbColNames,tbColTypes)

//////////  共享表
share  tbTicks as ticks

//////////  设定流数据表 (tbTicks) 可持久化
enableTableShareAndPersistence(table=tbTicks, tableName=`ticks, cacheSize=2000000, retentionMinutes=4320 )

以上部分已经成功了

现在想要 订阅该流表,并生成 1分钟K线。在GUI操作台上,执行如下操作

//////////  bar 结构
barColNames=`ActionTime`InstrumentID`Open`High`Low`Close`Volume`Amount`OpenPosition`TradingDay

barColTypes=[DATETIME,SYMBOL,DOUBLE,DOUBLE,DOUBLE,DOUBLE,DOUBLE,INT,DOUBLE,DOUBLE,DATE]

/////////  先生成一张流表 (traders)
share streamTable(100:0, barColNames, barColTypes) as traders


///////////  1分钟K线 (barsMin01)  此时为空表
share keyedTable(`ActionTime`InstrumentID,100:0, barColNames, barColTypes) as barsMin01


metrics=<[
first(LastPrice) ,
max(LastPrice) ,
min(LastPrice) ,
last(LastPrice),
sum(Volume),
sum(Amount) ,
sum(OpenPosition) ,
last(TradingDay) ]>

////////////  聚合引擎
tsAggrKline = createTimeSeriesAggregator(name="aggr_kline_min01", windowSize=600000, step=600000, metrics=metrics, dummyTable=traders, outputTable=barsMin01, timeColumn=`ActionTime, keyColumn=`InstrumentID,updateTime=500, useWindowStartTime=true)

///////////  订阅 应会有 1分K线产生
subscribeTable(tableName="ticks", actionName="act_tsaggr", offset=1, handler=append!{tsAggrKline}, msgAsTable=true)
但在执行 聚合引擎(tsAggrKline) 时,提示如下错误:
 Unrecognized column name LastPrice
   
请教我哪里出错了?谢谢
请先 登录 后评论

最佳答案 2021-09-28 10:32

参考如下代码:

////////  ticks 表
/////// 表的 各 列 和 数据类型, 并建一张空表
tbColNames=
`TradingDay`InstrumentID`ExchangeID`ExchangeInstID`LastPrice`Volume`Amount`OpenPosition`PreSettlementPrice`PreClosePrice`PreOpenInterest`OpenPrice`HighestPrice`LowestPrice`TotalVolume`TotalTurnover`OpenInterest`ClosePrice`SettlementPrice`UpperLimitPrice`LowerLimitPrice`ActionTime`RecvTime`BidPrice1`BidVolume1`AskPrice1`AskVolume1`BidPrice2`BidVolume2`AskPrice2`AskVolume2`BidPrice3`BidVolume3`AskPrice3`AskVolume3`BidPrice4`BidVolume4`AskPrice4`AskVolume4`BidPrice5`BidVolume5`AskPrice5`AskVolume5`AveragePrice`PreDelta`CurrDelta`RecordNo`TotalRecordNo`InDbTime

tbColTypes=[DATE,SYMBOL,SYMBOL,SYMBOL,DOUBLE,INT,DOUBLE,DOUBLE,DOUBLE,DOUBLE,DOUBLE,DOUBLE,DOUBLE,DOUBLE,INT,DOUBLE,DOUBLE,DOUBLE,DOUBLE,DOUBLE,DOUBLE,TIMESTAMP, TIMESTAMP,DOUBLE,INT,DOUBLE,INT,DOUBLE,INT,DOUBLE,INT,DOUBLE,INT,DOUBLE,INT,DOUBLE,INT,DOUBLE,INT,DOUBLE,INT,DOUBLE,INT,DOUBLE,DOUBLE,DOUBLE,INT,INT,TIMESTAMP]
///////// 建空表
tbTicks = streamTable(100000:0,tbColNames,tbColTypes)

//////////  设定流数据表 (tbTicks) 可持久化
enableTableShareAndPersistence(table=tbTicks, tableName=`ticks, cacheSize=2000000, retentionMinutes=4320 )

barColNames=`UpdateTime`InstrumentID`Open`High`Low`Close`Volume`Amount`OpenPosition`TradingDay
barColTypes=[TIMESTAMP,SYMBOL,DOUBLE,DOUBLE,DOUBLE,DOUBLE,DOUBLE,INT,DOUBLE,DATE]
share streamTable(100:0, barColNames, barColTypes) as traders
metrics=<[
first(LastPrice),
max(LastPrice),
min(LastPrice),
last(LastPrice),
sum(Volume),
sum(Amount),
sum(OpenPosition),
last(TradingDay)]>

tsAggrKline = createTimeSeriesAggregator(name="aggr_kline_min01", windowSize=600000, step=600000, metrics=metrics, dummyTable=ticks, outputTable=traders, timeColumn=`InDbTime, keyColumn=`InstrumentID,updateTime=500, useWindowStartTime=true)

subscribeTable(tableName="ticks", actionName="act_tsaggr", offset=-1, handler=append!{getStreamEngine("aggr_kline_min01")}, batchSize=1000, throttle=1, hash=0, msgAsTable=true)


请先 登录 后评论

其它 1 个回答

Boye
你这个createTimeSeriesAggregator代码中的dummyTable参数值不对,该表的唯一作用是为时间序列引擎提供流数据中每一列的数据类型,可以含有数据,亦可为空表。该表的schema必须与订阅的流数据表相同。
请先 登录 后评论
  • 2 关注
  • 0 收藏,1223 浏览
  • MrJin 提出于 2021-09-27 18:50