请教 实时从接收 tick 数据到生成 1分钟K线的流程

请教 实时从接收 tick 数据到生成 1分钟K线的流程

tick数据的结构和 K线的数据结构不同,在什么时间进行截取转换,可否讲一下大致流程。

我目前接收到tick数据,已实时写入 ticks(流数据表)。 订阅的话,是否要先接收(所有的数据字段),再转换成 预备表(如 traders)其中只有所需的若干字段,最后再聚合生成 K线表。 

请先 登录 后评论

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

参考如下代码:

////////  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 个回答

wale

不需要,使用时间序列聚合引擎,在metrics里面定义所涉及字段的表达式即可。

请先 登录 后评论
  • 2 关注
  • 1 收藏,1551 浏览
  • MrJin 提出于 2021-09-27 16:47