Wykorzystanie modeli ARMA-GARCH do symulacji cen walutowych

10

Dopasowałem model ARIMA (1,1,1) -GARCH (1,1) do szeregów czasowych cen dzienników kursów wymiany AUD / USD próbkowanych w jednominutowych odstępach przez kilka lat, co dało mi ponad dwa milion punktów danych, na podstawie których można oszacować model. Zestaw danych jest dostępny tutaj . Dla jasności był to model ARMA-GARCH dopasowany do zwrotów kłód ze względu na integrację cen kłód pierwszego rzędu. Oryginalny szereg czasowy AUD / USD wygląda następująco:

wprowadź opis zdjęcia tutaj

Następnie spróbowałem zasymulować szereg czasowy na podstawie dopasowanego modelu, dając mi następujące informacje:

wprowadź opis zdjęcia tutaj

Zarówno oczekuję, jak i pragnę, aby symulowane szeregi czasowe różniły się od serii oryginalnej, ale nie spodziewałem się, że będzie tak znacząca różnica. Zasadniczo chcę, aby symulowana seria zachowywała się lub ogólnie wyglądała jak oryginał.

Oto kod R, którego użyłem do oszacowania modelu i symulacji serii:

library(rugarch)
rows <- nrow(data)
data <- (log(data[2:rows,])-log(data[1:(rows-1),]))
spec <- ugarchspec(variance.model = list(model = "sGARCH", garchOrder = c(1, 1)), mean.model = list(armaOrder = c(1, 1), include.mean = TRUE), distribution.model = "std")
fit <- ugarchfit(spec = spec, data = data, solver = "hybrid")
sim <- ugarchsim(fit, n.sim = rows)
prices <- exp(diffinv(fitted(sim)))
plot(seq(1, nrow(prices), 1), prices, type="l")

I to jest wynik oszacowania:

*---------------------------------*
*          GARCH Model Fit        *
*---------------------------------*

Conditional Variance Dynamics   
-----------------------------------
GARCH Model : sGARCH(1,1)
Mean Model  : ARFIMA(1,0,1)
Distribution    : std 

Optimal Parameters
------------------------------------
        Estimate  Std. Error     t value Pr(>|t|)
mu      0.000000    0.000000   -1.755016 0.079257
ar1    -0.009243    0.035624   -0.259456 0.795283
ma1    -0.010114    0.036277   -0.278786 0.780409
omega   0.000000    0.000000    0.011062 0.991174
alpha1  0.050000    0.000045 1099.877416 0.000000
beta1   0.900000    0.000207 4341.655345 0.000000
shape   4.000000    0.003722 1074.724738 0.000000

Robust Standard Errors:
        Estimate  Std. Error   t value Pr(>|t|)
mu      0.000000    0.000002 -0.048475 0.961338
ar1    -0.009243    0.493738 -0.018720 0.985064
ma1    -0.010114    0.498011 -0.020308 0.983798
omega   0.000000    0.000010  0.000004 0.999997
alpha1  0.050000    0.159015  0.314436 0.753190
beta1   0.900000    0.456020  1.973598 0.048427
shape   4.000000    2.460678  1.625568 0.104042

LogLikelihood : 16340000 

Byłbym bardzo wdzięczny za wszelkie wskazówki dotyczące ulepszenia mojego modelowania i symulacji, a także za wgląd w błędy, które mogłem popełnić. Wygląda na to, że resztkowy model nie jest używany jako składnik szumu w mojej próbie symulacji, chociaż nie jestem pewien, jak to uwzględnić.

Jeff
źródło
1
Cześć Jeff! Powinieneś również podać swoje dane (lub przynajmniej reprezentatywną próbkę) potencjalnym pomocnikom. Ponadto przykładowy kod nie obejmuje użytych pakietów (w których znajdują się funkcje ugarchspec()i ugarchsim()). Upewnij się, że Twój kod jest odtwarzalny za każdym razem, gdy zadajesz pytanie tutaj, a to „pomoże ludziom pomóc”.
SavedByJESUS,
Dziękuję za radę, @SavedByJESUS. Zaktualizowałem swój post, aby zawierał bibliotekę R, z której korzystałem, i wyjaśniłem format moich danych.
Jeff
Głównym powodem, dla którego symulowane dane różnią się od oryginalnej serii, jest po prostu fakt, że dopasowany model ARMA (1, 1, 1) GARCH (1, 1) nie jest odpowiednim modelem dla danych. Najpierw powinieneś ulepszyć swój model, a następnie Twoja symulacja będzie podobna do oryginalnych danych.
SavedByJESUS

Odpowiedzi:

1

Pracuję z prognozowaniem danych na rynku Forex i zaufaj mi za każdym razem, gdy korzystasz z metod prognozowania statystycznego, czy to ARMA, ARIMA, GARCH, ARCH itp. Zawsze mają tendencję do pogorszenia się, gdy próbujesz przewidzieć z dużym wyprzedzeniem. Mogą, ale nie muszą, pracować przez jeden lub dwa kolejne okresy, ale na pewno nie więcej. Ponieważ dane, z którymi mamy do czynienia, nie mają autokorelacji, trendu ani sezonowości.

Moje pytanie do Ciebie, czy sprawdziłeś ACF i PACF lub testy pod kątem trendów, sezonowości przed użyciem ARMA i GARCH? Bez wyżej wymienionych właściwości w danych prognozowanie statystyczne nie działa, ponieważ naruszasz podstawowe założenia tych modeli.

JAbr
źródło
Dzięki za komentarz @JAbr, ale tak naprawdę nie prognozuję. Zamiast tego moja aplikacja jest ściśle symulacją alternatywnej ścieżki cen o takich samych cechach statystycznych jak dane obserwowane.
Jeff
Okej, ale na innych oddziałach faktycznie prognozujesz za pomocą modelu garch, prawda, twoje symulacje używają garcha, a garch generuje obserwację przez prognozowanie.
JAbr
Oczywiście, ale powiedziałeś, że prognozy modeli szeregów czasowych pogarszają się wraz z rozszerzaniem horyzontu w przyszłość. Sugeruję, aby model nie wychwycił w wystarczającym stopniu dynamiki szeregu, nawet podczas symulacji (lub prognozowania) w horyzontach jednego okresu.
Jeff
Powiedziałem: „Mogą pracować przez jeden lub dwa okresy”, mój zły, powinienem był powiedzieć, że może, ale nie musi.
JAbr
0

Moją sugestią byłoby upewnienie się, że wybrany model jest odpowiedni dla danych.

  • Upewnij się, że nie ma składników cyklicznych lub sezonowych.
  • Wykonaj test Augmented Dickey Fuller, aby sprawdzić obecność korzenia jednostki. Jeśli root root jest obecny, to różnicuj dane, dopóki test Augmented Dickey Fuller nie wykaże obecności root rootów. Alternatywnie obserwuj współczynniki autokorelacji, powinny one spaść po kilku n opóźnieniach dla stacjonarności.
  • Może masz za duży lub za mały model, używając niewłaściwych zamówień? Znajdź prawidłowe zamówienia za pomocą AIC i BIC.
A-ar
źródło
tdistribution.model="std"
Masz rację. Zmienię swoją odpowiedź.
A-ar
Nie martwię się o nadmierne dopasowanie - w rzeczywistości, dla zamierzonego zastosowania chcę nadmiernie dopasować model. Testowałem stacjonarność, ale nie sezonowość. Niezależnie od tych problemów model GARCH nie działa poprawnie. Wygląda na to, że symulowana seria jest całkowicie homoscedastyczna.
Jeff