Esto no es realmente una respuesta, pero es demasiado largo para añadirlo como comentario.
Siempre he tenido un verdadero problema con la correlación/covarianza de precio . Para mí, no significa nada. Me doy cuenta de que se usa (abusa) en muchos contextos, pero simplemente no saco nada en claro (con el tiempo, el precio tiene que subir, bajar o ir de lado, así que ¿no están todos los precios "correlacionados"?)
Por otro lado, la correlación/covarianza de devuelve tiene sentido. Estás tratando con series aleatorias, no con series aleatorias integradas.
Por ejemplo, a continuación se muestra el código necesario para generar dos series de precios que están correlacionadas devuelve .
A continuación se muestra un gráfico típico. En general, cuando la serie roja sube, es probable que la serie azul suba. Si ejecuta este código una y otra vez, tendrá una idea de los "rendimientos correlacionados".
library(MASS)
#The input data
numpoi <- 1000 #Number of points to generate
meax <- 0.0002 #Mean for x
stax <- 0.010 #Standard deviation for x
meay <- 0.0002 #Mean for y
stay <- 0.005 #Standard deviation for y
corxy <- 0.8 #Correlation coeficient for xy
#Build the covariance matrix and generate the correlated random results
(covmat <- matrix(c(stax^2, corxy*stax*stay, corxy*stax*stay, stay^2), nrow=2))
res <- mvrnorm(numpoi, c(meax, meay), covmat)
plot(res[,1], res[,2])
#Calculate the stats of res[] so they can be checked with the input data
mean(res[,1])
sd(res[,1])
mean(res[,2])
sd(res[,2])
cor(res[,1], res[,2])
#Plot the two price series that have correlated returns
plot(exp(cumsum(res[,1])), main="Two Price Series with Correlated Returns", ylab="Price", type="l", col="red")
lines(exp(cumsum(res[,2])), col="blue")
Si trato de generar una correlación precios (no devoluciones) Estoy perplejo. Las únicas técnicas que conozco se refieren a aleatorio normalmente distribuido entradas, no entradas integradas .
Entonces, mi pregunta es, ¿alguien sabe cómo generar precios correlacionados ?
No tengo tiempo, así que tendré que añadir mis comentarios sobre la cointegración más tarde.
Edición 1 (24/04/2011) ================================================
Lo anterior se refiere a la correlación de rendimientos pero, como se insinúa en la pregunta original, en el mundo real parece que correlación de precios es una cuestión más importante. Después de todo, aunque los rendimientos estén correlacionados, si las dos series de precios se separan con el tiempo, mi operación de pares me va a fastidiar. Ahí es donde entra la cointegración.
Cuando busco "cointegración":
http://en.wikipedia.org/wiki/Cointegration
Me sale algo así como:
"....Si dos o más series están integradas individualmente (en el sentido de serie temporal) pero alguna combinación lineal de ellas tiene un orden de integración inferior, entonces se dice que las series están cointegradas...."
¿Qué significa eso?
Necesito algo de código para poder jugar con las cosas y hacer que esa definición tenga sentido. Aquí está mi intento de una versión muy simple de cointegración. Voy a utilizar los mismos datos de entrada como en el código anterior.
#The input data
numpoi <- 1000 #Number of data points
meax <- 0.0002 #Mean for x
stax <- 0.0100 #Standard deviation for x
meay <- 0.0002 #Mean for y
stay <- 0.0050 #Standard deviation for y
coex <- 0.0200 #Co-integration coefficient for x
coey <- 0.0200 #Co-integration coefficient for y
#Generate the noise terms for x and y
ranx <- rnorm(numpoi, mean=meax, sd=stax) #White noise for x
rany <- rnorm(numpoi, mean=meay, sd=stay) #White noise for y
#Generate the co-integrated series x and y
x <- numeric(numpoi)
y <- numeric(numpoi)
x[1] <- 0
y[1] <- 0
for (i in 2:numpoi) {
x[i] <- x[i-1] + (coex * (y[i-1] - x[i-1])) + ranx[i-1]
y[i] <- y[i-1] + (coey * (x[i-1] - y[i-1])) + rany[i-1]
}
#Plot x and y as prices
ylim <- range(exp(x), exp(y))
plot(exp(x), ylim=ylim, type="l", main=paste("Co-integrated Pair (coex=",coex,", coey=",coey,")", sep=""), ylab="Price", col="red")
lines(exp(y), col="blue")
legend("bottomleft", c("exp(x)", "exp(y)"), lty=c(1, 1), col=c("red", "blue"), bg="white")
#Calculate the correlation of the returns.
#Notice that for reasonable coex and coey values,
#the correlation of dx and dy is dominated by
#the spurious correlation of ranx and rany
dx <- diff(x)
dy <- diff(y)
plot(dx, dy)
cor(dx, dy)
cor(ranx, rany)
Observe que el "término de cointegración" para x e y aparece dentro del "bucle for":
x[i] <- x[i-1] + (coex * (y[i-1] - x[i-1])) + ranx[i-1]
y[i] <- y[i-1] + (coey * (x[i-1] - y[i-1])) + rany[i-1]
Un positivo coex
determina la velocidad x
tratará de reducir la dispersión con y
. Asimismo, un positivo coey
determina la velocidad y
tratará de reducir la dispersión con x
. Puede ajustar estos valores para generar todo tipo de gráficos y ver cómo esos términos de cointegración (y[i-1] - x[i-1])
y (x[i-1] - y[i-1])
trabajo.
Cuando hayas jugado un rato con esto, fíjate en que no responde realmente a la correlación de precios problema. Lo sustituye. Entonces, ¿ya me he librado de la cuestión de la correlación de precios?
\=========================================================
Obviamente, ahora es el momento de juntar los dos conceptos para obtener un modelo que se acerque a la negociación por pares. A continuación, el código:
library(MASS)
#The input data
numpoi <- 1000 #Number of data points
meax <- 0.0002 #Mean for x
stax <- 0.0100 #Standard deviation for x
meay <- 0.0002 #Mean for y
stay <- 0.0050 #Standard deviation for y
coex <- 0.0200 #Co-integration coefficient for x
coey <- 0.0200 #Co-integration coefficient for y
corxy <- 0.800 #Correlation coeficient for xy
#Build the covariance matrix and generate the correlated random results
(covmat <- matrix(c(stax^2, corxy*stax*stay, corxy*stax*stay, stay^2), nrow=2))
res <- mvrnorm(numpoi, c(meax, meay), covmat)
#Generate the co-integrated series x and y
x <- numeric(numpoi)
y <- numeric(numpoi)
x[1] <- 0
y[1] <- 0
for (i in 2:numpoi) {
x[i] <- x[i-1] + (coex * (y[i-1] - x[i-1])) + res[i-1, 1]
y[i] <- y[i-1] + (coey * (x[i-1] - y[i-1])) + res[i-1, 2]
}
#Plot x and y as prices
ylim <- range(exp(x), exp(y))
plot(exp(x), ylim=ylim, type="l", main=paste("Co-integrated Pair with Correlated Returns (coex=",coex,", coey=",coey,")", sep=""), ylab="Price", col="red")
lines(exp(y), col="blue")
legend("bottomleft", c("exp(x)", "exp(y)"), lty=c(1, 1), col=c("red", "blue"), bg="white")
#Calculate the correlation of the returns.
#Notice that for reasonable coex and coey values,
#the correlation of dx and dy is dominated by
#the correlation of res[,1] and res[,2]
dx <- diff(x)
dy <- diff(y)
plot(dx, dy)
cor(dx, dy)
cor(res[, 1], res[, 2])
Se puede jugar con los parámetros y generar todo tipo de combinaciones. Observe que, aunque estas series reducen sistemáticamente el diferencial, no se puede predecir cómo o cuándo el diferencial se reducirá. Esta es sólo una de las razones por las que el comercio de pares es tan divertido. El resultado final es que, para llegar a modelar el comercio de pares, se requiere tanto los rendimientos correlacionados como la cointegración .
Un ejemplo típico. Exxon (XOM) frente a Chevron (CVX), donde se aplica el modelo anterior si se añaden algunos términos adicionales.
http://finance.yahoo.com/q/bc?s=XOM&t=5y&l=on&z=l&q=l&c=cvx
Así que, respondiendo a tu pregunta (como sólo mi opinión), la correlación de precios se suele utilizar/abusar como un intento de tratar la divergencia/cercanía a largo plazo de las trayectorias de las series, cuando lo que se debería utilizar es la cointegración. Son los términos de cointegración los que limitan la deriva entre las series. La correlación de precios no tiene ningún significado real. La correlación de los rendimientos de las series determina la similitud a corto plazo de las mismas.
Lo he hecho con prisas, así que si alguien ve un error, que no tema señalarlo.
0 votos
Entonces, mi pregunta es, ¿alguien sabe cómo generar precios correlacionados? Para generar series temporales correlacionadas hay que utilizar el enfoque de la cópula.
0 votos
@Dr.Mike Si quieres hacer una pregunta, tienes que hacer clic en el Preguntar en la esquina superior derecha y publíquelo allí.
0 votos
@Joshua Ulrich ¿es posible tener cointegración sin correlación de las tasas de retorno a largo plazo (o correlación de la diferencia de precios para un gran retardo de la diferencia)?