17 votos

Cómo generar un random series de precios con un rango especificado y correlación con un precio real?

Quiero generar una maqueta de la serie de precios. Quiero que sea dentro de un cierto rango y tienen definida una correlación con el precio original de la serie.

Si he de elegir, de decir, de aceite, yo quiero que la mayor cantidad de series de tiempo que tienen algunas características similares en términos de correlación, pero no exacto. No quiero que los datos a vagar en un camino completamente diferente de la histórica ruta tomada. No es necesariamente co-integrado, la correlación será suficiente. También me gustaría que estos se adhieran a la original de la gama de precio. La serie debe ser al azar, por ejemplo, cada nueva realización debe tomar un camino diferente.

9voto

mendicant Puntos 489

De dos maneras:

Modelo de la devuelve mediante una de Ornstein-Uhlenbeck proceso

Usted puede controlar la varianza del ruido residual en el proceso a su nivel deseado de correlación. Conceptualmente inyectar ruido gaussiano en el sintético OU proceso para satisfacer su requisito.

Por ejemplo, digamos que usted tiene el tiempo de la serie a, que es lo que están modelando. El tiempo de la serie B, el sintético de la serie. Que modelo de series de tiempo a través de la unidad organizativa del proceso. Ahora usted tiene que parametrizar la OU proceso. Por ejemplo, usted puede elegir qué parte de la varianza para permitir en el tiempo de la serie B.

Sabemos que la correlación es simplemente la covarianza(a,b)/[ desvest(a) * desvest(b) ]. Por lo tanto, podemos resolver esta ecuación en términos de la varianza(b) de modo que usted puede conectar su IC y de repente el nivel apropiado de la varianza para el tiempo de la serie 'b' en la OU proceso.

La OU proceso le dará más flexibilidad, pero no es tan sencillo de configurar.

El uso de la Ley Fundamental de la Gestión Activa

BARRA realiza un Monte Carlo para simular alfa señales a un nivel específico de Información Coeficiente de uso de esta técnica. La simulación de alfa señales con una determinada correlación es la misma idea de la generación de una serie temporal, que se correlaciona con un precio. La diferencia es que usted tiene que convertir su precio original de la serie en un retorno de la serie, aplicar el procedimiento para generar una correlación alfa de la señal y, a continuación, integrar la serie alpha por lo que es en la forma de los niveles de precios en lugar de los rendimientos.

Usted puede encontrar más información sobre el enfoque de aquí.

Actualización:

He añadido un código simple para demostrar la inyección ortogonal de ruido gaussiano de modo que la resultante de la serie tiene un nivel específico de correlación:

# rho = desired correlation
# signals = a matrix where columns are asset returns and rows are periods
# covlist = a list of covariance matrixs corresponding to a given row (i.e. period)
# See example below for illustration

 simpleNormalNoise <- function( signals , covlist , rho ) # one noisy signal per each mu and covariance matrix
    {
    noise   = sapply( 1:ncol( signals ) , function(x) { normals = rnorm( nrow( covlist[[x]])) ; return( normals * sqrt(diag( covlist[[x]] ))) } )
    signals = sapply( 1:ncol( signals ) , function(x) { return( rho*signals[,x] + sqrt( 1-rho*rho ) * noise[,x] ) } )
    return( signals ) 
    }

# Example:
sd1 = 1 # asset1
sd2 = 1 # asset2
cor = 0.8
cov = cor * sd1 * sd2
sample  = matrix( c( sd1^2 , cov , cov , sd2^2 ) , 2 , 2 )
covs    = lapply( 1:1000000 , function(x) { return( sample ) } )
fakemus = sapply( 1:1000000 , function(x) { return( rnorm( 2 ) ) } )

signals = simpleNormalNoise( fakemus, covs, .10 )
sd(t(signals)) #should be ~1
cor(t(signals)) #shoudl be ~0
cor(fakemus[1,],signals[1,]) #~.1
cor(fakemus[2,],signals[2,]) #~.1
mean(signals[1,]) #~ .05*.1
mean(signals[2,]) #~ .08*.1

4voto

Kristof Provost Puntos 293

3voto

Ant Puntos 121

Usted podría crear un reescalado indicador estocástico de su generados al azar, en correlación de la serie.

1) el uso de cualquier software, metodología desea crear su serie aleatoria con 0.85 correlación con los datos originales.

2) encontrar los valores máximo y mínimo de esta nueva serie y cambiar la escala de la serie a un rango entre 0 y 1 mediante esta fórmula; (series_value - min_series_value) / (max_series_value - min_series_value)

3) decidir sobre el alcance de la restricción, por ejemplo, los precios oscilan entre los 35 y 85 para un rango de 50, así que multiplicar cada valor desde el paso 2) de 50 a transformar el 0 a 1 rango de 0 a 50 de rango.

4) agregar el valor mínimo de los 35 a los valores del paso 3) para cambiar la serie hacia arriba, de modo que su final de la serie tiene un valor mínimo de 35 años, un valor máximo de 85 y dentro del rango de 35 a 85 de la serie es esencialmente la serie al azar generado en el paso 1).

2voto

henrikpp Puntos 340

He visto una técnica que utiliza el dominio de la frecuencia y hace bastante lo que (creo) que está tratando de hacer. El autor no le da los detalles completos, debe ponerse en contacto con él para que, o echar un vistazo a la (libre) de software que se ha desarrollado. Enlace aquí: http://blog.quantumfading.com/2009/08/24/historical-data-randomization-using-the-frequency-domain-preview/

1voto

EndangeredMassa Puntos 9532

Si usted desea hacer la devuelve "al azar", entonces usted tendrá que generar todo el precio de las rutas que cubren su correlación criterios y, a continuación, descartar los resultados que no se ajustan a sus criterios de precio. Esto no es al azar. Si yo sé cómo los precios de evolucionar, entonces puedo generar un asesino de comercio de la regla.

Sugiero el uso de datos históricos. Estos datos son fáciles de obtener con la quantmod paquete en R.

Finanhelp.com

FinanHelp es una comunidad para personas con conocimientos de economía y finanzas, o quiere aprender. Puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X