3

我正在尝试进入 R,因为对于一些个人项目,我需要 R 和 quantmod 来为我创建 OHCL 图表。我被困在创建蜡烛图的步骤中,我不确定我理解为什么。使用“每日”输入文件可以正常工作,但尝试从每小时数据创建每小时图表只是一个很大的失败。

这是我正在使用的数据示例:

> zz <- read.csv(dataFile, sep=",", header=TRUE, stringsAsFactors=T)
> head(zz)
                 DATE OPEN HIGH LOW CLOSE VOLUME
1 2012-10-23 02:00:00   22   22  22    22    171
2 2012-10-23 03:00:00   22   22  22    22    171
3 2012-10-23 04:00:00   22   22  22    22    171
4 2012-10-23 05:00:00   22   22  22    22    171
5 2012-10-23 06:00:00   22   22  22    22    171
6 2012-10-23 07:00:00   22   22  22    22    171

如您所见,第一个数据都是相同的,但我的输入文件中有一年的数据,最后价格上涨到 96。

我接下来要做的是从这个 zz 数据框创建我的 xts 对象,如下所示:

> xx <- xts(zz[,2:6], order.by=as.POSIXct(zz[, 1], tz="", format="%Y-%m-%d %H:%M:%S"))
> head(xx)
                    OPEN HIGH LOW CLOSE VOLUME
2012-10-23 02:00:00   22   22  22    22    171
2012-10-23 03:00:00   22   22  22    22    171
2012-10-23 04:00:00   22   22  22    22    171
2012-10-23 05:00:00   22   22  22    22    171
2012-10-23 06:00:00   22   22  22    22    171
2012-10-23 07:00:00   22   22  22    22    171
> tail(xx)
                    OPEN HIGH LOW CLOSE VOLUME
2013-10-22 06:00:00   96   96  96    96    115
2013-10-22 07:00:00   96   96  96    96    115
2013-10-22 08:00:00   96   96  96    96    115
2013-10-22 09:00:00   96   96  96    96    115
2013-10-22 10:00:00   96   96  96    96    115
2013-10-22 11:00:00   96   96  96    96    118

现在,看起来(对我来说)xts 是正确的。未命名的第 1 列中有日期+时间,其余列正确命名,以便 quantmod 中的 chartCandle() 理解。

这是我尝试绘制它时发生的情况:

> candleChart(xx, name=tickerName, subset="last 3 weeks", bar.type = "ohlc")
Error in periodicity(x) : can not calculate periodicity of 1 observation
> candleChart(xx)
Error in periodicity(x) : can not calculate periodicity of 1 observation

我不确定为什么第一个参数是我的 XTS 对象的任何子集?另外,我发现:

> periodicity(xx)
Error in periodicity(xx) : can not calculate periodicity of 1 observation
> periodicity(xx)
Error in periodicity(xx) : can not calculate periodicity of 1 observation

第二次调用看起来是正确的,但我不确定为什么 periodity(xx) 会认为我的 xts 中只有 1 个观察值?

4

2 回答 2

2

periodicity调用:

p <- median(diff(.index(x)))
if (is.na(p)) 
  stop("can not calculate periodicity of 1 observation")

p可以是NAifx有 1 个观察值,或者您的索引中缺少值(因为调用na.rm=TRUE中没有。median

> xx <- xts(1:10, as.POSIXct(c(1:5,NA,7:10),origin='1970-01-01'))
> periodicity(xx)
Error in periodicity(xx) : can not calculate periodicity of 1 observation
> candleChart(xx)
Error in periodicity(x) : can not calculate periodicity of 1 observation

当您转换为NA时,您的索引中的 可能与夏令时有关。zz[, 1]POSIXct

于 2013-10-24T10:28:53.733 回答
0

我陷入了类似的问题。我的工作是将我的数据框的时区设置为“UTC”。它没有白天时间,这是问题的根源。所以试试

xx <- xts(zz[,2:6], order.by=as.POSIXct(zz[, 1], tz="UTC", format="%Y-%m-%d %H:%M:%S"))

于 2019-01-12T21:00:36.503 回答