2017-08-03 2 views
1

I 15-minütigen EHTS- Daten und wollen bei 17.00.00 täglich EHTS-Erstellen täglich EHTS- mit benutzerdefinierter Startzeit

  • aber mit dem Beginn des Tages konvertieren.

  • Auf diese Weise wird die resultierende Tagesbar sollte 00:00:00 zu 00:00:00

_

17.00.00 bis 17.00.00, nicht überspannen
x <- zoo(runif(25), order.by=seq(
          as.POSIXct("2010-05-03 17:00:00"), 
          as.POSIXct("2010-05-06 17:00:00"), 
          by="15 min" 
          ) 
    ) 

_

head(x) 

2010-05-03 17:00:00 0.9788685 
2010-05-03 17:15:00 0.5414294 
2010-05-03 17:30:00 0.8435366 
2010-05-03 17:45:00 0.3064713 
2010-05-03 18:00:00 0.1395849 
2010-05-03 18:15:00 0.9916730 

Mit xts: Ändern der Periodizität von 15m bis 60m funktioniert gut:

x_agg <- to.minutes(x,k=60, indexAt="startof") 
head(x_agg) 

         x.Open x.High  x.Low x.Close 
2010-05-03 17:00:00 0.9788685 0.9788685 0.30647133 0.3064713 
2010-05-03 18:00:00 0.1395849 0.9916730 0.09497550 0.5301038 
2010-05-03 19:00:00 0.3580554 0.4264711 0.11728640 0.1172864 
2010-05-03 20:00:00 0.9791394 0.9791394 0.01904849 0.1643573 
2010-05-03 21:00:00 0.3096280 0.9193756 0.30962797 0.8896507 
2010-05-03 22:00:00 0.8125618 0.8976714 0.74335042 0.7433504 

xts verwenden: Ändern der Periodizität von 15m bis 1440m = 1Tag funktioniert nicht:

x_agg <- to.minutes(x,k=1440, indexAt="startof") 
head(x_agg) 

_

     x.Open x.High  x.Low x.Close 
2010-05-03 17:00:00 0.9788685 0.991673 0.01904849 0.38669801 
2010-05-04 02:00:00 0.1172864 0.991673 0.01904849 0.09497550 
2010-05-05 02:00:00 0.5301038 0.991673 0.01904849 0.84353659 
2010-05-06 02:00:00 0.3064713 0.991673 0.01904849 0.01904849 

Ich weiß nicht, warum die Indexänderungen zu 02 : 00: 00 - es sollte für alle Tage 17:00:00 sein.

Wie kann das gemacht werden - mit XTS? Vielen Dank für Ihre Mühe.


dput(x_agg) 
structure(c(0.97886852407828, 0.117286398308352, 0.530103818513453, 
0.306471328716725, 0.991673005977646, 0.991673005977646, 0.991673005977646, 
0.991673005977646, 0.0190484928898513, 0.0190484928898513, 0.0190484928898513, 
0.0190484928898513, 0.386698011076078, 0.0949754973407835, 0.843536590691656, 
0.0190484928898513), .Dim = c(4L, 4L), .Dimnames = list(NULL, 
c("x.Open", "x.High", "x.Low", "x.Close")), index = structure(c(1272898800, 
1272931200, 1273017600, 1273104000), class = c("POSIXct", "POSIXt" 
), tzone = ""), class = "zoo") 

Antwort

1

Die meisten (alle?) Xts Funktionen definieren Zeitintervalle mit der endpoints()-Funktion, die die Intervalle aus der Epoche anhand von Offsets erzeugt. Dies ist normalerweise wünschenswert, weil es in runden Zeiteinheiten (bei Änderung einer Minute, einer Stunde usw.) Unterbrechungen findet/erzeugt.

Wenn ich richtig verstehe, wollen Sie Intervalle durch die erste Beobachtung in Ihren Daten definiert. Ich kann sehen, wie Sie um 17:00:00 Endpunkte erwarten würden, da dies die Stunde und Minute Ihrer ersten Beobachtung ist. Ich bin nicht sicher, ob Sie die gleiche Erwartung haben würden, wenn Ihre erste Beobachtung in einer unregelmäßigen Zeit wie 17: 01: 32.741 war.

Also, das ist die Hintergrundgeschichte, und daher kann ich mir keine einfache/direkte Möglichkeit vorstellen, das gewünschte Ergebnis zu erzielen. Aber hier ist ein Versuch eines Kludges, mit period.apply() mit benutzerdefinierten Endpunkten und Funktionen.

# custom aggregation function to convert a chunk of data to one OHLC observation 
toOHLC <- function(x) { 
    op <- as.vector(first(x)) 
    hl <- range(x, na.rm = TRUE) 
    cl <- as.vector(last(x)) 
    xts(cbind(Open = op, High = hl[2], Low = hl[1], Close = cl), end(x)) 
} 

Jetzt ein Hack, um Endpunkte für Tage um 17:00 Uhr zu erhalten.

# Convert to xts 
y <- as.xts(x) 
# Convert index to UTC 
indexTZ(y) <- "UTC" 
# Set first observation to epoch (zero) 
.index(y) <- .index(y) - .index(y)[1] 
# Get endpoints for y by day 
ep <- endpoints(y, "days") 

Jetzt können Sie ep in Ihren Anruf period.apply() verwenden EHTS- von Tagen zu bekommen, wo 17.00.00 der Haltepunkt ist.

period.apply(x, ep, toOHLC) 
#       Open  High  Low  Close 
# 2010-05-04 16:45:00 0.6415173 0.8440296 0.01497329 0.84402960 
# 2010-05-05 16:45:00 0.8411363 0.8440296 0.01497329 0.08874158 
# 2010-05-06 16:45:00 0.7843095 0.8440296 0.01497329 0.40912559 
# 2010-05-06 17:00:00 0.5669512 0.5669512 0.56695121 0.56695121 
+0

Vielen Dank Joshua für Sie detaillierte Antwort. Ich werde deine Lösung studieren. Deine Xts macht R doppelt so cool für mich - wunderbare Arbeit !!! – gebee09

Verwandte Themen