Utilizzo dei modelli ARMA-GARCH per simulare i prezzi dei cambi


10

Ho adattato un modello ARIMA (1,1,1) -GARCH (1,1) alle serie temporali dei prezzi dei registri dei tassi di cambio AUD / USD campionati a intervalli di un minuto nel corso di diversi anni, dandomi oltre due milioni di punti dati su cui stimare il modello. Il set di dati è disponibile qui . Per chiarezza, si trattava di un modello ARMA-GARCH adatto ai registri resi a causa dell'integrazione del primo ordine dei prezzi dei tronchi. La serie temporale originale AUD / USD è simile alla seguente:

inserisci qui la descrizione dell'immagine

Ho quindi tentato di simulare una serie temporale basata sul modello montato, dandomi quanto segue:

inserisci qui la descrizione dell'immagine

Entrambi mi aspetto e desidero che le serie storiche simulate siano diverse dalle serie originali, ma non mi aspettavo che ci fosse una differenza così significativa. In sostanza, voglio che la serie simulata si comporti o assomigli in generale all'originale.

Questo è il codice R che ho usato per stimare il modello e simulare la serie:

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

E questo è l'output della stima:

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

Apprezzerei molto qualsiasi guida su come migliorare la mia modellazione e simulazione, o qualsiasi approfondimento sugli errori che avrei potuto fare. Sembra che il residuo del modello non venga utilizzato come termine del rumore nel mio tentativo di simulazione, anche se non sono sicuro di come incorporarlo.


1
Ciao Jeff! Dovresti anche fornire i tuoi dati (o almeno un campione rappresentativo) ai potenziali aiutanti. Inoltre, il codice di esempio non include i pacchetti utilizzati (dove risiedono le funzioni ugarchspec()e ugarchsim()). Assicurati che il tuo codice sia riproducibile ogni volta che fai una domanda qui e "aiuterà le persone ad aiutarti".
Salvato da GESÙ il

Grazie per il tuo consiglio, @SavedByJESUS. Ho aggiornato il mio post per includere la libreria R che ho usato e chiarito il formato dei miei dati.
Jeff,

Il motivo principale per cui i tuoi dati simulati è diverso dalla serie originale è semplicemente perché il modello montato, ARMA (1, 1, 1) GARCH (1, 1), non è il modello appropriato per i tuoi dati. Dovresti iniziare innanzitutto migliorando il modello, quindi la simulazione successiva sarà simile ai tuoi dati originali.
SavedByJESUS

Risposte:


1

Sto lavorando con la previsione dei dati forex e mi fido di me ogni volta che usi i metodi di previsione statistica che si tratti di ARMA, ARIMA, GARCH, ARCH ecc. Tendono sempre a deteriorarsi mentre cerchi di prevedere molto in anticipo nel tempo. Potrebbero funzionare o meno per uno o due periodi successivi, ma sicuramente non più di così. Perché i dati con cui hai a che fare non hanno autocorrelazione, tendenza e stagionalità.

La mia domanda per te, hai controllato ACF e PACF o test per tendenza, stagionalità prima di utilizzare ARMA e GARCH? Senza le proprietà sopra menzionate nella previsione statistica dei dati non funziona perché si stanno violando i presupposti di base di questi modelli.


Grazie per il tuo commento @JAbr, ma in realtà non sto facendo previsioni. Piuttosto, la mia applicazione è la simulazione rigorosa di un percorso di prezzo alternativo con le stesse caratteristiche statistiche dei dati osservati.
Jeff,

Va bene, ma in altri reparti in realtà stai facendo previsioni usando il modello Garch, non è vero, le tue simulazioni usano Garch e Garch produce osservazioni facendo previsioni.
JAbr

Assolutamente, ma hai detto che le previsioni dei modelli di serie storiche si deteriorano man mano che l'orizzonte si estende ulteriormente nel futuro. Sto suggerendo che il modello non cattura sufficientemente le dinamiche della serie anche quando simula (o prevede) in orizzonti di un singolo periodo.
Jeff,

ho detto "Potrebbero funzionare per uno o due periodi successivi" mio male, avrei dovuto dirlo o no.
JAbr

0

I miei suggerimenti sarebbero di assicurarsi che il modello selezionato sia appropriato per i dati.

  • Assicurarsi che non vi siano componenti ciclici o stagionali.
  • Esegui un test completo di Dickey Fuller per verificare la presenza della radice dell'unità. Se è presente l'unità radice, continuare a differenziare i dati fino a quando il test completo di Dickey completo non mostra la presenza di unità radice. In alternativa, osservare i coefficienti di correlazione automatica, che dovrebbero perdere dopo alcuni n ritardi per la stazionarietà.
  • Forse hai sovra-adattato o sotto-adattato il modello usando ordini errati? Trova gli ordini corretti utilizzando AIC e BIC.

tdistribution.model="std"

Hai ragione. Modificherò la mia risposta.
A-ar

Non sono preoccupato per l'eccessivo adattamento - in effetti, per la mia applicazione prevista voglio adattarsi troppo al modello. Ho testato la stazionarietà, anche se non per la stagionalità. Indipendentemente da questi problemi, il modello GARCH non sembra funzionare correttamente. Sembra che la serie simulata sia completamente omoscedastica.
Jeff,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.