Julia实现任意时间周期转换,比如Tick转5分钟周期
2017-01-11 20:27
561 查看
在量化时, CTP是期货交易量化的开发平台, 但其提供的行情时tick级别的, 常需要进行转换.
而通过Julia实现时, 会很方便将tick序列转为任意周期(包括分钟,小时等)的Bar序列.
本方法的特点:
目标序列周期任意
源序列周期可任意, 但理应比目标周期小
不需进行大量的临时序列和内存拷贝
本方法使用到一个Package: TimeFrames.
源数据序列应该是
假设源数据为如下的四项基本的浮点序列:
事实上, 这些可以是
转换前, 先声明一个想转成的时间周期:
再定义一个临时变量, 跟踪源数据窗口:
好了, 可以开始转换了.
这里提供 批量 方式, 如果实时增量转换, 需稍微改动一下.
说明
采用内嵌的
是建立了在源序列数据上的索引引用, 不用拷贝成临时数据再进行
有些细节, 比如恰好的时间点属于前一个bar的结束, 还是新bar的开始, 需要自行确定
在行情刚刚开始时, 通常是整点, 会满足上述的新周期时间点的判定, 需要自行处理.
而通过Julia实现时, 会很方便将tick序列转为任意周期(包括分钟,小时等)的Bar序列.
本方法的特点:
目标序列周期任意
源序列周期可任意, 但理应比目标周期小
不需进行大量的临时序列和内存拷贝
本方法使用到一个Package: TimeFrames.
源数据序列应该是
Array{T,1}类型, 其中的
T可以是
Float64,
Int或其他数值类型.
假设源数据为如下的四项基本的浮点序列:
src_length = 100 # TODO: 该处为预先准备的src_length长度时间序列, 这里不提供有效数据 src_time = Array{DateTime,1}() src_open = rand(src_length) src_high = rand(src_length) src_low = rand(src_length) src_close = rand(src_length)
事实上, 这些可以是
DataFrames结构或者是
TimeSeries结构的某列.
转换前, 先声明一个想转成的时间周期:
using TimeFrames to_tf = Minute(5) # 要源序列转成5分钟级别的 # 或 # to_tf = TimeFrame("5T")
再定义一个临时变量, 跟踪源数据窗口:
cursor = [1 1]
好了, 可以开始转换了.
这里提供 批量 方式, 如果实时增量转换, 需稍微改动一下.
# 从头遍历源序列 for i = 1:src_length # 折算当前时间所属的目标周期的时间点 dtf = apply(to_tf, src_time[i]) cursor[2] = i if dtf == src_time[i] # 正好处于新周期的时间点 bartime = Base.last(view(src_time, cursor[1]: cursor[2])) # 或 # bartime = src_time[i] baropen = first(view(src_open, cursor[1]: cursor[2])) # 或 # baropen = src_open[cursor[1]] barhigh = reduce(max, view(src_high, cursor[1]: cursor[2]) ) barlow = reduce(min, view(src_low, cursor[1]: cursor[2]) ) barclose = Base.last(view(src_close cursor[1]: cursor[2])) # 或 # barclose = src_open[cursor[2]] @show (bartime, baropen, barhigh, barlow, barclose) cursor[1] = cursor[2]+1 end end
说明
采用内嵌的
view方法,
是建立了在源序列数据上的索引引用, 不用拷贝成临时数据再进行
max,
min等操作.
有些细节, 比如恰好的时间点属于前一个bar的结束, 还是新bar的开始, 需要自行确定
在行情刚刚开始时, 通常是整点, 会满足上述的新周期时间点的判定, 需要自行处理.
相关文章推荐
- 利用GDI+实现常见图片格式任意转换的函数
- 任意进制转换的递归实现
- php实现将任意进制数转换成10进制的方法
- 14.2线性表之STL实现10进制向任意进制的转换
- 任意进制整数之间的相互转换(C++实现)
- (C语言)实现对任意浮点型数据从十进制到二进制的转换
- delphi7如何实现 科学计数的转换。 比如我输入2,触发之后会转换成2.000000E+00.求赐教
- C++实现将十进制数转换为小于等于九的任意进制
- 通用进制转换工具,可实现进制之间的任意转换
- 用栈实现将十进制数转换为任意进制数(2,8,16...).
- C# 泛型 与 反射 实现 任意类型间的类型转换
- 免费利用网页版谷歌翻译实现任意语言转换php版
- 免费利用网页版谷歌翻译实现任意语言转换php版
- C#实现整型数据字任意编码任意进制的转换和逆转换简介
- Python实现任意进制之间的转换
- 同余幂的原理和C++实现,附赠一个10进制数转换为任意进制的数组的算法。
- 编程实现将任意的十进制整数转换成R进制数
- 用栈实现十进制到任意进制的转换
- java实现任意进制的互相转换
- C++实现——任意进制之间的转换