首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将多个XTS对象合并为单个XTS对象

将多个XTS对象合并为单个XTS对象
EN

Stack Overflow用户
提问于 2017-01-23 21:25:37
回答 3查看 1.1K关注 0票数 1

我想将几个xts对象合并到一个xts对象中。因此,我可以得到一个相关矩阵的对象之间的接近价格。

下面的代码提取外汇数据

代码语言:javascript
复制
require(xts)

symbols <- c("AUDJPY", "AUDUSD", "CHFJPY", "EURCHF", "EURGBP", "EURJPY",
             "EURUSD", "GBPCHF", "GBPJPY", "GBPUSD", "NZDUSD", "USDCAD",
             "USDCHF", "USDJPY", "XAGUSD", "XAUUSD")

fxhistoricaldata <- function(Symbol, timeframe, download = FALSE, bandwidth) {   

  # setup temp folder
  temp.folder <- tempdir()
  filename <- paste(temp.folder, '/',"fxhistoricaldata_",Symbol ,"_" ,timeframe,".csv", sep='')

  if(download) {
    downloadfile <- paste("http://api.fxhistoricaldata.com/v1/indicators?instruments=" ,Symbol ,"&expression=open,high,low,close&item_count=10000&format=csv&timeframe=" ,timeframe,sep='')
    download.file(downloadfile, filename,  mode = 'wb')
  }

  tempdf <- read.csv(filename)
  colnames(tempdf) <- c("Curr","Date","Open","High","Low","Close")
  tempdf <- tempdf[c("Date","Open","High","Low","Close")]
  result <- xts(tempdf[,-1], order.by=as.POSIXct(tempdf[,1]))

  return(result)
}

AUDJPY <- fxhistoricaldata('AUDJPY' ,'day',download=T,5)
AUDUSD <- fxhistoricaldata('AUDUSD' ,'day',download=T,5)
CHFJPY <- fxhistoricaldata('CHFJPY' ,'day',download=T,5)
EURCHF <- fxhistoricaldata('EURCHF' ,'day',download=T,5)
EURGBP <- fxhistoricaldata('EURGBP' ,'day',download=T,5)
EURJPY <- fxhistoricaldata('EURJPY' ,'day',download=T,5)
EURUSD <- fxhistoricaldata('EURUSD' ,'day',download=T,5)
GBPCHF <- fxhistoricaldata('GBPCHF' ,'day',download=T,5)
GBPJPY <- fxhistoricaldata('GBPJPY' ,'day',download=T,5)
GBPUSD <- fxhistoricaldata('GBPUSD' ,'day',download=T,5)
NZDUSD <- fxhistoricaldata('NZDUSD' ,'day',download=T,5)
USDCAD <- fxhistoricaldata('USDCAD' ,'day',download=T,5)
USDCHF <- fxhistoricaldata('USDCHF' ,'day',download=T,5)
USDJPY <- fxhistoricaldata('USDJPY' ,'day',download=T,5)
XAGUSD <- fxhistoricaldata('XAGUSD' ,'day',download=T,5)
XAUUSD <- fxhistoricaldata('XAUUSD' ,'day',download=T,5)

我想要的结果如下所示,在符号名以下的封闭价格,但是对于所有的符号名称

代码语言:javascript
复制
          AUDJPY    AUDUSD  
2016-01-01   1.200     1.300
2016-01-02   1.21      1.31

xts对象之一的示例

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-01-24 12:32:07

这可以通过使用quantmod外接程序qmao轻松地完成。例如,以xts-objects的形式下载数据(或从文件中导入数据),然后一次创建一个包含价格或回报的对象。让我们假设您希望从每日收益中创建一个相关矩阵:

代码语言:javascript
复制
library(qmao)
tickers <- c('MSFT','AAPL','AMZN')
getsSymbols(tickers, from = '2010-01-01')
# xts-object of daily returns (RF stands for `Return Frame`,PF returns a
# Price Frame)
returns <- RF(tickers, silent = TRUE, type = 'discrete')

> tail(returns)
                    MSFT         AAPL         AMZN
2017-01-10 -0.0003192848  0.001008513 -0.001279876
2017-01-11  0.0091025233  0.005373176  0.003920085
2017-01-12 -0.0091786360 -0.004175365  0.018297408
2017-01-13  0.0014374700 -0.001760998  0.004301657
2017-01-17 -0.0027113556  0.008064508 -0.009080505
2017-01-18 -0.0004797537 -0.000083350 -0.002766377

要获得相关矩阵,请执行以下操作:

代码语言:javascript
复制
> cor(returns,use = 'pairwise.complete.obs')
          MSFT      AAPL      AMZN
MSFT 1.0000000 0.4655617 0.4701170
AAPL 0.4655617 1.0000000 0.4390303
AMZN 0.4701170 0.4390303 1.0000000

请看一下PFRF函数,它们非常紧凑,而且非常有用。

票数 1
EN

Stack Overflow用户

发布于 2017-01-24 04:32:58

考虑构建xts对象的列表,在列名前加上相应的符号,然后运行merge.xts

代码语言:javascript
复制
xtsList <- lapply(symbols, function(s) {
    df <- get(s)
    colnames(df) <- paste0(s, "_", colnames(df))
    return(df)
})

masterxts <- do.call(merge, xtsList)
票数 1
EN

Stack Overflow用户

发布于 2017-01-24 09:30:36

使用getSymbols找到了更好的解决方案。谢谢你的帮助。

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


symbols <- c("AUD/JPY",
             "AUD/USD",
             "CHF/JPY",
             "EUR/CHF",
             "EUR/GBP",
             "EUR/JPY",
             "EUR/USD",
             "GBP/CHF",  
             "GBP/JPY",
             "GBP/USD",
             "NZD/USD",
             "USD/CAD",
             "USD/CHF",
             "USD/JPY",
             "XAG/USD",
             "XAU/USD"
)

fixedsymbols <- lapply(symbols, function(x) {
                   gsub("/", "", x)
              })

getSymbols(symbols,src="oanda", from="2014-08-05", to="2017-01-17")

xtsList <- lapply(fixedsymbols, function(s) {
  df <- get(s)
  colnames(df) <- colnames(df)
  return(df)
})

masterxts <- do.call(merge, xtsList)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41815938

复制
相关文章

相似问题

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