2017-01-23 4 views
-1

Ich möchte mehrere xts-Objekte in ein einziges xts-Objekt zusammenführen. Damit kann ich eine Korrelationsmatrix zwischen den Objekten auf engem Preis erhalten.Mehrere XTS-Objekte zu einem einzigen XTS-Objekt zusammenführen

XTS objects in global environment

Der Code unten nach unten zieht die Forex-Daten

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) 

Meine gewünschten Ergebnisse werden so etwas wie dies mit dem Schlusskurs unter dem Symbolnamen suchen, sondern für die ganzen Symbolnamen

  AUDJPY AUDUSD 
2016-01-01 1.200  1.300 
2016-01-02 1.21  1.31 

Beispiel für eines der xts Objekte

Example of xts object

+1

Bitte geben Sie ein [reproduzierbares Beispiel] (http://stackoverflow.com/q/5963269/271616) an. Bilder von Daten sind nicht hilfreich. –

+0

Aktualisierter Code Danke –

Antwort

1

Dies wird durch Verwendung des qmaoquantmod Add-on leicht getan werden kann. Nehmen Sie zum Beispiel mehrere Tickersymbole, laden Sie Daten herunter (oder importieren Sie Daten aus der Datei) als xts-objects und erstellen Sie dann ein Objekt mit Preisen oder Renditen auf einmal. Nehmen wir an, Sie eine Korrelationsmatrix aus den täglichen Renditen erstellen möchten:

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 

die Korrelationsmatrix zu erhalten:

> 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 

Werfen Sie einen Blick auf die Funktionen PF und RF sie sind kompakt und unglaublich nützlich.

0

Betrachten wir eine Liste von xts Objekte bauen, Spaltennamen voranstellen mit dem Symbol entspricht, dann merge.xts ausgeführt wird:

xtsList <- lapply(symbols, function(s) { 
    df <- get(s) 
    colnames(df) <- paste0(s, "_", colnames(df)) 
    return(df) 
}) 

masterxts <- do.call(merge, xtsList) 
0

gefunden, eine bessere Lösung mit getSymbols. Danke für die Hilfe.

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) 
Verwandte Themen