Проблемы при загрузке данных FRED с использованием getSymbols - PullRequest
1 голос
/ 31 марта 2020
library(FinancialInstrument)
library(TTR)
library(PerformanceAnalytics)
library(fredr)

symbols <- c("DEXUSEU", "DEXJPUS", "DEXSZUS", "DEXCAUS")

exchange_rate(symbols, currency = "USD", multiplier = 1)

создать новую среду для хранения символов

symEnv <- new.env()

getSymbols и назначить символы среде symEnv

getSymbols(symbols, from = '2000-01-01', src= "FRED", to = '2015-12-31', env = symEnv)

xts объект ежемесячно скорректированных цен закрытия

symbols.close <- do.call(merge, eapply(symEnv, MonthlyAd))

ежемесячные доходы

monthly.returns <- ROC(x = symbols.close, n = 1, type = "discrete", na.pad = TRUE)

Я получаю эту ошибку:

> getSymbols(symbols, from = '2000-01-01',src= "FRED", to = '2015-12-31', env = symEnv)
[1] "DEXUSEU" "DEXJPUS" "DEXSZUS" "DEXCAUS"
> # xts object of the monthly adjusted close prices
> symbols.close <- do.call(merge, eapply(symEnv, MonthlyAd))
Error in Ad(to.monthly(x, indexAt = "lastof", drop.time = TRUE, name = sym)) : 
  subscript out of bounds: no column name containing "Adjusted"
In addition: Warning message:
In to.period(x, "months", indexAt = indexAt, name = name, ...) :

Показать трассировку

 Rerun with Debug
 Error in Ad(to.monthly(x, indexAt = "lastof", drop.time = TRUE, name = sym)) : 
  subscript out of bounds: no column name containing "Adjusted" > 
> # monthly returns
> monthly.returns <- ROC(x = symbols.close, n = 1, type = "discrete", na.pad = TRUE)
Error in is.xts(x) : object 'symbols.close' not found
> 

Может кто-нибудь, пожалуйста помощь

1 Ответ

0 голосов
/ 31 марта 2020

Вместо создания отдельной среды вы можете просто использовать lapply, чтобы получить все, что вам нужно, и получить вывод списка.

Я использую только Quantmod и TTR, чтобы показать все. Другие пакеты в вашем примере не нужны, чтобы избавиться от ошибки. Обратите внимание, что quantmod ничего не делает с опциями даты при запросе данных fred. Вам необходимо отфильтровать данные позже самостоятельно. Смотрите пример в коде.

library(quantmod)
#library(TTR)

symbols <- c("DEXUSEU", "DEXJPUS", "DEXSZUS", "DEXCAUS")


out <- lapply(symbols, getSymbols, src= "FRED", auto.assign = FALSE)
names(out) <- symbols


symbols.close <- do.call(merge, out)
head(symbols.close)
               DEXUSEU DEXJPUS DEXSZUS DEXCAUS
1971-01-04      NA  357.73  4.3180  1.0109
1971-01-05      NA  357.81  4.3117  1.0102
1971-01-06      NA  357.86  4.3113  1.0106
1971-01-07      NA  357.87  4.3103  1.0148
1971-01-08      NA  357.82  4.3109  1.0154
1971-01-11      NA  357.95  4.3102  1.0159

# filter data to years 2000 and higher. See examples with `?xts`
symbols.close <- symbols.close["2000/"]

head(symbols.close)

           DEXUSEU DEXJPUS DEXSZUS DEXCAUS
2000-01-03  1.0155  101.70  1.5808  1.4465
2000-01-04  1.0309  103.09  1.5565  1.4518
2000-01-05  1.0335  103.77  1.5526  1.4518
2000-01-06  1.0324  105.19  1.5540  1.4571
2000-01-07  1.0294  105.17  1.5623  1.4505
2000-01-10  1.0252  105.28  1.5704  1.4568

monthly.returns <- TTR::ROC(x = symbols.close, n = 1, type = "discrete", na.pad = TRUE)
head(monthly.returns)
                DEXUSEU       DEXJPUS       DEXSZUS      DEXCAUS
2000-01-03           NA            NA            NA           NA
2000-01-04  0.015164943  0.0136676500 -0.0153719636  0.003664017
2000-01-05  0.002522068  0.0065961781 -0.0025056216  0.000000000
2000-01-06 -0.001064344  0.0136841091  0.0009017133  0.003650641
2000-01-07 -0.002905850 -0.0001901321  0.0053410553 -0.004529545
2000-01-10 -0.004080047  0.0010459256  0.0051846636  0.004343330
...