Programmazione Amibroker Tutorial: matrice di covarianza ibrida usando le volatilità implicite delle opzioni (1 Viewer)

Cren

Forumer storico
Non sapevo come contrassegnare questo thread, visto che al campo "Argomento" un bel "Programmazione R" non c'è, e allora ho messo "Programmazione Amibroker" visto che, tutto sommato, se ci sono in giro le librerie per interfacciarli, allora non dovrebbe essere un problema mettere in produzione il codice in quell'ambiente.

Stasera non esco, e quindi vi beccate questo tutorial :D

Cosa vogliamo fare?

Non so quanti di voi diano regolarmente un'occhiata alla matrice di covarianza (dubito) e di correlazione (più probabile) degli strumenti finanziari con cui lavorano; io lo faccio abbastanza spesso, non tanto perchè mi piaccia quanto perchè spesso mi serve come input per aiutarmi a decidere come suddividere il capitale tra vari strumenti.

Non so nemmeno quanto di voi sanno che passare da l'una all'altra non richiede alcun processo di stima sui dati, nè altre diavolerie: ce la si può cavare con un paio di operazioni tra matrici, che spiego nel seguito ma che poi deleghiamo ai software (per inciso lo fa anche Hoadley, quindi quello che espongo nel seguito si può benissimo replicare in Excel in tempi rapidi).

Se V è la matrice di covarianza, la matrice di correlazione P è semplicemente (ce la caviamo con la sigla dei supporti ottici per tenere la formula a mente :lol:)

gif.latex
,

dove D è un'altra matrice che adesso definiamo e il prodotto è ovviamente di tipo vettoriale e non scalare (niente paura! Fanno tutto i software!):

gif.latex
,

le volatilità da sbattere sulla diagonale le prendete da V, naturalmente, ed ecco spiegato perchè si passa da una parte all'altra in un batter d'occhio.

Quindi, nel caso opposto, faremo l'operazione inversa: per passare dalla matrice di correlazione a quella di covarianza ci serve naturalmente P ma anche un vettore di volatilità.

Qualcuno avrà già capito dove voglio arrivare, quindi vengo al sodo: cosa succede se, passando dalla matrice di correlazione a quella di covarianza, il vettore di volatilità non è stimato sui dati storici ma proviene dai book delle opzioni (ovvero dalla volatilità implicita *generalmente* front month e interpolata ATM)?

Dal punto di vista matematico, non cambia una cippa: la matrice resta internamente coerente, e io non vi annoio con questi dettagli.

Dal punto di vista finanziario, tuttavia, sostituiamo una misura backward looking (la volatilità storica) con una forward looking (la volatilità implicita), con tutti i vantaggi del caso.

Il risultato è una matrice di covarianza ibrida: la varianza (cioè la diagonale principale) è squisitamente implicita, non guarda al passato; la covarianza deriva dalla volatilità implicita ma è "tarata" sulle correlazioni storiche.

Va da sè che questo oggetto risente in tempo reale di tutto ciò che accade nel book delle opzioni in prossimità dello spot, ma anche (mi sembra di essere Veltroni) di tutto ciò che accade al sottostante.

Nel commento ho scritto
Codice:
[COLOR=DarkRed]# Visualizzo la nostra matrice ibrida: la correlazione tra gli asset è stimata a partire dai dati
# storici, ma varianza e covarianza derivano dalla volatilità implicita delle opzioni; ne segue che
# varianza e covarianza sono ora sensibili sia a quanto accade nel book delle opzioni sia a quanto
# accade al sottostante[/COLOR]
Che me ne faccio?

...cominciare a dare questa matrice ibrida in pasto ad un portafoglio a varianza minima può riservare delle sorprese rispetto alla canonica covarianza storica stimata sui dati passati :futuro:

Se interessa, posso mostrare il procedimento in Hoadley ma è tutto sommato molto facile da fare.

Codice:
[COLOR=Teal]# ******************************************************************************************************
# Matrice di covarianza ibrida: volatilità implicita - covarianza storica
# By Cren
# ******************************************************************************************************

# Il package 'rmgarch' non lo trovate su CRAN, va installato scaricandolo da R-Forge; con la prossima
# istruzione lo scarichiamo e lo installiamo[/COLOR]

install.packages("rmgarch", repos="http://R-Forge.R-project.org")

[COLOR=Teal]# Carico i package necessari; se ve ne manca qualcuno, potete scaricarli da qui:
# http://cran.r-project.org/web/packages/available_packages_by_name.html[/COLOR]

require(lavaan)
require(quantmod)
require(rmgarch)
require(timeSeries)

[COLOR=Teal]# Scarico da Yahoo quattro serie OHLC di ETF: S&P500, Treasury Long Term, oro e materie prime[/COLOR]

tickers <- c('SPY', 'TLT', 'GLD', 'DBC')
getSymbols(tickers, from = '1950-01-01')

[COLOR=Teal]# Raggruppo nella matrice 'X' i prezzi di chiusura degli ETF allineandoli e rimuovendo i dati mancanti[/COLOR]

X <- na.omit(merge(Cl(SPY), Cl(TLT), Cl(GLD), Cl(DBC)))

[COLOR=Teal]# Calcolo i rendimenti aritmetici[/COLOR]

dX <- returns(X, method = 'discrete') ; dX[1,] <- 0

[COLOR=Teal]# Specifico un modello EGARCH multivariato a residui normalmente distribuiti; potete vedere un elenco
# dei modelli supportati digitando '?ugarchspec' nella console[/COLOR]

spec <- gogarchspec(mean.model = list(model = 'constant'), variance.model = list(model = 'eGARCH'), distribution.model = 'mvnorm')

[COLOR=Teal]# Stimo la matrice di covarianza condizionata storica[/COLOR]

hist.V <- rcov(gogarchfit(spec = spec, data = dX))[,,nrow(dX)]

[COLOR=Teal]# Converto la matrice di covarianza nella corrispondente matrice di correlazione[/COLOR]

hist.Rho <- cov2cor(V)

[COLOR=Teal]# 'iv' è il vettore delle volatilità implicite front month che raccogliete dal mercato (presumibilmente
# una media pesata delle volatilità implicite At-The-Money); in questo esempio io le ho generate
# casualmente dalle volatilità storiche solo per avere un valore numerico abbastanza simile da usare,
# nella realtà andrete a prendere la IV ATM front month direttamente dal book delle opzioni[/COLOR]

iv <- diag(V) * exp(rnorm(length(diag(V)), mean = .2, sd = .4))

[COLOR=Teal]# Converto la matrice di correlazione nella corrispondente matrice di covarianza utilizzando, al posto
# delle volatilità storiche calcolate in precedenza, le volatilità implicite[/COLOR]

hybrid.V <- cor2cov(R = hist.Rho, sds = iv)

[COLOR=Teal]# Visualizzo la nostra matrice ibrida: la correlazione tra gli asset è stimata a partire dai dati
# storici, ma varianza e covarianza derivano dalla volatilità implicita delle opzioni; ne segue che
# varianza e covarianza sono ora sensibili sia a quanto accade nel book delle opzioni sia a quanto
# accade al sottostante[/COLOR]

hybrid.V
 
Ultima modifica:

GiuliaP

The Dark Side
Perdonami!

Secondo me stai di nuovo costruendo castelli sulla sabbia. E prima di costruire, se non si vuole perdere tempo (ovvero saltare la corda), bisogna assolutamente accertarsi che le fondamenta siano più che solide.

I motivi sono sicura tu già li sappia, perchè ce li siamo detti e ridetti ma evidentemente non ti hanno mai convinto.

Non te lo dovevo dire? :-?
 

Cren

Forumer storico
I motivi sono sicura tu già li sappia, perchè ce li siamo detti e ridetti ma evidentemente non ti hanno mai convinto.
Me l'aspettavo il tuo commento, me l'aspettavo :D

Ci siamo già detti tutto: dall'uso dei dati storici allo scambiare la volatilità implicita per ciò che non è; quindi considera quelle tre righe di codice per ciò che sono: qua non si propone alcun metodo operativo, siamo solo nel campo dello smanettamento :)
 
Ultima modifica:

reef

...
So' troppo buono :D

Richiede il Finance Add-in di Hoadley per funzionare!

Sei troppo buono! :bow:
E con questo esempio si dimostra, per chi vuol puntare direttamente al risultato, che la libreria di Hoadley è una bella scorciatoia...
(e per altro, estrae pure le IV)
 
Ultima modifica:

Cren

Forumer storico
Ma quali sono i risultati pratici di questa modifica?

Generalizzare è difficile, ma si possono fare alcune osservazioni su casi particolari.

Nota: inserite il ticker della prima colonna su un qualsiasi motore di ricerca finanziario, e.g. Yahoo, per avere una breve descrizione dell'ETF.
Codice:
    Implied  Historical (meth. 1)  Historical (meth. 2)

DIA    [B]49%            6%            9%[/B]
EEM    0%             0%            0%
EFA    0%             0%            0%
EWJ    0%             0%            0%
EWZ    0%             0%            0%
FXI    0%             0%            0%
GLD    [B]13%            11%           7%[/B]
IWM    0%             0%            0%
IYR    0%             0%            0%
QQQ    0%             [B]4%            5%[/B]
SLV    0%             0%            0%
SPY    0%             0%            2%
TLT    [B]39%            51%           50%[/B]
USO    0%             [B]4%            3%[/B]
VWO    0%             0%            0%
XHB    0%             0%            0%
XLB    0%             0%            0%
XLE    0%             0%            0%
XLF    0%             0%            0%
XLK    0%             [B]4%            4%[/B]
XLV    0%             [B]21%           20%[/B]
Nella tabella di cui sopra vi mostro il confronto tra i pesi ottimali del portafoglio a minima varianza ottenuti in tre modi diversi:

  1. minimizzando la varianza stimata con la matrice ibrida, quindi con la volatilità ricavata dai book delle opzioni;
  2. minimizzando la varianza stimata con la matrice storica, usando un primo metodo di stima;
  3. minimizzando la varianza stimata con la matrice storica, usando un secondo metodo di stima.
La prima cosa che salta subito all'occhio è che le volatilità implicite, a differenza delle storiche, si concentrano su un trinomio ben preciso e dai contorni più netti: Dow Jones Industrial Average, oro e Treasury Bond 20+ Year; i due metodi storici, invece, frammentano l'azionario su diversi settori a discapito dell'oro.

E' interessante notare che l'allocazione derivante dalle volatilità implicite rispecchia una logica fondamentale più grezza e concreta, con tre asset class fondamentali contro la frammentazione degli altri due metodi.

Emerge, inoltre, che tutti i settori dell'insieme "frammentato", a quanto pare, scontano un variance risk premium (la differenza tra IV e HV) maggiore rispetto ai tre dell'insieme "fondamentale": questo effetto dipende solamente dalla liquidità?
 
Ultima modifica:

Users who are viewing this thread

Alto