En fin de TD, nous avons vu comment calculer des quantiles à l'aide des
résultats sur les valeurs extrêmes. Pour reprendre le début du code,
nous avons vu tout d'abord comment calculer une volatilité historique
par moyenne mobile,
> library(tseries)
> X=get.hist.quote("^FCHI")
essai
de l'URL
'http://chart.yahoo.com/table.csv?s=^FCHI&a=0&b=02&c=1991&d=1&e=15&f=2010&g=d&q=q&y=0&z=^FCHI&x=.csv'
Content type 'text/csv' length unknown
URL ouverte
downloaded 267 Kb
> P=X$Close
> R=diff(log(P))
> plot(R)
> abline(h=mean(R)+qnorm(.05)*sd(R),col="green")
> abline(h=mean(R)+qnorm(.01)*sd(R),col="blue")

+ sigma2[t+1,1]=beta1*sigma2[t,1]+(1-beta1)*R[t+1]^2
+ sigma2[t+1,2]=beta2*sigma2[t,2]+(1-beta2)*R[t+1]^2
+ sigma2[t+1,3]=beta3*sigma2[t,3]+(1-beta3)*R[t+1]^2
+ }
Erreur dans sigma2[t + 1, 1] = beta1 * sigma2[t, 1] + (1 - beta1) * R[t + :
indice hors limites
> S2=ts(data = sigma2, start = 1991, frequency = 252)
> plot(qnorm(.01)*sqrt(S2[,2]),col="red")
> abline(h=mean(R)+qnorm(.05)*sd(R),col="green")
> abline(h=mean(R)+qnorm(.01)*sd(R),col="blue")
> lines(qnorm(.01)*sqrt(S2[,3]),col="purple")

On peut ensuite utiliser des résultats sur les valeurs extrêmes, comme évoqués ici. Tout d'abord essayons d'utiliser l'estimateur de Hill. Le soucis est que pour calculer l'estimateur de Hill, il faut des données positives. On va donc se restreindre aux fortes pertes, dont on prendra ensuite l'opposé.
> RP=-R[R<(-.01)]
> length(RP)/length(R)
[1] 0.1843194
On se focalise ainsi sur 20% des observations, correspondant aux plus fortes pertes (rendement journaliers présentant une perte supérieure - en valeur absolue - à 1%). Pour calculer le quantile à 99% sur l'ensemble, il faudra calculer le quantile à 94,5% sur cette sous base,
> 1-0.01/(length(RP)/length(R))
[1] 0.9457464
Si on regarde l'estimateur de Hill sur le quantile, on obtient
> library(evir)
> hill(RP,option="quantile",p=.945)
Graph may look strange !!
Suggestion 1: Increase `p' above 0.98316
Suggestion 2: Increase `start' above 50


> GPD=gpd(as.numeric(-R),.015)
> TP=tailplot(GPD)
> gpd.q(TP, 0.99)
Lower CI Estimate Upper CI
0.03755175 0.03971711 0.04242509
> gpd.q(TP, 0.995)
Lower CI Estimate Upper CI
0.04480919 0.04811167 0.05270170
> gpd.q(TP, 0.999)
Lower CI Estimate Upper CI
0.06184920 0.06991049 0.08305725
On obtient ici un quantile à 99% aux alentours de 3,7% (4,1% semblant ici trop important).

> n=length(R)
> q=matrix(NA,100,3)
> for(i in 1:100){
+ debut=max(0,trunc(n/100*i)-200)+1
+ fin=trunc(n/100*i)
+ x=R[debut:fin]
+ out=gpd(-x,0.005)
+ OUT=tailplot(out,plot=FALSE)
+ Q=gpd.q(OUT,.99)
+ q[i,]=Q[]}
On peut visualiser l'ensemble sur le graphique suivant
> DT=as.Date("01/01/1991","%m/%d/%Y")+seq(0,n,by=n/100)/252*365
> I=is.na(q[,2])
> plot(DT[I==FALSE],-q[I==FALSE,2],type="l",col="red")

Le trait noir est l'ajustement Pareto global, la courbe orange est celui par estimation glissante de la volatilité, et celle en rouge est l'estimation GPD glissante (sur 200 jours). Il y a peut être des soucis temporelles (car il faut trouver un bon proxi de la date), mais voici en gros ce que l'on peut faire en quelques lignes de commande.


le prix de clôture,
le prix maximal,
le prix le plus bas atteint et
le prix à l'ouverture.



et
suffisement petit



tel que
. On a alors









