2017-01-14 1 views
3

Ich arbeite mit Minuten Daten von NASDAQ, es hat den Index "2015-07-13 12:05:00 EST". Ich habe die Systemzeit mit Sys.setenv(TZ = 'EST') angepasst.ungültiger 'tz' Wert, Probleme mit der Zeitzone

Ich möchte eine einfache Buy/Hold/Sell-Strategie programmieren, deshalb erstelle ich einen Vektor von flachen Positionen als Grundlage.

pos_flat <- xts(rep(0, nrow(NASDAQ)), index(NASDAQ)) 

Dann möchte ich eine Einschränkung anzuwenden, dass in einem bestimmten Zeitfenster werden Positionen gebunden flach zu sein, was in meinem Fall bedeutet gleich 1.

pos_flat["T13:41/T14:00"] <- 1 

Und das gibt den Fehler :

"Error in as.POSIXlt.POSIXct(.POSIXct(.index(x)), tz = indexTZ(x)) :invalid 'tz' value". 

Ich bekomme auch diesen Fehler, andere Berechnungen zu tun, ich habe nur dieses Beispiel verwendet, weil es einfach ist und das Problem zeigt.

Als zusätzliche Informationen:

> Sys.timezone 
function (location = TRUE) 
{ 
    tz <- Sys.getenv("TZ", names = FALSE) 
    if (nzchar(tz)) 
     return(tz) 
    if (location) 
     return(.Internal(tzone_name())) 
    z <- as.POSIXlt(Sys.time()) 
    zz <- attr(z, "tzone") 
    if (length(zz) == 3L) 
     zz[2L + z$isdst] 
    else zz[1L] 
} 
<bytecode: 0x03648ff4> 
<environment: namespace:base> 

Ich verstehe nicht, das Problem mit dem tz Wert ... Irgendwelche Ideen?

+0

Angeben von Zeitzonen in Form von drei Buchstaben wie "EST" ist mehrdeutig. Australien hat eine EST - Eastern Standard Time wie auch Nordamerika. Besser, Land/Stadt zu verwenden. 'Bibliothek (lubridate) ymd_hms ('2000-01-01 12:11:10', tz = 'australien/melbourne')' –

Antwort

-2

Ihre Fehler tritt aufgrund einer Fehlinterpretation des Zeitobjekts auf. Sie müssen UNIX-Zeitstempel haben, um so etwas wie

pos_flat["T13:41/T14:00"] <- 1

Versuchen Sie, eine Konvertierung Ihrer Indizes zu verwenden, indem Sie so etwas wie dies zu tun:

index(NASDAQ) <- as.POSIXct(strptime(index(NASDAQ), "%Y-%m-%d %H:%M:%S"))

Wie Sie wollen EST verwenden, Sie müssen Ihre Umgebungsvariablen ändern (wenn Sie nicht in der EST-Zeitzone leben). Also alles in allem, sollte diese Arbeit:

Sys.setenv(TZ = 'EST') 
#load stuff 
#... 
index(NASDAQ) <- as.POSIXct(strptime(index(NASDAQ), "%Y-%m-%d %H:%M:%S")) 
pos_flat <- xts(rep(0, nrow(NASDAQ)), index(NASDAQ)) 
pos_flat["T13:41/T14:00"] <- 1 

Für weitere Informationen, habe einen Blick auf den POSIXct und POSIXlt Strukturen in R.

Mit freundlichen Grüßen

+3

Diese Antwort ist einfach falsch. Der xts-Index ist bereits POSIXct. Es besteht keine Notwendigkeit, es in Zeichen umzuwandeln und 'as.POSIXct' aufzurufen.Außerdem, wie ich und andere gesagt haben, ist "EST" keine gültige Zeitzone. –

+0

Warum ist 'EST' keine gültige Zeitzone? https://www.timeanddate.com/time/zones/est – mutilis

+0

Es ist keine gültige Möglichkeit, eine Zeitzone anzugeben. Bedeutet "EST" Eastern Standard Time in den USA oder Australien oder ist es die kanadische Zeitzone? Wie es in "Zeitzone" heißt, ist die bevorzugte Art, sich auf eine Zeitzone zu beziehen, ein Ort (typischerweise eine Stadt), z. B. "Europa/London", "Amerika/Los_Angeles", "Pazifik/Ostern". –

3

Sie erhalten Fehler, weil "EST" keine gültige Zeitzonenspezifikation ist. Es ist eine Abkürzung, die oft beim Drucken und Anzeigen von Zeitzonen verwendet wird. Der Index wird als "2015-07-13 12:05:00 EST" gedruckt, weil "EST" wahrscheinlich die Eastern Standard Time in den Vereinigten Staaten darstellt. Wenn Sie die TZ Umgebungsvariable auf diese Zeitzone einstellen möchten, sollten Sie Sys.setenv() mit Land/Stadt Notation:

Sys.setenv(TZ = "America/New_York") 

können Sie legen auch die Zeitzone im xts Konstruktor:

pos_flat <- xts(rep(0, nrow(NASDAQ)), index(NASDAQ), tzone = "America/New_York") 
Verwandte Themen