【发布时间】:2016-12-22 02:05:37
【问题描述】:
我有一个名为 data 的 xts 对象,其中包含从 2015-01-01 17:00:00 到 2015-12-31 17:00:00 期间的 5 分钟回报。每个交易日从17:00:00开始,到次日同一时间结束,共计288个每日收益[(24小时*60分钟)/5分钟=288个日内收益]。回报表示为
head(data, 5)
DPRICE
2015-01-01 17:00:00 0.000000e+00
2015-01-01 17:05:00 9.797714e-05
2015-01-01 17:10:00 2.027022e-04
2015-01-01 17:15:00 2.735798e-04
2015-01-01 17:20:00 7.768653e-05
tail(data, 5)
DPRICE
2015-12-31 16:40:00 0.0001239429
2015-12-31 16:45:00 0.0001272704
2015-12-31 16:50:00 0.0010186764
2015-12-31 16:55:00 0.0006841370
2015-12-31 17:00:00 0.0002481227
根据 McMillan 和 Speight Daily FX Volatility Forecasts (2012),我正在尝试通过每 5 分钟日内间隔的平均绝对值对数据进行标准化。
我的*代码是
library(xts)
std_data = abs(data) #create absolute returns
D <- split(std_data, "days") #splits data to days
mts.days <- lapply(seq_along(D) - 1, function(i) {
if (i > 0) rbind(D[[i]]["T17:00:00/T23:55:00"], D[[i + 1]]["T00:00:00/T16:55:00"])
}) #creates a list with 365 elements each containing 288 unique returns
dummy = mapply(sum, mts.days) #add the first,second... observations from each element
使用这段代码,我创建了一个包含 365 个 xts 元素的列表,每个元素都有维度
> dim(mts.days[[2]])
[1] 288 1
我想从每个元素中添加相同的观察结果来创建上述函数的分母。
【问题讨论】:
-
所以您希望返回一个长度为 365*288 的向量?如果是这样,我会使用聚合操作,使用 dplyr 或 data.table
-
虚拟值返回一个数字数组 [1:365],而我正在寻找添加列表
mts.days中每个元素的第一个观察值。例如每天 17:00:00 返回,每天 17:05:00 等等。我认为mapply像lapply一样分别对每个元素的所有观察值求和。我希望返回一个 288 行 x 1 列的向量(我猜)。然后我想 std_data / dummy 并标准化返回。 -
@AllenWang 我不太确定如何使用 dplyr 或 data.table,因为我是 R 新手。对此感到抱歉
标签: r split subset xts quantitative-finance