2013-07-21 9 views
5

Praca z danymi 30-minutowymi, z których pobrałem próbkę online. Jest to wartość nominalna spreadu pomiędzy ES a 2 kontraktami NQ (ES-2 * NQ). Próbka jest mała, ale powinna wystarczyć do użycia bezpośrednio w wersji demo, jeśli chcesz. Kod R chwycić go i używać go jako Próbuję:Jak wykonać i wydrukować prostą i toczącą regresję liniową na obiekcie danych finansowych xts w 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')) 

głowy (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 

Co ja głównie po to walcowanie regresji okno (lub linear regression curve, jak moja platforma handlowa to określa) - zapisz go, a następnie narysuj. I doszedłem do wniosku, że powinienem również zaplanować pojedynczą prostą regresję na określony czas. Po regresji okna dodałbym do tego standardowe odchylenia "pasma", ale myślę, że mogę to wypróbować później za pomocą "runSD" TTR w regresji toczącej. Próbkę tego, co jestem po:

chart with hand drawn lines

myślę, że to - Rolling regression xts object in R - dostał mi się najbliżej tego, co myślę, że jestem po. Wydawało się, że działa z moimi danymi, ale nie mogłem wymyślić, jak przekształcić wynikowe "współczynniki" w linię lub krzywą w hipotetycznym wykresie wartości dolara, z którym chcę pracować.

Powołanie dowolnej paczki (takiej jak TTR) byłoby świetne; chętnie ładuje wszystko, co czyni to prostszym lub prostszym.

+0

Nie mogę określić, jak będą obliczane "standardowe pasma odchyleń". Czy możesz podać wzór? –

+0

@JoshuaUlrich sposób rozumiem to jest krzywą regresji liniowej ± liczba odchyleń standardowych razy cena. więc, używając twojego przykładowego kodu poniżej, wydaje się, że 'rma + 2 * runSD (demo.xts, n = 20)' działa na przykład aby dodać "górny pas". także druga odpowiedź vincenta wydaje się wywoływać podobny rezultat, jak oczekiwano, z "lwr" i "upr", które wypowiada funkcja przewidywana. –

Odpowiedz

8

Możesz użyć predict, aby obliczyć punkty w linii regresji i tail, aby wyodrębnić najnowszy.

# 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

działa to bardzo dobrze. nie natknąłem się na funkcję przewidywania i prawdopodobnie nigdy bym nie pomyślał o jej zbadaniu. to, że obejmuje również standardowe odchylenia, jest świetne. Dziękuję Ci! –

5

ja ostatnio dodane rollSFM funkcję (rolling modelu single-factor) do TTR. Oto przykład z prowadzeniem okres 24 toczenia regresji:

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

Podstawową ideą jest regres swoje ceny na czas. .index zwraca numeryczną reprezentację indeksu POSIXct demo.xts (tj. Liczbę sekund od epoki), więc drugim argumentem jest czas. rma zawiera dopasowaną wartość regresji liniowej w każdym momencie (obiekt reg zawiera również R-kwadrat).

+0

to również odpowiada na moje pytanie, ale nie mogę zaznaczać obu. Muszę przyznać, że nie wiedziałem, co to jest model z jednym czynnikiem, więc nie było to całkowicie na moim radarem. działa świetnie! Przy okazji, twoje paczki są tak przydatne. nawet nie zgłębiłabym próby usiłowania backtestingu w R, gdyby nie istniały. Dziękuję Ci. –

Powiązane problemy