DolphinDB提供了功能强大的内存计算引擎,内置时间序列函数,分布式计算以及流数据处理引擎,在众多场景下均可高效的计算K线。本教程将介绍DolphinDB如何通过批量处理和流式处理计算K线。
历史数据批量计算K线
其中可以指定K线窗口的起始时间;一天中可以存在多个交易时段,包括隔夜时段;K线窗口可重叠;使用交易量作为划分K线窗口的维度。需要读取的数据量特别大并且需要将结果写入数据库时,可使用DolphinDB内置的Map-Reduce函数并行计算。
流式计算K线
使用API实时接收市场数据,并使用DolphinDB内置的流数据时序计算引擎(TimeSeriesAggregator)进行实时计算得到K线数据。
- 历史数据K线计算
使用历史数据计算K线,可使用DolphinDB的内置函数bar,dailyAlignedBar,或wj。
1.1 不指定K线窗口的起始时刻,根据数据自动生成K线结果
bar(X,Y)返回X减去X除以Y的余数,一般用于将数据分组。
date = 09:32m 09:33m 09:45m 09:49m 09:56m 09:56m;
bar(date, 5);
返回以下结果:
[09:30m,09:30m,09:45m,09:45m,09:55m,09:55m]
例子1:使用以下数据模拟美国股票市场:
n = 1000000
date = take(2019.11.07 2019.11.08, n)
time = (09:30:00.000 + rand(int(6.560601000), n)).sort!()
timestamp = concatDateTime(date, time)
price = 100+cumsum(rand(0.02, n)-0.01)
volume = rand(1000, n)
symbol = rand(AAPLFBAMZNMSFT, n)
trade = table(symbol, date, time, timestamp, price, volume).sortBy!(symboltimestamp)
undef(datetimetimestamppricevolumesymbol)
计算5分钟K线:
barMinutes = 5
OHLC = select first(price) as open, max(price) as high, min(price) as low, last(price) as close, sum(volume) as volume from trade group by symbol, date, bar(time, barMinutes601000) as barStart
请注意,以上数据中,time列的精度为毫秒。若time列精度不是毫秒,则应当将 barMinutes601000 中的数字做相应调整。
1.2 需要指定K线窗口的起始时刻
需要指定K线窗口的起始时刻,可使用dailyAlignedBar函数。该函数可处理每日多个交易时段,亦可处理隔夜时段。
请注意,使用dailyAlignedBar函数时,时间列必须含有日期信息,包括 DATETIME, TIMESTAMP 或 NANOTIMESTAMP 这三种类型的数据。指定每个交易时段窗口起始时刻的参数 timeOffset 必须使用相应的去除日期信息之后的 SECOND,TIME 或 NANOTIME 类型的数据。
例子2(每日一个交易时段):计算美国股票市场7分钟K线。数据沿用例子1中的trade表。
barMinutes = 7
OHLC = select first(price) as open, max(price) as high, min(price) as low, last(price) as close, sum(volume) as volume from trade group by symbol, dailyAlignedBar(timestamp, 09:30:00.000, barMinutes601000) as barStart
例子3(每日两个交易时段):中国股票市场每日有两个交易时段,上午时段为9:30至11:30,下午时段为13:00至15:00。
使用以下数据模拟:
n = 1000000
date = take(2019.11.07 2019.11.08, n)
time = (09:30:00.000 + rand(260601000, n/2)).sort!() join (13:00:00.000 + rand(260601000, n/2)).sort!()
timestamp = concatDateTime(date, time)
price = 100+cumsum(rand(0.02, n)-0.01)
volume = rand(1000, n)
symbol = rand(600519000001600000601766, n)
trade = table(symbol, timestamp, price, volume).sortBy!(symboltimestamp)
undef(datetimetimestamppricevol

本文介绍了如何在DolphinDB中使用批量处理和流式处理计算K线。批量计算涉及bar、dailyAlignedBar和wj函数,用于处理历史数据,支持指定K线窗口起始时间、重叠窗口和交易量划分。流式计算则通过TimeSeriesAggregator实时计算K线,结合Python API接收和写入数据。示例涵盖了多种交易时段和窗口配置。
最低0.47元/天 解锁文章
3661

被折叠的 条评论
为什么被折叠?



