Quantmod R: defineModel () Ошибка: загрузка NG3 (объект xts) не удалась после двух попыток - PullRequest
0 голосов
/ 10 декабря 2018
 > sessionInfo()
R version 3.5.1 (2018-07-02)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Linux Mint 18.3

Matrix products: default
BLAS: /usr/lib/libblas/libblas.so.3.6.0
LAPACK: /usr/lib/lapack/liblapack.so.3.6.0

locale:
 [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C              
 [3] LC_TIME=en_US.UTF-8        LC_COLLATE=en_US.UTF-8    
 [5] LC_MONETARY=en_US.UTF-8    LC_MESSAGES=en_US.UTF-8   
 [7] LC_PAPER=en_US.UTF-8       LC_NAME=C                 
 [9] LC_ADDRESS=C               LC_TELEPHONE=C            
[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C       

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods  
[7] base     

other attached packages:
[1] lubridate_1.7.4 quantmod_0.4-13 TTR_0.23-4      xts_0.11-2     
[5] zoo_1.8-4      

loaded via a namespace (and not attached):
 [1] compiler_3.5.1  magrittr_1.5    tools_3.5.1     curl_3.2       
 [5] yaml_2.2.0      Rcpp_1.0.0      stringi_1.2.4   grid_3.5.1     
 [9] stringr_1.3.1   lattice_0.20-38
> 

Я запускаю этот код:

 Lesson4 <- function()
 {
  # Dec 9 2018 - next steps to learn in order to 
 # perform backtest
 #steps .5?? specifymodel() function
 #steps 1 buildmodel() function
 #steps 2 trademodel() function
 #steps 3 call functions to get model performance 
 #details

library("lubridate")
library("quantmod")
library(xts)
setwd("/home/gabe/Learn")

NG2 <- read.csv("NGdec18.csv",
               stringsAsFactors = FALSE,
               header = FALSE)

dates <- as.character(NG2$V1)
dates2 <- as.POSIXct(dates, format = "%Y%m%d %H:%M:%S")
NG2[, 1] <- dates2

   names(NG2)[2]  <- paste("NG3.Open")
   names(NG2)[3]  <- paste("NG3.High")
   names(NG2)[4]  <- paste("NG3.Low")
   names(NG2)[5]  <- paste("NG3.Close")
   names(NG2)[6]  <- paste("NG3.Volume")
   NG2 <- subset(NG2,  NG2$V1 > "2018-10-01")

   NG3 <- xts(NG2[-1], order.by = NG2[, 1])

   print(c("class=", class(NG3)))
   print(NG3[1:2,])
   print(head(OpHi(NG3)))
   print(head(OpCl(NG3)))
   specifyModel(Next(OpCl(NG3)) ~ OpHi(NG3))


 }

Он отлично работает, когда я использую тот же код с ценами на акции GE от Yahoo ... но когда я использую эти внутридневные данные из файла CSV, это не удается,Однако я проверил, и данные "NG3" xts файл.Я также тщательно назвал столбцы, потому что это было проблемой.Я также использую простейшую небольшую модель, которую я могу придумать, и кажется, что каждая из частей глупой модели является законным объектом.Вы можете видеть это в выводе:

> Lesson4()
[1] "class=" "xts"    "zoo"   

 NG3.Open NG3.High NG3.Low NG3.Close NG3.Volume
2018-10-01 00:10:00    3.104    3.107   3.104     3.107         17
2018-10-01 00:20:00    3.107    3.107   3.107     3.107          5
                        OpHi.NG3
      2018-10-01 00:10:00 0.0009664948
      2018-10-01 00:20:00 0.0000000000
      2018-10-01 00:30:00 0.0000000000
      2018-10-01 00:40:00 0.0000000000
      2018-10-01 00:50:00 0.0000000000
       2018-10-01 01:00:00 0.0003226847
                         OpCl.NG3
       2018-10-01 00:10:00  0.0009664948
       2018-10-01 00:20:00  0.0000000000
       2018-10-01 00:30:00 -0.0016097875
       2018-10-01 00:40:00  0.0000000000
       2018-10-01 00:50:00  0.0000000000
       2018-10-01 01:00:00  0.0003226847
    Warning: NG3 download failed; trying again.
     Show Traceback

     Rerun with Debug
     Error: NG3 download failed after two attempts. Error 
    message:
    HTTP error 404. 

Мне даже не нужно подключение к Интернету для этого ... почему оно говорит мне об ошибке HTTP? Более важно ... кто-нибудь может помочь мне получить это specifymodel() функция для работы без этой ошибки?

вот трассировка:

9.
stop(Symbols.name, " download failed after two attempts. Error", 
    " message:\n", attr(dl, "condition")$message, call. = FALSE) 
8.
getSymbols.yahoo(Symbols = "NG3", env = <environment>, verbose = FALSE, 
    warnings = TRUE, auto.assign = TRUE) 
7.
do.call(paste("getSymbols.", symbol.source, sep = ""), list(Symbols = current.symbols, 
    env = env, verbose = verbose, warnings = warnings, auto.assign = auto.assign, 
    ...)) 
6.
getSymbols(V, env = env) 
5.
FUN(X[[i]], ...) 
4.
lapply(vars, function(V) {
    if (!exists(V)) {
        getSymbols(V, env = env)
    } ... 
3.
getModelData(new.quantmod, na.rm = na.rm) 
2.
specifyModel(Next(OpCl(NG3)) ~ OpHi(NG3)) at ghtest.R#170
1.
Lesson4() 

также здесь head () оригинального CSV-файла NGdec18.csv:

                 V1    V2    V3    V4    V5  V6
1 20180924  18:00:00 3.102 3.106 3.102 3.104 118
2 20180924  18:10:00 3.102 3.103 3.101 3.103   6
3 20180924  18:20:00 3.103 3.103 3.103 3.103   0
4 20180924  18:30:00 3.103 3.103 3.103 3.103   0
5 20180924  18:40:00 3.103 3.103 3.103 3.103   0
6 20180924  18:50:00 3.105 3.105 3.105 3.105   1

CSV-файл можно скачать здесь: http://www.sharecsv.com/s/53f6728024686c49d2fc81273a7f7464/NGdec18.csv

  Lesson4 <- function()
 {

     library("lubridate")
     library("quantmod")
     library(xts)
     setwd("/home/gabe/Learn")

     NG2 <- read.csv("NGdec18.csv",
                     stringsAsFactors = FALSE,
                     header = FALSE)

     dates <- as.character(NG2$V1)
     dates2 <- as.POSIXct(dates, format = "%Y%m%d %H:%M:%S")
     NG2[, 1] <- dates2

     names(NG2)[2]  <- paste("NG3.Open")
     names(NG2)[3]  <- paste("NG3.High")
     names(NG2)[4]  <- paste("NG3.Low")
     names(NG2)[5]  <- paste("NG3.Close")
     names(NG2)[6]  <- paste("NG3.Volume")
  #  setSymbolLookup("symbol.lookup" = FALSE)
    # options("getSymbols.sources" = "csv")
     setSymbolLookup(NG3='csv')
     NG3 <- xts(NG2[-1], order.by = NG2[, 1])

     print(c("class=", class(NG3)))
     print(NG3[1:2,])
     print(head(OpHi(NG3)))
     print(head(OpCl(NG3)))
     specifyModel(Next(OpCl(NG3)) ~ OpHi(NG3))
 }

Я попробовал ваши предложения и один из моих собственных ... и он избавился от проблемы с источником 'Yahoo', но все равно получаюэта ошибка:

Error in `dimnames<-.xts`(`*tmp*`, value = dn) : 
 length of 'dimnames' [2] not equal to array extent 

с трассировкой:

11.
`dimnames<-.xts`(`*tmp*`, value = dn) 
10.
`dimnames<-`(`*tmp*`, value = dn) 
9.
`colnames<-`(`*tmp*`, value = paste(toupper(gsub("\\^", "", Symbols[[i]])), 
    col.names, sep = ".")) 
8.
getSymbols.csv(Symbols = "NG3", env = <environment>, verbose = FALSE, 
    warnings = TRUE, auto.assign = TRUE) 
7.
do.call(paste("getSymbols.", symbol.source, sep = ""), list(Symbols = current.symbols, 
    env = env, verbose = verbose, warnings = warnings, auto.assign = auto.assign, 
    ...)) 
6.
getSymbols(V, env = env) 
5.
FUN(X[[i]], ...) 
4.
lapply(vars, function(V) {
    if (!exists(V)) {
        getSymbols(V, env = env)
    } ... 
3.
getModelData(new.quantmod, na.rm = na.rm) 
2.
specifyModel(Next(OpCl(NG3)) ~ OpHi(NG3)) at ghtest.R#166
1.
Lesson4() 

1 Ответ

0 голосов
/ 10 декабря 2018

Это предположение, так как ваш код работает без ошибок на моем Linux-компьютере под управлением R 3.5.1, и вот часть OS и пакетов из sessioninfo ():

sessionInfo()
R version 3.5.1 (2018-07-02)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Ubuntu 18.04.1 LTS

Matrix products: default
BLAS: /usr/lib/x86_64-linux-gnu/openblas/libblas.so.3
LAPACK: /usr/lib/x86_64-linux-gnu/libopenblasp-r0.2.20.so
   #omitted locales
other attached packages:
[1] lubridate_1.7.4 quantmod_0.4-13 TTR_0.23-4      xts_0.11-2      zoo_1.8-4      

loaded via a namespace (and not attached):
 [1] compiler_3.5.1  magrittr_1.5    tools_3.5.1     curl_3.2        yaml_2.2.0     
 [6] Rcpp_1.0.0      stringi_1.2.4   grid_3.5.1      stringr_1.3.1   lattice_0.20-38

Так что я думаю, что вам нужноустановить для параметра Quantmod для symbol.lookup значение FALSE.Я не могу проверить свою теорию, потому что моя система успешно работает с вашим кодом, но вы можете попробовать:

setSymbolLookup("symbol.lookup" = FALSE)

Цель состоит в том, чтобы по умолчанию при поиске символов НЕ использовалось "yahoo".По крайней мере, это не вызвало ошибки или не нарушило ваш Lesson4 код.По общему признанию это не было очень интересным результатом:

quantmod object:        Build date:   

Model Specified: 
     Next(OpCl(NG3)) ~ OpHi(NG3) 

Model Target:  Next.OpCl.NG3         Product:  NG3 
Model Inputs:   

Fitted Model: 

    None Fitted

После просмотра кода для getSymbols у меня есть еще одна идея:

options("getSymbols.sources" = "csv")
getOption("getSymbols.sources")
[1] "csv"
...