Verwendung von ARMA-GARCH-Modellen zur Simulation von Devisenpreisen

10

Ich habe ein ARIMA (1,1,1) -GARCH (1,1) -Modell an die Zeitreihe der AUD / USD-Wechselkursprotokollpreise angepasst, die über mehrere Jahre in einminütigen Intervallen abgetastet wurden, sodass ich mehr als zwei habe Millionen Datenpunkte, an denen das Modell geschätzt werden soll. Der Datensatz ist hier verfügbar . Aus Gründen der Klarheit war dies ein ARMA-GARCH-Modell, das aufgrund der Integration von Protokollpreisen erster Ordnung für Protokollretouren geeignet war. Die ursprüngliche AUD / USD-Zeitreihe sieht folgendermaßen aus:

Geben Sie hier die Bildbeschreibung ein

Ich habe dann versucht, eine Zeitreihe basierend auf dem angepassten Modell zu simulieren, wobei ich Folgendes erhalten habe:

Geben Sie hier die Bildbeschreibung ein

Ich erwarte und wünsche mir, dass sich die simulierte Zeitreihe von der Originalserie unterscheidet, aber ich hatte nicht erwartet, dass es einen so signifikanten Unterschied gibt. Im Wesentlichen möchte ich, dass sich die simulierte Serie wie das Original verhält oder im Großen und Ganzen aussieht.

Dies ist der R-Code, mit dem ich das Modell geschätzt und die Serie simuliert habe:

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")

Und das ist die Schätzausgabe:

*---------------------------------*
*          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 

Ich würde mich sehr über Anleitungen zur Verbesserung meiner Modellierung und Simulation oder über Einblicke in Fehler freuen, die ich möglicherweise gemacht habe. Es scheint, als würde der Modellrest in meinem Simulationsversuch nicht als Rauschbegriff verwendet, obwohl ich nicht sicher bin, wie ich ihn integrieren soll.

Jeff
quelle
1
Hallo Jeff! Sie sollten den potenziellen Helfern auch Ihre Daten (oder zumindest eine repräsentative Stichprobe) zur Verfügung stellen. Außerdem enthält Ihr Beispielcode nicht die von Ihnen verwendeten Pakete (in denen sich die Funktionen ugarchspec()und ugarchsim()befinden). Stellen Sie sicher, dass Ihr Code reproduzierbar ist, wenn Sie hier eine Frage stellen, und dass er "Menschen hilft, Ihnen zu helfen".
SavedByJESUS
Vielen Dank für Ihren Rat, @SavedByJESUS. Ich habe meinen Beitrag aktualisiert, um die von mir verwendete R-Bibliothek aufzunehmen, und das Format meiner Daten geklärt.
Jeff
Der Hauptgrund, warum sich Ihre simulierten Daten von der Originalserie unterscheiden, liegt einfach darin, dass das angepasste Modell ARMA (1, 1, 1) GARCH (1, 1) nicht das geeignete Modell für Ihre Daten ist. Sie sollten zunächst Ihr Modell verbessern, dann ähnelt Ihre nachfolgende Simulation Ihren Originaldaten.
SavedByJESUS

Antworten:

1

Ich arbeite mit Forex-Datenprognosen und vertraue mir, wenn Sie statistische Prognosemethoden verwenden, sei es ARMA, ARIMA, GARCH, ARCH usw. Sie verschlechtern sich immer, wenn Sie versuchen, rechtzeitig vorauszusagen. Sie können für die nächsten ein oder zwei Perioden arbeiten oder nicht, aber definitiv nicht mehr als das. Weil die Daten, mit denen Sie es zu tun haben, keine Autokorrelation, keinen Trend und keine Saisonalität aufweisen.

Meine Frage an Sie: Haben Sie ACF und PACF überprüft oder vor der Verwendung von ARMA und GARCH auf Trend und Saisonalität getestet? Ohne die oben genannten Eigenschaften in den Daten funktioniert die statistische Vorhersage nicht, da Sie gegen die Grundannahmen dieser Modelle verstoßen.

JAbr
quelle
Vielen Dank für Ihren Kommentar @JAbr, aber ich prognostiziere nicht wirklich. Meine Anwendung ist vielmehr die strikte Simulation eines alternativen Preispfades mit denselben statistischen Merkmalen wie die beobachteten Daten.
Jeff
Okay, aber auf anderen Stationen prognostizieren Sie tatsächlich mit dem Garch-Modell, nicht wahr? Ihre Simulationen verwenden Garch, und Garch erzeugt Beobachtung durch Prognose.
JAbr
Absolut, aber Sie haben gesagt, dass sich die Prognosen für Zeitreihenmodelle verschlechtern, wenn sich der Horizont weiter in die Zukunft erstreckt. Ich schlage vor, dass das Modell die Dynamik der Serie nicht ausreichend erfasst, selbst wenn es an Horizonten einer einzelnen Periode simuliert (oder prognostiziert).
Jeff
Ich sagte "Sie können für die nächsten ein oder zwei Perioden arbeiten" mein schlechtes, ich hätte sagen sollen, kann oder kann nicht.
JAbr
0

Meine Vorschläge wären, sicherzustellen, dass das von Ihnen ausgewählte Modell für die Daten geeignet ist.

  • Stellen Sie sicher, dass keine zyklischen oder saisonalen Komponenten vorhanden sind.
  • Führen Sie einen Augmented Dickey Fuller Test durch, um das Vorhandensein von Unit Root zu testen. Wenn eine Einheitswurzel vorhanden ist, differenzieren Sie die Daten so lange, bis der Augmented Dickey Fuller Test das Vorhandensein von Einheitswurzeln anzeigt. Alternativ können Sie die Autokorrelationskoeffizienten beobachten. Sie sollten nach einigen n Zeitverzögerungen für die Stationarität abfallen.
  • Vielleicht haben Sie das Modell mit falschen Bestellungen über- oder untergepasst? Finden Sie die richtigen Bestellungen mit AIC und BIC.
A-ar
quelle
tdistribution.model="std"
Du hast recht. Ich werde meine Antwort bearbeiten.
A-ar
Ich mache mir keine Sorgen über eine Überanpassung - tatsächlich möchte ich für meine beabsichtigte Anwendung das Modell überanpassen. Ich habe auf Stationarität getestet, aber nicht auf Saisonalität. Unabhängig von diesen Problemen scheint das GARCH-Modell nicht richtig zu funktionieren. Es sieht so aus, als ob die simulierte Serie durch und durch homoskedastisch ist.
Jeff