Freakonometrics

To content | To menu | To search

Tuesday, June 19 2012

Pricing options on multiple assets (part 1) with trees

I am a big fan of trees. It is a very nice way to see how financial pricing works, for derivatives. An with a matrix-based language (R for instance), it is extremely simple to compute almost everything. Even options multiple assets. Let us see how it works. But first, I have to assume that everyone knows about trees, and risk neutral probabilities, and is familiar with standard financial derivatives. Just in case, I can upload some old slides of the first course on asset pricing we gave a few years ago at École Polytechnique.

Let us get back on the pricing of (European) call options, with trees.The idea is simple. We have to fix the number of periods. Let us start with only one (as described in the slides above). The stock has price and can go either up, and then have price or go down, and have price . And the fundamental theorem of asset pricing says that we do not really care about probabilities of going up, or down. Assuming that we can buy or sell that stock, and that a risk free asset is available on the market, it is possible to price any contingent financial product, like a financial option. Since we know the final value of the option when the stock goes either up, or down, it is possible to replicate the payoff of that option using the stock and the risk free asset. And we can prove that the price of the option is simply

where the probability is the so-called risk neutral probability

So, we've done it here with only one single period, but it is possible to extend it to multiperiods. The idea is to keep that multiplicative representation of possible values of the stock, and to get a recombinant tree. At step 2, the stock can take only three different values: went up twice, went down twice, or went up and down (or the reverse, but we don't care: this is the point of recombining). If we write things down, then we can prove that

for some probability parameter (the so-call risk neutral probability, if it is unique). But we do not really care about those closed formula, the goal is to write an algorithm which computes the tree, and return the price of a call option (say). But before starting, we have to make a connection between that model with up and down prices, and the parameters of the Black-Scholes diffusion, for the stock price. The idea is to identify the first and the second moment, i.e.

(where, under the risk neutral probability, the trend is the risk free rate) and

The code might look like that

n=5; T=1; r=0.05; sigma=.4;S=50;K=50
price=function(n){
u.n=exp(sigma*sqrt(T/n));
d.n=1/u.n
p.n=(exp(r*T/n)-d.n)/(u.n-d.n)
SJ=matrix(0,n+1,n+1)
SJ[1,1]=S
for(i in(2:(n+1)))
{for(j in(1:i)){SJ[i,j]=S*u.n^(i-j)*d.n^(j-1)}}
OPT=matrix(0,n+1,n+1)
OPT[n+1,]=(SJ[n+1,]-K)*(SJ[n+1,]>K)
for(i in(n:1))
{for(j in(1:i)){OPT[i,j]=exp(-r*T/n)*(OPT[i+1,j]*p.n+
(1-p.n)*OPT[i+1,j+1])}}
return(OPT[1,1])
}

We can plot the evolution of the price, as a function of the number of time periods (or subdivision of the time interval, from now till maturity of the European option),

N=10:400
V=Vectorize(price)(N)
plot(N,V,type="l")

Note that we can compare with the Black-Scholes price of this call option, given by

where

and

d1=1/(sigma*sqrt(T))*(log(S/K)+(r+sigma^2/2)*T)
d2=d1-sigma*sqrt(T)
BS=S*pnorm(d1)-K*exp(-r*T)*pnorm(d2)
abline(h=BS,lty=2,col="red")

The code is clearly not optimal, but at least, we see what's going on. For instance, we do not need a matrix when we calculate using backward recursions the price of the option. We can just keep a single vector. But this matrix is nice, because we can use it to price American options. For instance, with the code below, we compare the price of an American put option, and the price of European put option.

price.american=function(n,opt="put"){
u.n=exp(sigma*sqrt(T/n)); d.n=1/u.n
p.n=(exp(r*T/n)-d.n)/(u.n-d.n)
SJ=matrix(0,n+1,n+1)
SJ[1,1]=S
for(i in(2:(n+1)))
{for(j in(1:i)) {SJ[i,j]=S*u.n^(i-j)*d.n^(j-1)}}
OPTe=matrix(0,n+1,n+1)
OPTa=matrix(0,n+1,n+1)
if(opt=="call"){
OPTa[n+1,]=(SJ[n+1,]-K)*(SJ[n+1,]>K)
OPTe[n+1,]=(SJ[n+1,]-K)*(SJ[n+1,]>K)
}
if(opt=="put"){
OPTa[n+1,]=(K-SJ[n+1,])*(SJ[n+1,]<K)
OPTe[n+1,]=(K-SJ[n+1,])*(SJ[n+1,]<K)
}
for(i in(n:1))
{
for(j in(1:i))
{if(opt=="call"){
OPTa[i,j]=max((SJ[i,j]-K)*(SJ[i,j]>K),
exp(-r*T/n)*(OPTa[i+1,j]*p.n+
(1-p.n)*OPTa[i+1,j+1]))}
if(opt=="put"){
OPTa[i,j]=max((K-SJ[i,j])*(K>SJ[i,j]),
exp(-r*T/n)*(OPTa[i+1,j]*p.n+
(1-p.n)*OPTa[i+1,j+1]))}
 
OPTe[i,j]=exp(-r*T/n)*(OPTe[i+1,j]*p.n+
(1-p.n)*OPTe[i+1,j+1])}}
priceop=c(OPTe[1,1],OPTa[1,1])
names(priceop)=c("E","A")
return(priceop)}

It is possible to compare those price, obtained on trees, with prices given by closed (approximated) formulas.

> d1=1/(sigma*sqrt(T))*(log(S/K)+(r+sigma^2/2)*T)
> d2=d1-sigma*sqrt(T)
> (BS=-S*pnorm(-d1)+K*exp(-r*T)*pnorm(-d2)  )
[1] 6.572947
> N=10:200
> M=Vectorize(price.american)(N)
> plot(N,M[1,],type='l',col='blue',ylim=range(M))
> lines(N,M[2,],type='l',col='red')
> abline(h=BS,lty=2,col='blue')
> library(fOptions)
> (am=BAWAmericanApproxOption(TypeFlag =
+ "p", S = S,X = K, Time = T, r = r,
+ b = r, sigma =sigma)@price)
[1] 6.840335
> abline(h=am,lty=2,col='red')

Another great thing with trees, is that it becomes possible to plot to region where it is optimal to exercise our right to sell the stock.

Let us move now to a model with two assets, as suggested by Rubinstein (1994). First, observe that a discretization of two independent Brownian motions will be based on two independent random walk, taking values

i.e. both went up (NW), both went down (SE), and one went up while the other went down (either NE or SW). With independent and symmetric random walks, the probabilities will be respectively 1/4. An if we move one step foreward, we have the following tree.

Here it is still recombining. But the size will increase much faster than in the univariate case. Now, assume that there might be some correlation. Then one can consider the following values, to have a specific correlation,

And again, the idea is then to identify the first two moments. This gives us the following system of equations for the four respective (risk neutral) probabilities 

For those willing to do the maths, please do. The answer should be

and for the last one

The code here looks like that

price.spead=function(n){
T=1; r=0.05; K=0
S1=105
S2=100
sigma1=0.4
sigma2=0.3
rho=0.5
u1.n=exp(sigma1*sqrt(T/n)); d1.n=1/u1.n
u2.n=exp(sigma2*sqrt(T/n)); d2.n=1/u2.n
 
v1=r-sigma1^2/2; v2=r-sigma2^2/2
puu.n=(1+rho+sqrt(T/n)*(v1/sigma1+v2/sigma2))/4
pud.n=(1-rho+sqrt(T/n)*(v1/sigma1-v2/sigma2))/4
pdu.n=(1-rho+sqrt(T/n)*(-v1/sigma1+v2/sigma2))/4
pdd.n=(1+rho+sqrt(T/n)*(-v1/sigma1-v2/sigma2))/4
k=0:n
un=matrix(1,n+1,1)
SJ= (S1 * d1.n^k * u1.n^(n-k-1)) %*% t(un) -
un %*%t(S2 * d2.n^k * u2.n^(n-k-1))
OPT=(SJ)*(SJ>K)
for(k in(n:1))
{
OPT0=matrix(0,k,k)
for(i in(1:k))
{
for(j in(1:k))
{OPT0[i,j]=(OPT[i,j]*puu.n+OPT[i+1,j]*pdu.n+
OPT[i,j+1]*pud.n+OPT[i+1,j+1]*pdd.n)*exp(-r*T/n)}}
OPT=OPT0}
return(OPT[1,1])}

If we look at the details, consider two periods, like on the figure above, the are nine values for the spread,

> n=2
> SJ
[,1]      [,2]       [,3]
[1,]  32.02217  84.86869 119.443578
[2,] -47.84652   5.00000  39.574891
[3,] -93.20959 -40.36308  -5.788184

and the payoff of the option is here

> OPT
[,1]     [,2]      [,3]
[1,] 32.02217 84.86869 119.44358
[2,]  0.00000  5.00000  39.57489
[3,]  0.00000  0.00000   0.00000

So if we go backward of one step, we have the following square of values

> k=n
> OPT0<-matrix(0,k,k)
> for(i in(1:k))
+ {
+   for(j in(1:k))
+   {
+     OPT0[i,j]=(OPT[i,j]*puu.n+OPT[i+1,j]*pdu.n+
+ OPT[i,j+1]*pud.n+OPT[i+1,j+1]*pdd.n)*exp(-r*T/n)
+ }
+ }
> OPT0
[,1]      [,2]
[1,] 22.2741190 58.421275
[2,]  0.5305465  5.977683

The idea is then to move backward once more,

> OPT=OPT0
> OPT0<-matrix(0,k,k)
> for(i in(1:k))
+ {
+   for(j in(1:k))
+   {
+     OPT0[i,j]=(OPT[i,j]*puu.n+OPT[i+1,j]*pdu.n+
+ OPT[i,j+1]*pud.n+OPT[i+1,j+1]*pdd.n)*exp(-r*T/n)
+ }
+ }
> OPT0
[,1]
[1,] 16.44106

Here calculations are much (much) longer,

> price.spead(250)
[1]  15.66496
and again, it is possible to use standard approximations to compare that price with a more standard one,
> (sp=SpreadApproxOption(TypeFlag =
+ "c", S1 = 105, S2 = 100, X = 0,
+ Time = 1, r = .05, sigma1 = .4,
+ sigma2 = .3, rho = .5)@price)
[1]  15.65077 
Well, playing with trees is nice, but it might not be optimal for complex products. Next time, we'll discuss other techniques...

Friday, May 4 2012

Correlations, dimension, and risk measure

Yesterday, while I was attending the IFM2 conference, at HEC Montreal, I heard a nice talk about credit risk, and a comparison between contagion (or at least default correlation), for corporate and retail companies (in the US). And it was mentioned that default correlation was much lower for retail companies than it could be for corporate risk. In a discussion that followed those slides, it was mentioned that banks in the US should actually have been working more with those small firms, since contagion risk was much lower.

A problem here is that the link between correlation, risk and dimension is rather complicated:

  • corporate means a small number of firms, high correlation (and possible large individual losses)
  • retail means a large number of firms (even perhaps extremely large), lower correlation (and small individual losses)

A simple model for default models is based on the assumption that we deal with an exchangeable portfolio (as in a previous post). With the following code, given an (individual) default probability, a default correlation, and a number of firms, it is possible to calculate the probability to have more than a given number of defaults.

 proba=function(s,a,m,n){
 b=a/m-a
 choose(n,s)*integrate(function(t){t^s*(1-t)^(n-s)*
 dbeta(t,a,b)},lower=0,upper=1,subdivisions=1000,
 stop.on.error =  FALSE)$value}
 
CDF=function(x=10,r=.4,m=.1,n=50){
a=m*(1-r)/r ;
V=rep(NA,n+1)
 for(i in 0:n){
 V[i+1]=proba(i,a,m,n)}
 V=V/sum(V);
 return(sum(V[1:(x+1)])) }

It is possible to calculate, for a large range of correlations, the probability to have - at least - 20% of default in the portfolio (in order to compare things that are comparable).

R=seq(.01,.99,by=.01)
VQ=matrix(NA,length(A),2)
for(i in 1:length(A)){
VQ[i,1]=1-CDF(r=A[i],x=4,n=20);  
VQ[i,2]=1-CDF(r=A[i],x=200,n=1000)}

With 20 firms (corporate) we want to have at least 4 defaults, while with 1000 firms (retail) there should be 200 defaults. As mentioned in the previous post, the relationship between correlation and quantiles of sums is not simple. Hence, it might not be monotone. The dotted line is the probability to have at least 4 defaults when default correlation is 50% (around 10%). The plain line is the probability to have at least 200 defaults, as a function of the correlation,

plot(A,1-VQ[,2],type="l",col="red",ylim=c(0,.22))
abline(h=1-VQ[50,1],lty=2,col="red")

In that case, with only a correlation of 10% among retail firms, the probability of having 20% defaults is the same as the same probability for corporate, but with 50% correlation... One should remember that in portfolio analysis, the links between correlation, dimension and risk measure is a sensitive issue...

Saturday, February 11 2012

des calculs en base 12 à la magie des log-rendements

Un des gros avantages dans la culture anglo-saxonne, c'est que culturellement, les anglais ont été de grands amateurs du système duodécimal (en base 12). Par exemple, il y a 12 pouces dans un pied, ou le fait que jusqu'aux années 70, il y avait 12 pences dans un schilling... Et ce que j'apprécie, c'est que ce système pousse à manipuler les fractions (2, 3, 4, 6 étant des diviseurs de 12) alors que le système décimal pousse à utiliser les nombres à virgule. Et compte tenu de la proximité avec les États-Unis, même si ici le système métrique a été adopté, il reste des fonds de ces calculs en base 12.
Par exemple, à l'école à Montréal, les tables d'addition et de multiplication vont jusqu'à 12. Aussi, l'autre soir, je faisais réviser les tables (de multiplication) de 11 et 12 à mon fils, et on a passé du temps sur http://freakonometrics.blog.free.fr/public/perso5/12-18.gif et http://freakonometrics.blog.free.fr/public/perso5/12-19.gif. Car sa première réponse à combien font huit fois douze ? a été ben.... cent ?. J'ai bien entendu protesté (c'est un euphémisme) pour la forme, tout en sachant qu'il est naturel de croire que http://freakonometrics.blog.free.fr/public/perso5/12-01.gif, ou que http://freakonometrics.blog.free.fr/public/perso5/12-02.gif. N'est ce pas ce qu'on pense quand on apprend qu'un prix a augmenté de 20% avant de baisser de 20% le lendemain ? Car c'est la même erreur que l'on commet. Et mine de rien, raisonner avec des rendements, c'est pénible.... (tous ceux qui ont discuté taux d’intérêt avec un banquier le savent).
Pour rappel, on définie le rendement comme la variation relative, i.e.
http://freakonometrics.blog.free.fr/public/perso5/12-03.gif
L'intérêt de cette formule est évident
http://freakonometrics.blog.free.fr/public/perso5/12-04.gif
Et si on regarde ce qui se passe sur deux jours
http://freakonometrics.blog.free.fr/public/perso5/12-05.gif
Aussi, si un jour on a un rendement de http://freakonometrics.blog.free.fr/public/perso5/12-06.gif, et le lendemain un rendement de http://freakonometrics.blog.free.fr/public/perso5/12-07.gif
http://freakonometrics.blog.free.fr/public/perso5/12-08.gif
Autrement dit, si on subit une baisse de 10% puis une hausse de 10% (ou le contraire d'ailleurs), on ne revient pas à la position initiale, car http://freakonometrics.blog.free.fr/public/perso5/12-09.gif (ou ce que je voyais avec mon fils quand on notait que http://freakonometrics.blog.free.fr/public/perso5/12-10.gif). En fait, on perd de l'argent... Damned, c'est pénible ça, non ? D'autant plus que si on répète cette alternance (entre une baisse de 10% puis une hausse de 10%) sur un an, au final, on a perdu 85% de valeur... Autrement dit, avec des rendements d'espérance nulle, et symétriques, la volatilité à elle seule fait perdre de l'argent...
Si on s'intéresse maintenant aux log-rendement,
http://freakonometrics.blog.free.fr/public/perso5/12-11.gif
cette fois, on note que
http://freakonometrics.blog.free.fr/public/perso5/12-12.gif
(on retrouve très explicitement la croissance exponentielle des prix). En faisant des développements limités, i.e. si les rendements sont faibles, alors on observe que http://freakonometrics.blog.free.fr/public/perso5/12-13.gif. En effet
http://freakonometrics.blog.free.fr/public/perso5/12-15.gif
Aussi, si http://freakonometrics.blog.free.fr/public/perso5/12-14.gif vaut 0.05, on parlera (abusivement) de hausse de 5%. Si on regarde une évolution sur deux jours,
http://freakonometrics.blog.free.fr/public/perso5/12-16.gif
Autrement dit, si on subit une baisse de 10% (en log-rendement) puis une hausse de 10% (ou le contraire), on revient à la position initiale (et donc on a une variation nulle) car http://freakonometrics.blog.free.fr/public/perso5/12-20.gif.
C'est probablement pour ça que les financiers utilisent des log-rendements: ils n'ont pas (en toute rigueur) la même interprétation que la variation relative, mais au moins on peut faire les calculs de manière très intuitive.

Tuesday, January 24 2012

It is "simply" the average value

for some obscure reasons, simple things are usually supposed to be simple. Recently, on the internet, I saw a lot of posts on the "average time in which you hold a stock", and two rather different values are mentioned

  • "Take any stock in the United States. The average time in which you hold a stock is – it's gone up from 20 seconds to 22 seconds in the last year" (Michael Hudson on http://www.telegraph.co.uk/) or "The founder of Tradebot, in Kansas City, Mo., told students in 2008 that his firm typically held stocks for 11 seconds" (on http://www.nytimes.com/) among many others
  • "Based on the NYSE index data, the mean duration of holding period by US investors was around 7 years in 1940. This stayed the same for the next 35 years.  The average holding period had fallen to under 2 years by the time of the 1987 crash. By the turn of the century it had fallen to below one year. It was around 7 months by 2007" (on http://topforeignstocks.com/ see also the graph below) or "Two-thirds [of the managers of more than 800 institutional funds interviewed in a study] had higher turnover than they predicted [...] Even though most are judged by performance over three-year horizons, their average holding period was about 17 months, and 19% of the managers held the typical stock for one year or less" (mentioned on http://online.wsj.com/) again among many others

How comes that on the one hand, some people talk about less than 20 sec. for the "average time in which you hold a stock", and on the other, around a year. How can we have such a difference ? We are talking about an average time here, not a rare event probability...

To understand what might be wrong, consider the following case, with a market, and two stocks: one is kept over a year (52 weaks) while the other other is traded - and exchanged - every week (52 times per year). What is the "average time in which you hold a stock" ? Is it

  • 26.5 weeks ? the average time for the first stock is 52 weeks, while it is 1 for the second one, i.e. 53 over 2
  • 1.96 weeks ? over a year the first stock has been traded once, while it was exchanged 52 times for the second one, i.e. 104 over 53 (total time over the total number of transactions)

Obviously, there is a selection bias in that study (see here for an illustration of that concept, in French). In order to get a better understanding, consider the following simple model, with a large number of simulated stocks. At each transaction, they can be hold by 3 types of investors,

  • with probability 70%, hold - on average - for 20 sec.
  • with probability 20%, hold - on average - for 15 days
  • with probability 10%, hold - on average - for 10 years

As claimed by Warren Buffett, "my favorite time frame for holding a stock is forever", so it might not be absurd to consider investors who keep a stock for a long period of time. Assume further that the time frame for holding a stock is exponentially distributed (the rate depending on the kind of investor). Assume that those stocks are observed during a period of time of 20 years (which might sound reasonable). Several techniques can be used to estimate the "average time in which you hold a stock"

  • The first one is to calculate the mean, per stock, of the holding time, and to consider the average over all the stocks. Maybe it would be a good idea to exclude the last observation (since data were censored),
  • The second one is to divide the (total) period of time by the (total) number of investors that hold the stock during that time frame (or number of transactions)
  • A third idea might be to use the first method, but instead of removing the last one, to use an estimator of the mean based on Kaplan-Meier estimate
  • A fourth idea is to look at what happened at a specific date (say after 10 years), i.e. which investor had the stock, and how long he kept it.

The code to generate that process is the following

> set.seed(1)
> invest=sample(size=ns,c("A","B","C"),
+ prob=c(.7,.2,.1),replace=TRUE)
> lambda=(invest=="A")*20/(365*24*60*60)+
+        (invest=="B")*15/365+
+        (invest=="C")*10
> E=rexp(ns,rate=1/lambda)
> T=cumsum(E)
> T=T[T<20]
> plot(c(T,50),0:length(T),type="s",xlim=c(0,20),col="blue")

with the following trajectory for the number of investor that did hold that specific stock between time 0 and time 20.

Then, the different techniques are the following,

# method 1
> E1=diff(T)
> m1=mean(E)
> M1[s]=m1

for the first one (means of time length, per stock),

# method 2
> if(length(T)>1){
+ n2=length(T)-1
+ d2=T[length(T)-l]-T[1]
+ N2[s]=n2; D2[s]=d2
+ }

for the second one (time length and number of transactions),

+ # method 3
+ T3=c(T,20)
+ C3=c(rep(0,length(T)-1),1)
+ km=survfit(Surv(diff(T3), 1-C3)~1)
+ m3=summary(km,rmean='individual')$table[5]
+ M3[s]=m3

for the third one (based on a prediction of the expected mean, from Kaplan-Meier estimate) and

# method 4
> T0=c(0,T,20)
> m4=min(T0[T0>10])-max(T0[T0<10])
> M4[s]=m4

for the fourth one (based on what happened at time 10). Using monte carlo simulations, we get very different quantities, that can all be interpreted as the "average time in which you hold a stock"

> sum(D2,na.rm=TRUE)/sum(N2,na.rm=TRUE)
[1] 0.3692335
> mean(M1,na.rm=TRUE)
[1] 0.5469591
> mean(M3,na.rm=TRUE)
[1] 1.702908
> mean(M4,na.rm=TRUE)
[1] 12.40229

If we change to probabilities (and assume that high frequency investors are much more important than long-term ones), e.g. 

> invest=sample(size=ns,c("A","B","C"),
+ prob=c(.9,.09,.01),replace=TRUE)

then the first two estimates are rather different. But not the last two.

> sum(D2,na.rm=TRUE)/sum(N2,na.rm=TRUE)
[1] 0.04072227
> mean(M1,na.rm=TRUE)
[1] 0.06393767
> mean(M3,na.rm=TRUE)
[1] 0.2504322
> mean(M4,na.rm=TRUE)
[1] 12.05508

So I have to confess that the "average time in which you hold a stock" can be almost anything from 10 sec. to 10 years, it clearly depends on the way the average is calculated. The second point is that if the proportion of high frequency trading is extremely high, I should not affect the last one (which is, from my point of view, the most interesting one, an might also be improved by here also integrate a censored variate). So I guess people should be careful when discussing such quantities... And if anyone is willing to share data on that topic, I'd be glad to look at them...

Friday, January 20 2012

Understanding interest rate term structure

On http://actuary-info.blogspot.com/, I found a nice Google applet to vizualize nicely the concept of interest rate term structure, based on Dutch data from 2001 till now
Untitled Document

Wednesday, January 18 2012

Gold price and fear

Via @theEconomist, I understood that there might be connections between the price of Gold (which is said to be extremely high nowadays) and the VIX SP500 index (the option volatility index, i.e. the so-called "fear index", as discussed - in French- a few months ago). This has been discussed also on several blogs, e.g. http://etfdailynews.com/ or http://blogs.marketwatch.com/. Via Yahoo quotes, it is possible to get also easily the SP500 VIX index. 

> library(tseries)
> X=get.hist.quote("^VIX")
> T=time(VIX)
> Y=as.POSIXlt(T)$year+1900
> X2011=X[Y==2011,]
> VIX=X2011[,4]
> VIX100=as.numeric(VIX)/VIX[1]*100
> T2011=T[Y==2011]
> plot(T2011,VIX100,lwd=2,col="red",type="l",
+ xlab="",ylab="",ylim=c(60,290))

And a huge xls file can give us the price of gold (on a daily basis). But we can extract only one series (with the price in USD, which is the series of interest here)

> goldprice=read.table(
+ "http://freakonometrics.blog.free.fr/
public/data/goldpriceUSD.csv"
, + header=TRUE,sep=";",dec=",") > T=as.Date(goldprice$Name,"%d/%m/%y") > GP=goldprice$USdollar > Y=as.POSIXlt(T)$year+1896 > GP2011=GP[Y==2011] > GP100=GP2011/GP2011[1]*100 > T2011=T[Y==2011] > lines(T2011-4*365.25,GP100,lwd=2,col="blue")

We can see that scales are quite different on those two series (starting at 100 at the beginning of January 2011),

An alternative might be not to consider the price of gold, but something more psychological, like Internet researches. It is possible to download the csv file for queries on gold price on Google, via google insight.

 
> google=read.table(
+ "http://freakonometrics.blog.free.fr/public/data/google.csv",
+ skip=4,header=TRUE,sep=",",nrows=51)
> W=as.Date(substr(as.character(google$Semaine),1,10))
> G=google$gold.price
> G100=G/G[1]*100
> lines(W,G100,lwd=2,col="blue")

which gives the following graph (again, starting at 100 at the beginning of January 2011),

Here, we can clearly observe that the two series are related, maybe cointegrated. Nice isn't it ?

Tuesday, October 18 2011

Short selling, volatility and bubbles

Yesterday, I wrote a post (in French) about short-selling in financial market since some journalists claimed that it was well-known that short -selling does increase volatility on financial market. Not only in French speaking journals actually, since we can read on http://www.forbes.com that  « in a market with restrictions on short-selling, volatility is reduced ». But things are not that simple. For instance http://www.optionsatoz.com/ explains it from a theoretical point of view. But we can also look at the data. For instance, we can compare the stock price of Air China, exchanged in Shanghai in blue (where short-selling is forbidden) and in Hong Kong in rouge (where short-selling is allowed), since @Igor gave me the tickers of those stocks

library(tseries)
X<-get.hist.quote("0753.HK")
Y<-get.hist.quote("601111.SS")
plot(Y[,4],col="blue",ylim=c(0,30))
lines(X[,4],col="red")

But as @alea_ pointed out, one asset is expressed here in Yuans renminbi, and the other one in HK dollars. So I downloaded the exchange rate from http://www.oanda.com/

Z=read.table("http://freakonometrics.blog.free.fr/public/
data/change-cny-hkd.csv"
,header=TRUE,sep=";",dec=",")
D=as.Date(as.character(Z$date),"%d/%m/%y")
z=as.numeric(Z$CNY.HKD)
plot(D,z,type="l")
X2=X[,4]
for(t in 1:length(X2)){
X2[t]=X2[t]*z[D==time(X2[t])]}
X2=X[,4]
plot(Y[,4],col="blue",ylim=c(0,30))
lines(X2,col="red")

Now both stocks are expressed in the same currency. To compare returns volatility, a first idea can be to use GARCH models,

RX=diff(log(X2))
RY=diff(log(Y[,4]))
Xgarch = garch(as.numeric(RX))
SIGMAX=predict(Xgarch)
Ygarch = garch(as.numeric(RY))
SIGMAY=predict(Ygarch)
plot(time(Y)[-1],SIGMAY[,1],col="blue",type="l")
lines(time(X2)[-1],SIGMAX[,1],col="red")

But volatility is here too eratic. So an alternative can be to use exponentially-weighted moving averages, where simple recursive relationships are considered

http://perso.univ-rennes1.fr/arthur.charpentier/latex/vol-04.png
or equivalently
http://perso.univ-rennes1.fr/arthur.charpentier/latex/vol-05.png
The code is not great, but it is easy to understand,
moy.ew=function(x,r){ 
m=rep(NA,length(x))
for(i in 1:length(x)){

m[i]=weighted.mean(x[1:i],
rev(r^(0:(i-1))))}
 return(m)}

sd.ew=function(x,r,m){
sd=rep(NA,length(x))
for(i in 1:length(x)){
 
sd[i]=weighted.mean((x[1:i]-m[i])^2,
 rev(r^(0:(i-1))))}
return(sd)}
q=.97
MX=moy.ew(RX,q)
SX=sd.ew(RX,q,MX)
MY=moy.ew(RY,q)
SY=sd.ew(RY,q,MY)
plot(time(Y)[-1],SY,col="blue",type="l")
lines(time(X2)[-1],SX,col="red")

And now we have something less erratic, so we can focus now on the interpretation.
It is also possible to look on the difference between those two series of volatility, areas in blue means that in Shanghai (again, where short-selling is forbidden) returns are more volatile than in Hong Kong, and areas in red are periods where returns are more volatile in Hong Kong,
a=time(X2)[which(time(X2)%in%time(Y))]
b=SY[which(time(Y)%in%time(X2))]-
SX[which(time(X2)%in%time(Y))]
n=length(a)
a=a[-n];b=b[-n]
plot(a,b,col="black",type="l")
polygon(c(a,rev(a)),c(pmax(b,0),rep(0,length(a))),
col="blue",border=NA)
polygon(c(a,rev(a)),c(pmin(b,0),rep(0,length(a))),
col="red",border=NA)

So clearly, there is nothing clear that can be said... Sometimes, volatility is higher in Hong Kong, and sometimes, it is higher in Shanghai. But if we look at the price, instead of looking at volatility,
a=time(X2)[which(time(X2)%in%time(Y))]
b=as.numeric(Y[which(time(Y)%in%time(X2)),4])-
as.numeric(X2[which(time(X2)%in%time(Y))])
n=length(a)
a=a[-n];b=b[-n]
plot(a,b,col="black",type="l")
polygon(c(a,rev(a)),c(pmax(b,0),rep(0,length(a))),
 
col="blue",border=NA)
polygon(c(a,rev(a)),c(pmin(b,0),rep(0,length(a))),
 
col="red",border=NA)

Here, it looks like bans on short-selling creates bubbles. Might not not be a good thing.

Saturday, October 15 2011

La vente à découvert, un moindre mal ?

Doit-on penser, comme l'avait dit Amartya Sen, que l'économie est une science morale ? La science économique (comme science 'humaine') a-t-elle un contenu moral per se, contrairement aux sciences 'dures' ? Si la morale est un choix de ce qui est bien et de ce qui est mal, on admettra que la loi de la gravitation universelle n'est bien ni mal. Pareil pour la division des cellules, ou le théorème de Pythagore. Pourtant en économie, il est fréquent d'évoquer une raison morale comme justification de tout et n'importe quoi... peut-être encore plus dès que l'on parle de finance...
Par exemple dans La Presse datant de fin septembre, on apprend que « les lois de l'offre et de la demande sont malheureusement faussées par le short selling [...] Pourquoi permet-on de telles pratiques? Comme vous le savez la très grande proportion des short sellers ce sont des spéculateurs [...] Malheureusement les autorités des marchés font la sourde oreille devant le gros bon sens d'une telle demande. Leur argument ? Oui! le «short selling» crée de la volatilité artificielle, mais l'interdire brimerait le libre jeu de l'offre et de la demande ».
Bref, la vente à découvert c'est mal, il faudrait l'interdire ! En Europe, La Tribune ou Le Monde en ont aussi parler, avec des arguments similaires.

Bruno Rémillard, que j'ai croisé en fin de semaine à un séminaire, me disait avoir envoyé à La Presse une lettre afin d'apporter des précisions (réponse écrite avec Nicolas Papageorgiou ), lettre restée pour l'instant sans réponse (et non publiée). Il reprenait en partie des résultats d'Alexandre Roch qui montrait que l'interdiction de vente à découvert pouvait générer des bulles spéculatives. Par exemple sur le graphique ci-dessus, emprunté à Alexandre, on a comparé les valeurs du titre d'Air China, échangé à la fois à Shanghai en bleu (où la vente à découvert est interdite) mais également à Hong Kong en rouge (où la vente à découvert est permise).

Je pense qu'il faudrait regarder plus attentivement pour montrer que le titre est plus volatile sur le marché où la vente à découvert n'est pas autorisée. Mais surtout, interdire la vente à découvert signifie encourager la création de bulles. Je ne suis pas sur que le jeu en vaille la chandelle....

Wednesday, August 17 2011

We keep breaking records ? so what ?... Get statistical perspective....

This summer, we have been told that some financial series broke some records (here, in French)

For instance, the French CAC40 had negative return for 11 consecutive days (which has never been seen, so far).

> library(tseries)
> x<-get.hist.quote("^FCHI")
> Y=x$Close
> Z=diff(log(Y))
> RUN=rle(as.character(Z>=0))$lengths
> n=length(RUN)
> LOSS=RUN[seq(2,n,by=2)]
> GAIN=RUN[seq(1,n,by=2)]
> TG=sort(table(GIN))
> TG[as.character(1:13)]
GAIN
1 2 3 4 5 6 7 8 9 <NA> <NA> <NA> 13
645 336 170 72 63 21 7 3 4 NA NA NA 1
 
> TL=sort(table(LOSS))
> TL[as.character(1:15)]
LOSS
1 2 3 4 5 6 7 8 9 <NA> 11 <NA> <NA>
664 337 186 68 42 14 5 3 1 NA 1 NA NA
 
> TR=sort(table(RUN))
> TR[as.character(1:15)]
RUN
1 2 3 4 5 6 7 8 9 <NA> 11 <NA> 13
1309 673 356 140 105 35 12 6 5 NA 1 NA 1
Indeed 11 consecutive days of negative returns is a record. But one should keep in mind the fact that the real records for runs is 13 consecutive days with positive returns...
But what does that mean ? Can we still assume time independence of log-returns (since today, a lot of financial models are still based on that assumption) ?
Actually. if financial series were time-independence, such a probability, indeed, should be rather small. At least on 11 or 10 runs. Something like
http://freakonometrics.blog.free.fr/public/perso3/cacindp03.gif
(assuming that each day, the probability to observe a negative return is 50%). But maybe not over 25 years (6250 trading days): the probability to observe a sub-sequence of 10 consecutive negative value (with daily probability of one half) over 6250 observations will be much larger. My guess is that is would be
http://freakonometrics.blog.free.fr/public/perso3/cacindp02.gif
where at the numerator we have the number of favourable cases over the total number of cases. At the numerator, the first number the number of cases where the first 10 (at least) are negative, then for the second one, we count the number of cases where the first is positive, then the next 10 (at least) are negative (and then the second is positive and then the next 10 are negative, the third is positive etc). For those interested by more details (and a more general formula on runs), an answer can be found here.
But note that the probability is quite large... So it is not that unlikely to observe such a sequence over 25 years.
A classical idea when looking at time series is to look at the autocorrelation function of the returns,

which might suggest that there is no correlation with past returns. But it should be possible to do more advanced tests.
On the CAC40 series, we can run an independence run test on the latest 100 consecutive days, and look at the p-value,
> library(lawstat)
> u=as.vector(Z[(n-100):n])
> runs.test(u,plot=TRUE)
 
Runs Test - Two sided
 
data: u
Standardized Runs Statistic = -0.4991, p-value = 0.6177

The B's here are returns lower than the median (almost null, so they might be considered as negative returns). With such a high p-value, we accept the null hypothesis, i.e. time independence.
If we consider a moving-time window

we can see that we accept the assumption of independence most the the time.
Actually, here, the time window is 100 days (+/- 50 days). But it is possible to consider 200 days,

or even 400 days,

So, except if we focus on 2006, it looks like we should reject the idea of time dependence in financial markets.
It is also possible to look more carefully at the distribution of runs, and to compare it with the case of independent samples (here we consider monte carlo generation of sequences having the same size),
> m=length(Z)
> ns=100000
> HIST=matrix(NA,ns,15)
> for(j in 1:ns){
+ XX=sample(c("A","B"),size=m,replace=TRUE)
+ RUNX=rle(as.character(XX))$lengths
+ S=sort(table(RUNX))
+ HIST[j,]=S[as.character(1:15)]
+ }
> meana=function(x){sum(x[is.na(x)==FALSE])/length(x)}
> cbind(TR[as.character(1:15)],apply(HIST,2,meana),
+ round(m/(2^(1+1:15))))
 
[,1] [,2] [,3]
1 1309 1305.12304 1305
2 673 652.46513 652
3 356 326.21119 326
4 140 163.05101 163
5 105 81.52366 82
6 35 40.74539 41
7 12 20.38198 20
8 6 10.16383 10
9 5 5.09871 5
10 NA 2.56239 3
11 1 1.26939 1
12 NA 0.63731 1
13 1 0.31815 0
14 NA 0.15812 0
15 NA 0.08013 0
The first column above is the empirical frequency of runs of length 1,2,3, etc. The second one is the average frequencies obtained on random simulation of independent sample. The third one is the theoretical frequency based on a (geometric distribution with mean 1).

Here again, it looks like our time series behave like an independent sample. Here is also a nice paper by Mark Schilling on the longest run of heads.
So it is not that odd to observe such a series of losses on financial markets....

Friday, February 11 2011

... pour tout l'or du monde

Allez, un rapide billet sur l'or (moins statistique que celui écrit il y a 6 mois sur le prix de l'or, ici). Car ce soir, avec les enfants, on survolait le livre passionnant de Theodore Gray, sur les Atomes.
Et ma fille a voulu que je lui lise la page sur l'aurum de son nom latin, alias Au dans la classification des éléments. Bon, il faut avouer que les dessins d'atomes l'amusent peu, mais elle regardait plutôt les choses qui brillaient...
Et j'ai été surpris par la phrase suivante "tout l'or jamais extrait dans l'histoire des hommes tiendrait aujourd'hui dans un cube d'environ 18.30 mètres de coté". J'avoue que ça a un peu cassé le mythe de plusieurs films américains, où on voit des montagnes de lingots, car finalement un cube de 18 mètres de côté, c'est relativement peu...
En fait, ça fait 6128.5m3. Et si on veut trouver le poids, en notant que la densité de l'or est de l'ordre de 19.25 (i.e. g/cm3), on doit arriver à un poids de l'ordre de 117973 tonnes. Ce qui fait son poids, j'en conviens... Maintenant si on regarde le cours de l'or, le lingot d'un kilogramme se négociait (aujourd'hui) à 32336 euros. Et bien selon ma calculatrice, on arrive à 3.815.1012 euros...

> 183^3*19.25*32336
[1] 3.814787e+12
ce qui correspond à 3814 milliards d'euros.

Alors pour les amateurs d'ordre de grandeur (ici), "le forex" (i.e. le trading sur les marchés de change) "c'est 4000 milliards de dollars échangés quotidiennement* en 2010". Mais ces sommes échangées sur les marchés, c'est assez dur à appréhender. Un autre ordre de grandeur a été donné par le WWF, qui a annoncé (ici) qu'il était possible de faire "4000 milliards d'euros d'économies d'énergie par an". Bref, tout d'un coup, je me suis rendu compte que ceux qui envisageraient un effondrement des marchés financiers et un retour à l'or comme valeur de référence étaient loin du compte.... Car décidément, l'or est un élément bien rare....
* ou tous les deux jours suivant ce que l'on compte, cf discussion dans les commentaires

Tuesday, December 7 2010

Taux et actualisation

Cet matin, Martin Vidberg mettait en ligne un dessin parlant d'actualisation (ici).Si j'ai bien tout suivi, c'est lié à une déclaration de Cantonna qui vient enfin de comprendre la première phrase  du cours d'économie monétaire 101 (qui dit que la confiance est la clé de voute du système monétaire).

Pour la petite histoire, il semble qu'il y ait 46 millions de livret ouverts (selon wikipedia, ici) pour un encours total de 139,2 milliards € l'an dernier (selon Les Echos, cité ici). A la louche ça fait un encours moyen par livret de l'ordre de 400 euros. Mais ayant souvent des interrogations sans grand intérêt, je me demandais si je pouvais retrouver ce 11€30 mentionné par Martin. Le hic est que le taux a changé le 1er août, passant de 1,25% (taux annuel) à 1,75%. Alors parmi les autres informations importantes, les intérêts du livret sont calculés par quinzaine de jours, et selon wikipedia "comme le taux est annuel et que les intérêts ne sont pas capitalisés durant l'année, il convient de diviser ce taux par 24 pour calculer les intérêts générés pendant une quinzaine." Je ne suis pas sûr d'avoir compris la formule, donc je vais raisonner comme si les intérêts calculs sur une semaine était recapitalisés, c'est à dire qu'on fait comme si le 1er et le 15 du mois, on retire ses sous pour ensuite les replacer immédiatement (avec les intérêts de la quinzaine précédente). Bon, on peut déjà noter que les intérêts calculés sur un an sont compris entre les deux grandeurs suivantes

> 775*0.0175
[1] 13.5625
> 775*0.0125
[1] 9.6875

(pour le moment tout va bien). Ensuite, on a la formule actuarielle, qui serait (car du 1er janvier au 1er août, on compte 14 quinzaines, et du 1er août au 1er janvier suivant, on en compte 8 - je renvois au commentaire d'Olivier qui m'a fait noté que j'avais du mal avec les soustractions avec retenues, ici). En fait, wikipedia propose une formule approché (on fait un développement limité au premier ordre),ce qui donne, numériquement,

> 775*((1.0125)^(14/24)*(1.0175)^(8/24)-1)
[1] 10.16382
> 775*((1+.0125*14/24)*(1+.0175*8/24)-1)
[1] 10.20484

Bref, je serais plutôt aux alentours de 10€16... Mais j'ai probablement raté quelque chose... donc si quelqu'un a une autre méthode, je suis preneur...

Mais comme me le faisait noter Olivier (ici),il faut ajouter 10 à 14 pour arriver à 24 (et pas 8, sinon j'actualise aujourd'hui)... ce qui finalement donne la même chose que Martin,
> 775*((1.0125)^(14/24)*(1.0175)^(10/24)-1)
[1] 11.29976
> 775*((1+.0125*14/24)*(1+.0175*10/24)-1)
[1] 11.34329
On notera d'ailleurs qu'en attendant la fin du mois pour toucher ses intérêts, on touchera un peu plus d'un euro de plus... (les 8 semaines nous ramènent à un retrait ce soir).

Thursday, June 3 2010

Foot, probabilité, et assurance, partie 2

Continuons le billet commencé ici, où j'essayais noté que les enseignes qui se sont engagé à faire des cadeaux en cas de victoire de l'équipe de France s'étaient couvertes via des contrats d'assurance. En fait, elles peuvent également se couvrir sur les marchés (en l'occurrence les sites de paris en ligne). Il existe plusieurs façons de faire des paris. La première est de faire (ou d'acheter) un pari sur un événement (la France ira en finale de la coupe du monde, par exemple). Ce pari est assorti d'une cote que défini le bookmaker. A une cote de 20 contre 1, si je paris 1 euro, je gagne 20 euros en cas de qualification pour la finale.
Dans ce cas particulier, le bookmaker est un agent important dans le marché, car il fixe le prix. Le site oddschecker.com (ici) permet de voir les cotes offertes par différents bookmakers.

Mais il existe aussi des marchés de paris, sans bookmakers. Il s'agit réellement d'un marché, où les parieurs prennent des positions les uns contre les autres, le bookmaker ne servant que d'intermédiaire et d'animateur sur ce marché. C'est le cas sur betfair.com () qui est un site d'échange de paris.

Pour commencer simplement, imaginons que nous sommes quelques jours avant une finale opposant la Corée du Sud aux Etats-Unis. Comme il ne peut y avoir qu'un vainqueur il existe des contrats symétrique, où l'on peut gagner 20 euros si la Corée gagner (et rien si elle perd) et un autre où l'on peut gagner 20 euros si la Corée perd. Bref, soit je suis acheter sur la Corée, soit je suis vendeur. Le prix de ces contrats indiquent la probabilité qu'a la Corée de gagner. On parle aussi de back or lay, deux évènements étant possibles.
  • Lecture d'une cote
Regardons maintenant le match d'ouverture, opposant l'Afrique du Sud au Mexique. Les cotes sont les suivantes, "Mexique 6/4, Afrique du Sud 15/8 et Draw (match nul) 11/5" sur un des sites. Le premier nombre indique ce que l'on gagne (net) en misant le second, si mon pari est gagnant. Autrement dit, si je paris 5 euros sur un match nul, et que match nul il y a, alors mon bénéfice sera de 11 (que je touche en plus de ma mise). La cote est alors de 1+11/5, soit 16/5 (j'avais fait ici un billet sur le lien entre cote et probabilité). Elle indique non plus le bénéfice, mais le gain: en misant 5 euros, j'empoche 16 euros. On parlera de paris 1X2.

Pour aller plus loin, on peut aussi parier sur le nombre de buts marqués. On parlera de paris over/under.

Chez le même bookmaker, si je paris 1 euro que la France gagne la coupe du monde, je fais un bénéfice de 18 euros.
  • Cote ou probabilité ?
Lorsque j'avais essayé d'expliquer l'origine de la loi logistique (ici), j'avais expliqué qu'il existait un lien simple entre probabilité et cote, la cote étant la probabilité que l'évènement se réalise, divisé par la probabilité qu'il ne se réaliste pas. Malheureusement, les choses sont un peu plus complexes dans les paris...
Zoomons un peu sur le match d'ouverture,

La cote est la valeur offerte la par le bookmarker, à laquelle on ajoute 1. La "probabilité" est alors l'inverse de cette cote.
résultat Bookie Offers Cote "probabilités"
Mexico 11/8 2.375 42.10%
South Africa 13/8 2.623 38.09%
Draw 11/5 3.200 31.25%


total 111.45%
A-t-on raté quelquechose ? car visiblement la "probabilité" n'est pas une vraie probabilité... En fait, supposer que l'on puisse construire une mesure de probabilité à partir des cotes doit pouvoir être relié au "théorème fondamental d'asset pricing" (et de probabilités risques neutres mentionnés tout à l'heure)
  • Relecture des cotes à l'aide du théorème fondamental

Autrement dit, on suppose qu'il existe une mesure http://perso.univ-rennes1.fr/arthur.charpentier/latex/foot-pari-01.png telle que
http://perso.univ-rennes1.fr/arthur.charpentier/latex/foot-pari-02.png
où http://perso.univ-rennes1.fr/arthur.charpentier/latex/foot-pari-03.png est l'ensemble des gains possibles, et http://perso.univ-rennes1.fr/arthur.charpentier/latex/foot-pari-04.png un équivalent certain.
On suppose qu'il existe un ensemble d'évènements http://perso.univ-rennes1.fr/arthur.charpentier/latex/foot-pari-05.png (mutuellement exclusif comme on dit, formant une partition de http://perso.univ-rennes1.fr/arthur.charpentier/latex/foot-pari-06.png), un seul pouvant survenir (en l'occurrence l'équipe qui reçoit gagne, ou l'équipe qui reçoit perd, ou il y a match nul). On considère un bookmaker qui accepte de payer http://perso.univ-rennes1.fr/arthur.charpentier/latex/foot-pari-08.png si l'évènement i survient à un joueur qui aura parié 1 euro. On pourra légitimement pense que http://perso.univ-rennes1.fr/arthur.charpentier/latex/foot-pari-09.png. Notre souhait est de relier ces http://perso.univ-rennes1.fr/arthur.charpentier/latex/foot-pari-08.png et http://perso.univ-rennes1.fr/arthur.charpentier/latex/foot-pari-10.png, si un lien quelconque pouvait exister. Ce problème avait été soulevé par Ramsey ou de Finetti.
En notant http://perso.univ-rennes1.fr/arthur.charpentier/latex/foot-pari-11.png le montant total placé sur l'évènement http://perso.univ-rennes1.fr/arthur.charpentier/latex/foot-pari-12.png. On pourra dire que l'on est à l'équilibre si http://perso.univ-rennes1.fr/arthur.charpentier/latex/foot-pari-13.png est constant. Autrement dit, le ratio des cotes doit être l'inverse des ratios de montants placés,
http://perso.univ-rennes1.fr/arthur.charpentier/latex/foot-pari-15.png
On peut ainsi s'intéresser à
http://perso.univ-rennes1.fr/arthur.charpentier/latex/foot-pari-16.png
qui est la fraction de l'argent qui sera effectivement rétribuée aux parieurs, ou http://perso.univ-rennes1.fr/arthur.charpentier/latex/foot-pari-17.png sera la  part gardée par le bookmaker. On peut penser qu'un bookmaker fixe http://perso.univ-rennes1.fr/arthur.charpentier/latex/foot-pari-18.png, et alors
http://perso.univ-rennes1.fr/arthur.charpentier/latex/foot-pari-20.png
En fait, k peut être vu comme un taux d'actualisation (l'équivalent d'un http://perso.univ-rennes1.fr/arthur.charpentier/latex/foot-pari-22.png en mathématique financière). On peut d'ailleurs noter que si on note http://perso.univ-rennes1.fr/arthur.charpentier/latex/foot-pari-25.png le produit
http://perso.univ-rennes1.fr/arthur.charpentier/latex/foot-pari-26.png
alors la stratégie consistant à parier
http://perso.univ-rennes1.fr/arthur.charpentier/latex/foot-pari-27.png
sur l'évènement http://perso.univ-rennes1.fr/arthur.charpentier/latex/foot-pari-12.png, pour tout les évènements, aura un coût unitaire (j'ai ici constitué mon portefeuille si on revient à la théorie de l'arbitrage). Aussi
http://perso.univ-rennes1.fr/arthur.charpentier/latex/foot-pari-29.png
En l'occurrence, sur le match d'ouverture de la coupe du monde, on obtient  http://perso.univ-rennes1.fr/arthur.charpentier/latex/foot-pari-18.png de l'ordre de 90% (l'inverse de la somme de la dernière colonne). Autrement dit, le bookmaker prend de l'ordre de 10%.
A partir de là, on peut en déduire de ces prix d'Arrow Debreu une "probabilité implicite" qui est la probabilité risque neutre, ou la croyance des investisseurs dans la survenance des évènements. Pour cela, on pourrait poser
http://perso.univ-rennes1.fr/arthur.charpentier/latex/foot-pari-30.png
sauf que dans ce cas, compte tenu de la dernière relation, http://perso.univ-rennes1.fr/arthur.charpentier/latex/foot-pari-34.png. On définie alors la probabilité implicite des parieurs sous la forme
http://perso.univ-rennes1.fr/arthur.charpentier/latex/foot-pari-35.png
On a réussit à construire une mesure de probabilité http://perso.univ-rennes1.fr/arthur.charpentier/latex/foot-pari-01.png, qui correspond à l'intuition des parieurs... mais qui n'a rien à voir avec la probabilité réelle. Si l'on compare les bookmakers, on note que les probabilités induites sont très proches,

et si on compare la part prise par le bookmaker sur ce match, on est là aussi sur des ordres de grandeurs comparables,
Justin Wolfers et Eric Zitzewitz, dans Prediction Markets paru dans le Journal of Economic Perspectives de 2004 (ici) expliquent d'ailleurs tout cela très clairement. Je peux aussi renvoyer à un document de travail datant de novembre dernier de Egon Franck, Erwin Verbeek, et Stephan Nüesch (en ligne ici).
J'ai parlé tout à l'heure de probabilité risque neutre, mais cela sous-entend que l'on puisse supposer les marchés efficients, et qu'il n'y ait absence d'opportunité d'arbitrage. C'est précisément ce qu'avait regardé Steven Levitt et Richard Gill ici, dans un vieux papier, évoqué également . Pour résumer les conclusions, il n'y a pas d'opportunités d'arbitrage sur ces marchés, et il existe des "market makers", c'est à dire des parieurs misant énormément, ce qui accroît considérablement la liquidité de ces marchés. Mais cette conclusion sur l'absence d'opportunité d'arbitrage a été largement remise en cause en pratique. Pour aller plus loin, on peut aussi regarder un article de Moris Eaton et David Freedman, Dutch Book against some 'Objective' Prior, paru dansBernoulli en 2004, en ligne . C'est marrant car cette relecture Bayésienne des jeux de pari peut être étudier en pratique, pour la coupe du monde de foot sur worldcup.bayesialab.com (, merci Avner pour le lien). Je vais continuer de suivre ça lorsque les matchs commençerons, afin de voir les mises à jour des paris au fur et à mesure de l'évolution des matchs... à suivre donc.

Tuesday, June 1 2010

Fibonacci: des lapins à l'actualisation


Depuis qu'on peut facilement commander des livres d'occasion outre-atlantique, j'avoue en abuser un peu... La dernière commande que j'ai faite est le "origins of value" de édité par William Goetzmann et Geert Rouwenhorst. Cet ouvrage, qui est une compilation d'articles d'histoire de la finance, contient un chapitre passionnant sur Leonardo Pisano alias Fibonacci. Pour remettre dans le contexte, Fibonacci vivait il y a fort fort longtemps, autour de 1200 (300 ans avant la renaissance et Léonard de Vinci). Je peux renvoyer ici par exemple pour une analyse de quelques uns de ses ouvrages.
Pour moi, Fibonnaci, c'était l'histoire de la reproduction des lapins, c'est à dire, l'étude des suites récurrentes pour ceux qui se souviennent de leurs cours de lycée, avec des suites de la forme
http://perso.univ-rennes1.fr/arthur.charpentier/latex/fibo-001.png
Le problème que l'on cherche à résoudre - posé par Fibonacci - est "partant d'un couple, combien de couples de lapins obtiendrons-nous après un nombre donné de mois sachant que chaque couple produit chaque mois un nouveau couple, lequel ne devient productif qu'après deux mois ? ". Pour ceux qui se souviennent de la résolution, l'équation charactéristique de cette relation de récurence est un polynôme de degré 2,
http://perso.univ-rennes1.fr/arthur.charpentier/latex/fibo-002.png
dont les solutions sont
http://perso.univ-rennes1.fr/arthur.charpentier/latex/fibo-003.png
et
http://perso.univ-rennes1.fr/arthur.charpentier/latex/fibo-004.png
Le premier nombre est souvent connu comme étant le nombre d'or (ici). Bref, Fibonacci a été recyclé abondamment par l'utilisation ésotérique de cette racine de polynôme de degré 2. Aussi, lorsque j'ai vu évoqué le nom de Fibonacci dans cet ouvrage de finance, j'ai eu peu peur, d'autant plus que certaines personnes faisant de l'analyse chartiste utilisent ce nombre d'or (comme l'évoque rapidement certains site, comme http://www.forexfibonacci.com/ ou http://www.fibonaccitrader.com/). Aussi, parler de Fibonacci en finance, c'est un peu comme parler de Nostradamus dans les modèles de prévisions.

Que nenni mon ami ! Fibonacci est l'auteur d'un  Liber Abaci, correspondant à un livre des calculs. En fait, Leonardo s'est énormément inspiré des mathématiques arabes, alors que la norme était plutôt l'arithmétique romaine. Pour ceux qui ont essayé un jour dans leur vie de lire des nombres latins (même dans Astérix), la logique est assez déroutante ! Par exemple 888 s'écrit DCCCLXXXVIII... Essayez avec cette écriture de poser une addition ! Les nombres arabes - eux - utilisaient le système décimale, ce qui a fait gagné énormément de temps de calcul (on peut aussi remonter à l'arithmétique indienne, mais on sort largement du cadre de mon billet). Fibonacci évoque d'ailleurs constamment l'utilisation de la règle de trois (sans l'appeler ainsi, j'étais revenu ici sur l'origine de cette règle).
Dans son livre d'arithmétique des nombres arabes, Fibonacci montre une application intéressante: le calculs d'actualisation et des marges commerciales. William Goetzmann reprend tout cela dans un article publié en 2003, " Fibonacci and the Financial Revolution" en ligne ici. Il faut aller pour cela dans le chapitre 12 du Liber Abaci, où Fibonacci parle de partage du profit (ce que nous appellerions l'allocation de capital, et que l'on retrouve dans les travaux sur les jeux coopératifs, en particulier les travaux de Shapley), mais aussi d'actualisation de flux futurs, et surtout, de réflexions sur la différence entre un taux annuel et un taux trimestriel. La version en anglaise est la suivante

ou encore

Dans la version originale, cela donne

Quand on pense qu'auparavant l'arithmétique se faisait en chiffre romain, et n'autorisait pas de raisonnements aussi subtils, on peut légitimement penser que Fibonacci est révolutionné le calcul actuariel (certes, en se contentant de traduire des textes arabes). Si on cherche à remonter encore dans le temps, on peut également citer un mathématicien indien, Brahmagupta, ब्रह्मगुप्त, vers 650, qui semble également avoir beaucoup inspiré Fibonacci.

Thursday, May 27 2010

Croyances financières et indice de peur

Pour illustrer certains éléments de la discussion qui a suivi la présentation d'hier (ici), je rappellerais qu'en 1908, Émile Durkheim avait participé à un colloque organisé par la Société d'Economie Politique, dont un compte rendu est en ligne ici. "l'orateur croit pourtant que les faits économiques peuvent être considérés sous un autre aspect ; eux aussi sont dans une mesure qu'il ne cherche pas à déterminer, affaire d'opinion". C'est d'ailleurs assez amusant de lire le compte rendu, où l'on apprend qu'un monsieur Villey, qui "s'est senti quelque peu scandalisé par certaines assertions qu'il a entendues": pour lui "l'opinion [...]a une très grande influence sur les conditions de marché qui agissent sur la valeur; mais elle ne détermine pas la valeur, laquelle est déterminée par des lois naturelles rigoureuses". Le président de la Société d'Economie Politique de conclure "à M. Durkheim qu'il paraît avoir exagéré l'influence de l'opinion en économie politique. Sans doute c'est un facteur puissant qui agit pour modifier certaines formes économiques, mais ce qu'elle ne transformera jamais, cesont les grandes lois économiques, qui sont immuables ". On peut aujourd'hui donner raison à Emile Durkheim, je pense, quand on voit que le VIX (volatility index) calculé par le Chicago Board Options Exchange sur les volatilités implicites d’un ensemble d'options de l'indice S&P 500. est appelé par certains "indice de peur" (comme l'avait rappelé Olivier hier soir).... Cet indice est téléchargeable ici,

Pour des applications plus théoriques de cet indice de croyance, je renvois au papier ici (que j'avais déjà mentionné ).

Thursday, March 18 2010

Exchange rates and correlation matrices

http://blogperso.univ-rennes1.fr/arthur.charpentier/public/perso2/.euro_dollar_yen_s.jpg I wanted to upload here a small problem I started to work on.... unfortunatley, I could not find (yet) a proper answer. Any comments and suggestions are welcomed. The problem is simple: consider 3 random variables that can be interpreted as exchange rates. Thus X is the exchange rate USD versus EUR, Y is the exchange rate EUR versus YEN, while Z is the exchange rate USD versus YEN. We then have the following constraint XY=Z. Given that constraint, what are the implied constraints on the correlation matrix of random vector (X,Y,Z) ?

  • Bounds on correlation
There are classically standard constraints on correlation. For instance, from Cauchy-Schwarz's inequality
http://perso.univ-rennes1.fr/arthur.charpentier/latex/change-corr-01.png
but those bounds are not necessarily sharp, given distributions of http://perso.univ-rennes1.fr/arthur.charpentier/latex/change-corr-02.png and http://perso.univ-rennes1.fr/arthur.charpentier/latex/change-corr-03.png. From Fréchet-Hoeffding bounds, we know that
http://perso.univ-rennes1.fr/arthur.charpentier/latex/change-corr-04.png
where http://perso.univ-rennes1.fr/arthur.charpentier/latex/change-corr-05.png. Further, correlation matrices are necessarily positive-semidefinite matrices.
To go further to find possible bounds, recall that
http://perso.univ-rennes1.fr/arthur.charpentier/latex/change-corr-06.png
and therefore
http://perso.univ-rennes1.fr/arthur.charpentier/latex/change-corr-07.png
i.e.
http://perso.univ-rennes1.fr/arthur.charpentier/latex/change-corr-08.png
Similarity, http://perso.univ-rennes1.fr/arthur.charpentier/latex/change-corr-09.png will be a function of http://perso.univ-rennes1.fr/arthur.charpentier/latex/change-corr-10.png.
Thus, given marginal distributions of http://perso.univ-rennes1.fr/arthur.charpentier/latex/change-corr-02.png and http://perso.univ-rennes1.fr/arthur.charpentier/latex/change-corr-03.png, covariances (and also correlations http://perso.univ-rennes1.fr/arthur.charpentier/latex/change-corr-11.png and http://perso.univ-rennes1.fr/arthur.charpentier/latex/change-corr-12.png) are functions of L'image “http://perso.univ-rennes1.fr/arthur.charpentier/latex/change-corr-13.png” ne peut être affichée car elle contient des erreurs.,http://perso.univ-rennes1.fr/arthur.charpentier/latex/change-corr-14.png and http://perso.univ-rennes1.fr/arthur.charpentier/latex/change-corr-15.png.
Somehow, we have obtained 2 degrees of freedom: if there are no additional constraints on those two coefficients, there should be no other constraints than having positive-semidefinite matrices.
I guess that http://perso.univ-rennes1.fr/arthur.charpentier/latex/change-corr-14.png and http://perso.univ-rennes1.fr/arthur.charpentier/latex/change-corr-15.png should not be connected. Those quantities are related to the co-skewness* and they should be different when dependence is asymmetric.
Given a 3 parameter copula for pair http://perso.univ-rennes1.fr/arthur.charpentier/latex/change-corr-16.png, respectively describing global dependence (that can be related to L'image “http://perso.univ-rennes1.fr/arthur.charpentier/latex/change-corr-13.png” ne peut être affichée car elle contient des erreurs. and tail asymmetry (that should be related either to http://perso.univ-rennes1.fr/arthur.charpentier/latex/change-corr-14.png and http://perso.univ-rennes1.fr/arthur.charpentier/latex/change-corr-15.png depending on the corner) it should be possible to derive any kind of triplets.
  • Running simulations

I have tried to generate a lot of samples. The idea is to draw pairs from mixtures of Marshall-Olkins' copula (wich are asymmetric), where parameters where generated randomly. I draw 250 values according to that copula. Then, the third variable is obtained taking the product of normalized pairs (or Studentized). And then calculate the associated correlation matrix.

  1.  draw http://perso.univ-rennes1.fr/arthur.charpentier/latex/change-corr-17.png from http://perso.univ-rennes1.fr/arthur.charpentier/latex/change-corr-18.png (but actually any positive distribution should work) and http://perso.univ-rennes1.fr/arthur.charpentier/latex/change-corr-19.png
  2. do 250 times the following (index http://perso.univ-rennes1.fr/arthur.charpentier/latex/change-corr-20.png)
  • draw http://perso.univ-rennes1.fr/arthur.charpentier/latex/change-corr-21.png with a Bernoulli http://perso.univ-rennes1.fr/arthur.charpentier/latex/change-corr-22.png distribution
  • draw http://perso.univ-rennes1.fr/arthur.charpentier/latex/change-corr-23.png from copula http://perso.univ-rennes1.fr/arthur.charpentier/latex/change-corr-24.png if http://perso.univ-rennes1.fr/arthur.charpentier/latex/change-corr-25.png and http://perso.univ-rennes1.fr/arthur.charpentier/latex/change-corr-27.png if http://perso.univ-rennes1.fr/arthur.charpentier/latex/change-corr-26.png
  • set http://perso.univ-rennes1.fr/arthur.charpentier/latex/change-corr-28.png and http://perso.univ-rennes1.fr/arthur.charpentier/latex/change-corr-29.png, and http://perso.univ-rennes1.fr/arthur.charpentier/latex/change-corr-30.png
  1. estimate the correlation of sample http://perso.univ-rennes1.fr/arthur.charpentier/latex/change-corr-31.png
In dimension 3, I have the following graph, 

In order to get a better understanding, I look at slices, for instance when http://perso.univ-rennes1.fr/arthur.charpentier/latex/change-corr-32.png. On the graph on the right, to dark area are values that can not be obtained since correlation have to be positive-semidefinite. Dots are points that have been obtained in a particular scenario. I have also included the convex hull if the points obtained with all the scenarios (here 50,000 scenarios), since I assume that the set of positive correlation is necessarily convex. Graphs below have been obtained when http://perso.univ-rennes1.fr/arthur.charpentier/latex/change-corr-33.png and http://perso.univ-rennes1.fr/arthur.charpentier/latex/change-corr-34.png
So far I have not been able to obtain all possible correlations, I guess...  If anyone has suggestions...
* Recall that the co-skewness matrix, in dimension 2, for a pair http://perso.univ-rennes1.fr/arthur.charpentier/latex/change-corr-35.png is simply
http://perso.univ-rennes1.fr/arthur.charpentier/latex/change-corr-36.png
where http://perso.univ-rennes1.fr/arthur.charpentier/latex/change-corr-37.png.

- page 1 of 2