我希望在Julia中使用它时将高频财务数据存储在内存中。
我的数据存在于很多Float64数组中。在某些市场上,为了某种安全性,每个阵列都存储一天内的高频数据。例如,对于在纽约证券交易所(纽约证券交易所)上市的IBM 2010-01-04日期,有一个Float64数组。
如上所述,我有许多这样的阵列,涵盖多个日期,市场和证券。我想将它们全部存储在一个对象中,这样很容易检索任何给定的数组(可能利用元数据的树状结构)。
在Matlab中,我曾经将它存储在一个结构中,其中第一级是市场,下一级是安全,下一级是日期,然后在树的末尾是相应的数组。在每个级别,我还存储了该级别的字段列表。
Julia doesn't really have an equivalent to Matlab structures,那么朱莉娅最好的方法是什么?
目前,我能想到的最好的是一系列嵌套复合类型,每个类型都有两个字段。例如:
type HighFrequencyData
dateList::Array{Date, 1}
dataArray::Array{Any, 1}
end
其中dateList
存储与dataArray
中保存的Float64数组序列对应的日期列表(即dateList
和dataArray
将具有相同的长度)。然后:
type securitiesData
securityList::Array{String, 1}
highFrequencyArray::Array{Any, 1}
end
其中securityList
存储与HighFrequencyData
中保存的highFrequencyArray
类型序列对应的证券列表。然后:
type marketsData
marketList::Array{String, 1}
securitiesArray::Array{Any, 1}
end
其中marketList
存储与securitiesData
中保存的securitiesArray
类型序列对应的市场列表。
鉴于此,所有数据现在都可以存储在marketsData
类型的变量中,并使用marketList
,securityList
和dateList
在每个级别进行查找嵌套。
但这感觉有点麻烦......
答案 0 :(得分:5)
您的类型层次结构看起来没问题,但是您可能只需要词典吗?
all_data = ["Market1" => {
["Sec1" => {[20140827, 20140825], [1.05, 10.6]}],
["Sec2" => {[20140827, 20140825], [1.05, 10.6]}]},
"Market2" => {
["Sec1" => {[20140827, 20140825], [1.05, 10.6]}],
["Sec2" => {[20140827, 20140825], [1.05, 10.6]}]},
...]
println(all_data["Market1"]["Sec1"] ./ all_data["Market2"]["Sec1"])
如果您可以发布可能有用的MATLAB代码。
我会稍微重新制定你的类型,或许更简单的类似
type TimeSeries
dates::Vector{Date}
data::Vector{Any}
end
typealias Security (String,TimeSeries)
typealias Market Vector{Security}
markets = Market[]
push!(markets, [("Sec1",TimeSeries(...)), ("Sec2",TimeSeries(...)])