2013-07-21 4 views
5

Travailler avec des données de 30 minutes, dont j'ai mis un échantillon en ligne. C'est la valeur en dollars notionnelle de l'écart entre ES et 2 contrats de NQ (ES-2 * NQ). L'échantillon est petit, mais devrait être assez long pour être utilisé directement dans une démo si vous le souhaitez. Code R pour la saisir et l'utiliser comme je suis en train de:Comment faire & tracer une régression linéaire simple et linéaire sur des données financières xts objet dans R?

demo.xts <- as.xts(read.zoo('http://dl.dropboxusercontent.com/u/31394273/demo.csv', sep=',', tz = '', header = TRUE, format = '%Y-%m-%d %H:%M:%S')) 

tête (demo.xts):

     [,1] 
2013-05-27 00:00:00 -37295.0 
2013-05-27 00:30:00 -37292.5 
2013-05-27 01:00:00 -37300.0 
2013-05-27 01:30:00 -37280.0 
2013-05-27 02:00:00 -37190.0 
2013-05-27 02:30:00 -37245.0 

Ce que je suis surtout après est une régression de fenêtre glissante (ou linear regression curve, comme ma plate-forme de négociation le désigne) - enregistrez-le, puis traitez-le. Et, j'ai pensé que je devrais être capable de tracer une seule régression simple pour une période de temps spécifiée. Après la régression de la fenêtre, j'ajouterais des «bandes» d'écart-type à cela, mais je pense que je peux le comprendre plus tard en utilisant «runSD» de TTR sur la régression glissante. Exemple de ce que je suis après:

chart with hand drawn lines

Je pense que cela - Rolling regression xts object in R - m'a le plus proche de ce que je pense que je suis après. Il a semblé fonctionner avec mes données, mais je ne pouvais pas comprendre comment transformer les «coefficients» résultants en une ligne ou une courbe dans la parcelle de valeur monétaire théorique avec laquelle je veux travailler.

Référencer n'importe quel paquet (comme TTR) serait génial; heureux de charger tout ce qui rend cela plus simple ou facile.

+0

Je ne peux pas comprendre comment les "bandes d'écart-type" seraient calculées. Pouvez-vous fournir une formule? –

+0

@JoshuaUlrich la façon dont je le comprends c'est la courbe de régression linéaire ± nombre d'écarts-types multiplié par le prix. Donc, en utilisant votre exemple de code ci-dessous, il semble que 'rma + 2 * runSD (demo.xts, n = 20)' fonctionne pour ajouter le "upper band", par exemple. aussi, l'autre réponse de vincent semble aboutir à un résultat similaire à celui attendu avec les "lwr" et "upr" que la fonction de prédiction produit. –

Répondre

8

Vous pouvez utiliser predict pour calculer les points sur la ligne de régression et tail pour en extraire la plus récente.

# Sample data 
library(quantmod) 
getSymbols("^GSPC", from="2009-01-01") 

# Rolling regression (unweighted), with prediction intervals 
x <- rollapplyr( 
    as.zoo(Ad(GSPC)), 
    width=300, by.column = FALSE, 
    FUN = function(x) { 
    r <- lm(x ~ index(x)) 
    tail(predict(r, interval="prediction"),1) 
    } 
) 

# Plots 
plot(index(GSPC), Ad(GSPC), type="l", lwd=3, las=1) 
lines(index(x), x$fit, col="purple", lwd=3) 
lines(index(x), x$lwr, col="purple", lwd=3, lty=3) 
lines(index(x), x$upr, col="purple", lwd=3, lty=3) 
abline(lm(Ad(GSPC) ~ index(GSPC)), col="light blue", lwd=3) 

Moving regression

+0

cela fonctionne très bien. Je n'avais pas rencontré la fonction de prédiction, et je n'aurais probablement jamais pensé à l'explorer. qu'il comprend également les écarts-types est super. Je vous remercie! –

5

J'ai récemment ajouté une fonction rollSFM (roulant modèle unique facteur) à TTR. Voici un exemple d'exécution d'une régression de roulement 24 période:

reg <- rollSFM(demo.xts, .index(demo.xts), 24) 
rma <- reg$alpha + reg$beta*.index(demo.xts) 
chart_Series(demo.xts, TA="add_TA(rma,on=1)") 

enter image description here

L'idée de base est de régresser vos prix à l'heure. .index renvoie la représentation numérique de l'index POSIXct de demo.xts (c'est-à-dire le nombre de secondes écoulées depuis l'époque), de sorte que le second argument est l'heure. rma contient la valeur ajustée pour la régression linéaire à chaque instant (l'objet reg contient également du R-carré).

+0

cela répond également à ma question, mais je ne suis pas autorisé à cocher les deux. Je dois admettre que je ne savais pas ce qu'est un seul modèle de facteur, donc ce n'était pas totalement sur mon radar. fonctionne très bien! BTW, vos paquets sont si utiles. Je n'essaierais même pas d'essayer de faire des backtestings dans R s'ils n'existaient pas. Je vous remercie. –

Questions connexes