Nach meiner Erfahrung ist es Ihre Finanzdaten in der Regel viel mehr Sinn macht als xts
Objekte zu halten, für die zukünftige Manipulation mit anderen technischen Indikatoren usw., es sei denn, Sie ein Vorhersagemodell ausführen möchten in sagen caret
in diesem Fall kann die Umwandlung in eine data.frame
sinnvoll sein.
Betrachten Sie Ihre Symbole von Daten als Elemente eines Behälters, wie
update_sym_md <- function(sym, env = .GlobalEnv) {
x <- get(sym, env)
pd <- setNames((Hi(x) - Op(x))/Op(x), "PD")
merge(x, pd)
}
# Adjust env for location of xts symbol data
l.syms <- lapply(Nasdaq100_Symbols, update_sym_md, env = .GlobalEnv)
lapply(l.syms, head)
# [[1]]
# AAPL.Open AAPL.High AAPL.Low AAPL.Close AAPL.Volume AAPL.Adjusted PD
# 2007-01-03 86.29 86.58 81.90 83.80 309579900 10.85709 0.003360760
# 2007-01-04 84.05 85.95 83.82 85.66 211815100 11.09807 0.022605556
# 2007-01-05 85.77 86.20 84.40 85.05 208685400 11.01904 0.005013373
# 2007-01-08 85.96 86.53 85.28 85.47 199276700 11.07345 0.006630991
# 2007-01-09 86.45 92.98 85.15 92.57 837324600 11.99333 0.075534942
# 2007-01-10 94.75 97.80 93.45 97.00 738220000 12.56728 0.032190006
#
# [[2]]
# AAL.Open AAL.High AAL.Low AAL.Close AAL.Volume AAL.Adjusted PD
# 2007-01-03 53.89 56.92 53.89 56.30 2955600 54.80361 0.0562256273
# 2007-01-04 56.30 59.15 53.65 58.84 2614500 57.27610 0.0506217238
# 2007-01-05 58.83 59.15 57.90 58.29 1656300 56.74072 0.0054394015
# 2007-01-08 57.30 60.48 57.04 57.93 2163200 56.39028 0.0554974006
# 2007-01-09 59.44 60.20 57.56 57.90 2098600 56.36108 0.0127860366
# 2007-01-10 60.03 60.04 57.34 58.93 3892200 57.36371 0.0001666167
auch halten, wenn Sie Preis Erträge/raw Preise für Symbole in einer xts Objekt, anstatt in einem Daten vergleichen wollen .frame, könnte das qmao
Paket nützlich sein.
Zum Beispiel:
install.packages("qmao", repos="http://R-Forge.R-project.org", type = "source")
library(qmao)
pf <- makePriceFrame(Nasdaq100_Symbols)
head(pf, 3)
# AAPL AAL
# 2007-01-03 10.85709 54.80361
# 2007-01-04 11.09807 57.27610
# 2007-01-05 11.01904 56.74072
rf <- makeReturnFrame(Nasdaq100_Symbols)
head(rf)
# AAPL AAL
# 2007-01-03 NA NA
# 2007-01-04 0.021952895 0.0441273684
# 2007-01-05 -0.007146715 -0.0093913155
# 2007-01-08 0.004926208 -0.0061951917
# 2007-01-09 0.079799692 -0.0005179716
# 2007-01-10 0.046745798 0.0176329011
-Update in Antwort von OP Kommentar:
Um alle Daten in einer Reihe zu verbinden, versuchen Sie dies:
(abgesehen: Wenn Sie‘ Verwenden Sie nichtlineare Vorhersagemodelle in diesem data.frame, stellen Sie sicher, dass Sie in Betracht ziehen, zuerst Ihre Datenpunkte über die Wertpapiere in jeder Zeile zu skalieren.)
x.cbind <- do.call(cbind, l.syms)
head(x.cbind)
# AAPL.Open AAPL.High AAPL.Low AAPL.Close AAPL.Volume AAPL.Adjusted PD AAL.Open AAL.High AAL.Low AAL.Close AAL.Volume AAL.Adjusted PD.1
# 2007-01-03 86.29 86.58 81.90 83.80 309579900 10.85709 0.003360760 53.89 56.92 53.89 56.30 2955600 54.80361 0.0562256273
# 2007-01-04 84.05 85.95 83.82 85.66 211815100 11.09807 0.022605556 56.30 59.15 53.65 58.84 2614500 57.27610 0.0506217238
# 2007-01-05 85.77 86.20 84.40 85.05 208685400 11.01904 0.005013373 58.83 59.15 57.90 58.29 1656300 56.74072 0.0054394015
# 2007-01-08 85.96 86.53 85.28 85.47 199276700 11.07345 0.006630991 57.30 60.48 57.04 57.93 2163200 56.39028 0.0554974006
# 2007-01-09 86.45 92.98 85.15 92.57 837324600 11.99333 0.075534942 59.44 60.20 57.56 57.90 2098600 56.36108 0.0127860366
# 2007-01-10 94.75 97.80 93.45 97.00 738220000 12.56728 0.032190006 60.03 60.04 57.34 58.93 3892200 57.36371 0.0001666167
df.cbind <- data.frame("time" = index(x.cbind), coredata(x.cbind))
head(df.cbind)
# time AAPL.Open AAPL.High AAPL.Low AAPL.Close AAPL.Volume AAPL.Adjusted PD AAL.Open AAL.High AAL.Low AAL.Close AAL.Volume AAL.Adjusted PD.1
# 1 2007-01-03 86.29 86.58 81.90 83.80 309579900 10.85709 0.003360760 53.89 56.92 53.89 56.30 2955600 54.80361 0.0562256273
# 2 2007-01-04 84.05 85.95 83.82 85.66 211815100 11.09807 0.022605556 56.30 59.15 53.65 58.84 2614500 57.27610 0.0506217238
# 3 2007-01-05 85.77 86.20 84.40 85.05 208685400 11.01904 0.005013373 58.83 59.15 57.90 58.29 1656300 56.74072 0.0054394015
# 4 2007-01-08 85.96 86.53 85.28 85.47 199276700 11.07345 0.006630991 57.30 60.48 57.04 57.93 2163200 56.39028 0.0554974006
# 5 2007-01-09 86.45 92.98 85.15 92.57 837324600 11.99333 0.075534942 59.44 60.20 57.56 57.90 2098600 56.36108 0.0127860366
# 6 2007-01-10 94.75 97.80 93.45 97.00 738220000 12.56728 0.032190006 60.03 60.04 57.34 58.93 3892200 57.36371 0.0001666167
besser zu verstehen, wie qmao
Funktionen arbeiten, warum bei den Beispielen in der Dokumentation suchen nicht und gehen von dort aus? ?makeReturnFrame
Blick auf der Quellcode versteht wirklich, was los ist (und einen besseren R-Programmierer zur gleichen Zeit wird durch eine gute Codierung Lernstile)
I Daten Ausbildung mache, so dass ich alle wollen Symbole an der Spitze sein. Kann nicht wirklich herausfinden, wie qmao funktioniert, ich kann es nur bekommen, um dieses eine Datenfeld zu ziehen. – Alteredorange
@Alternativ Wenn Sie alle Symbole an der Spitze möchten, nehme ich an, dass Sie Daten über Wertpapiere in jeder Spalte des Datenrahmens haben möchten, und jede Zeile ist daher eine Beobachtung in einem Vorhersagemodell, das Sicherheitspreisdaten aus dem Querschnitt verwendet. Ich habe nach Antwort bearbeitet, um einen Weg zu zeigen, dies zu tun. – FXQuantTrader
das scheint genau das zu sein, was ich brauche! Eine weitere Frage, gibt es eine Möglichkeit, die Spalte "symbol.PD" zu benennen, so dass sie AAPL.PD und AAL.PD anstelle von PD und PD.1 wären? – Alteredorange