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:
Ich habe dann versucht, eine Zeitreihe basierend auf dem angepassten Modell zu simulieren, wobei ich Folgendes erhalten habe:
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.
ugarchspec()
undugarchsim()
befinden). Stellen Sie sicher, dass Ihr Code reproduzierbar ist, wenn Sie hier eine Frage stellen, und dass er "Menschen hilft, Ihnen zu helfen".Antworten:
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.
quelle
Meine Vorschläge wären, sicherzustellen, dass das von Ihnen ausgewählte Modell für die Daten geeignet ist.
quelle
distribution.model="std"