首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么xts::apply.daily与孜然或累积最大失败?

为什么xts::apply.daily与孜然或累积最大失败?
EN

Stack Overflow用户
提问于 2013-11-09 09:18:50
回答 1查看 352关注 0票数 1

我试图做一件非常简单的事情:将OHLC货币数据转换成这样一种方式:用最高值Hi替换Hi,直到给定一天中的那个时刻为止,用最低值Lo替换最低值,直到某一天的那个时刻。

代码语言:javascript
复制
require(quantmod)
require(FinancialInstrument)

Symbols <- "EURUSD"

base_dir <- "/home/samop/data/sources/truefx/" 
sec_dir <- paste0(base_dir, "sec/")

EURUSD.sec <- getSymbols(Symbols, src='FI', dir=sec_dir, extension='RData', split_method='days', from='2009-10-07', to='2011-09-15', days_to_omit="Saturday", auto.assign=FALSE)
EURUSD.min <- to.minutes(EURUSD.sec)

EURUSD.min.Lo.cumulative <- apply.daily(Lo(EURUSD.min), cummin)
EURUSD.min.Hi.cumulative <- apply.daily(Hi(EURUSD.min), cummax)

EURUSD.min.OHLC.cumulative <- cbind(Cl(EURUSD.min), EURUSD.min.Hi.cumulative, EURUSD.min.Lo.cumulative, Cl(EURUSD.min))

这是失败的:

代码语言:javascript
复制
> EURUSD.min.Lo.cumulative <- apply.daily(Lo(EURUSD.min), cummin)
> EURUSD.min.Hi.cumulative <- apply.daily(Hi(EURUSD.min), cummax)
> EURUSD.mi.cumulative <- cbind(Op(EURUSD.min), EURUSD.min.Hi.cumulative, EURUSD.min.Lo.cumulative, Cl(EURUSD.min))
Error in merge.xts(..., all = all, fill = fill, suffixes = suffixes) : 
  (list) object cannot be coerced to type 'double'

有趣的是:

代码语言:javascript
复制
> head(cummin(Lo(EURUSD.min["2011-09-15"])))
                    EURUSD.sec.Low
2011-09-15 00:00:59        1.37446
2011-09-15 00:01:59        1.37446
2011-09-15 00:02:58        1.37446
2011-09-15 00:03:59        1.37446
2011-09-15 00:04:57        1.37446
2011-09-15 00:05:59        1.37446
Warning message:
timezone of object (GMT) is different than current timezone (UTC). 
> apply.daily(Lo(EURUSD.min["2011-09-15"]), cummin)
Error in array(r, dim = d, dimnames = if (!(is.null(n1 <- names(x[[1L]])) &  : 
  length of 'dimnames' [1] not equal to array extent

因此,孜然工作,但应用于xts::apply.daily失败.

我还能做些更聪明的事吗?

注意:我使用以下脚本从TrueFX下载了数据:https://r-forge.r-project.org/scm/viewvc.php/pkg/FinancialInstrument/inst/parser/download.TrueFX.R?view=markup&revision=1349&root=blotter

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-11-09 14:12:45

apply.daily是一个聚合函数,因此它希望传递给它的函数每列返回一个观察。cummin返回一个向量,这就是它不能与apply.daily一起工作的原因。

我认为ave做你想做的事:

代码语言:javascript
复制
EURUSD.cumulative.Lo <- ave(Lo(EURUSD.min), .indexday(EURUSD.min), FUN=cummin)
EURUSD.cumulative.Hi <- ave(Hi(EURUSD.min), .indexday(EURUSD.min), FUN=cummax)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19874327

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档