17 votos

Cómo obtener los griegos el uso de Monte-Carlo para arbitrario opción?

Supongamos que tengo una arbitraria opción que puedo precio usando simulación Monte-Carlo. ¿Cuál es el enfoque general (es decir, sin depender de la opción específica del tipo) para el cálculo de los griegos en este caso?

Edit: me le gustaría añadir un par de enlaces sobre el tema que he encontrado útil:

11voto

Kyle Cronin Puntos 554

Usted necesita para calcular su griegos como diferencias finitas, pero el procedimiento puede ser bastante complicado. Voy a utilizar vega $\aleph$ como el ejemplo aquí. Vamos a empezar por la designación de su estimador de Monte Carlo como una función $V(\sigma,s,M)$ donde $\sigma$ es la volatilidad, como de costumbre, $s$ es la semilla de su generador de números aleatorios, y $M$ es el número de muestras.

Para empezar, recordemos que el Monte Carlo estimación de cualquier valor converge con la raíz cuadrada del número de muestras. En particular, si usted elija de, digamos, $M=100$, usted puede ejecutar su estimador $N=500$ veces para obtener un estimado de $\{V_n\}_{i=1}^{500}$, la obtención de la desviación estándar $\Sigma_{100}$ de esas estimaciones.

Después de haber hecho esto, ahora sabemos que el error estándar del estimador para cualquier $M$ a ser

$$ e_M \approx \Sigma_{100} \sqrt{\frac{100}{M}} $$

Hay tres casos posibles:

  1. Usted puede controlar la semilla aleatoria $s$, o el conjunto de muestras aleatorias, utilizado por el estimador de Monte Carlo
  2. Usted no puede controlar $s$.
  3. Usted puede incluso controlar el recuento de muestras $M$.

En el primer caso, puede utilizar el hecho de que la $s$ ha sido controlada para obtener una estimación razonable de la vega con relativamente poco de trabajo extra.

Encontrar un $M$ tal que el error en el precio de la opción $e_M$ es tolerable. Elegir una semilla $s_0$ y un pequeño incremento de $\Delta\sigma$ en la volatilidad, y calcular

$$ \aleph^{(1)} = \frac{V(\sigma+\Delta\sigma,s_0,M)-V(\sigma\Delta\sigma,s_0,M)}{2\Delta\sigma} $$ y $$ \aleph^{(2)} = \frac{V(\sigma+\frac12\Delta\sigma,s_0,M) - V(\sigma\frac12\Delta\sigma,s_0,M)}{\Delta\sigma} $$

Si $\aleph^{(1)} \approx \aleph^{(2)}$, entonces usted tiene una buena estimación y listo.

La razón por la que esto funciona tan bien es que, mediante el control de la semilla, nuestra diferencia cálculos

$$ \delta=V(\sigma+\Delta\sigma,s_0,M)-V(\sigma\Delta\sigma,s_0,M) $$ son directos de Monte Carlo estimadores de la vega, ya que el shared de semillas implica que las muestras $x_i$ coincidir en la diferencia de las cantidades. Que es $$ \delta = ( \frac1M \sum_{i=1}^M f(x_i, \sigma+\Delta\sigma) ) -( \frac1M \sum_{i=1}^M f(x_i, \sigma\Delta\sigma) ) \\ =\frac1M \sum_{i=1}^M f(x_i, \sigma+\Delta\sigma)-f(x_i, \sigma\Delta\sigma) $$

El segundo caso en que usted no puede controlar la semilla, por otro lado, es bastante más difícil. Aquí, usted tendrá un error diferente $e$ a el verdadero valor cada vez que se ejecute la función.

Para mayor brevedad, vamos a dejar $$ e_\pm = V(\sigma\pm \Delta\sigma,s_\pm,M). $$

Por supuesto, no sabemos el valor de $e_\pm$ o de $s_\pm$, pero nosotros al menos tenemos nuestra forma de estimar el tamaño de $e_\pm$ como se señaló anteriormente. Por lo tanto, el error en $\delta$ es de aproximadamente $e_M \sqrt{2}$. Usted necesita elegir $M$ tan grande que $$ \delta \gg e_M \sqrt{2}. $$

No saber el valor de $\delta$ a priori lo hace difícil, pero por lo general en un contexto de trading se puede especificar un aceptable de error absoluto $\epsilon$ en la vega. En ese caso, podemos exigir $$ \epsilon < \frac{e_M \sqrt{2}}{\Delta\sigma} $$ que se traduce en $$ M > \Sigma_{100}^2 {\frac{200}{\epsilon^2 \Delta\sigma^2}}. $$

El tercer caso, donde se puede controlar ni la semilla aleatoria $s$ ni el recuento de muestras $M$ debe ser tratado como el segundo caso anterior. Simplemente tratar de cada ejecución del algoritmo como una sola muestra.

4voto

Vitalik Puntos 184

La mayoría de la respuesta general es a cambio de su entrada a la aproximación de la primera derivada. Dado que usted necesita Monte Carlo a precios de esta, puede ser caro. Pero esa es la manera que va, como cuando no se tienen soluciones analíticas como allí aint no hay almuerzo gratis ...

2voto

Sriram Puntos 121

Descargar el código de http://fmsoption.codeplex.com a ver cómo hacer que para las opciones de vainilla. Tienes razón, usted necesita implementaciones de funciones trascendentes que son escritos por el doble de los números. Puedes encontrar en la fmsdual proyecto.

Si solo quieres navegar por algunas código fuente, ver http://fmsoption.codeplex.com/SourceControl/changeset/view/10924#145366. Tenga en cuenta que eps es el equipo epsilon ~= 2e-16. (!)

2voto

Steven Dick Puntos 151

si el pago fuera es continua, el enfoque estándar es utilizar la ruta de acceso-método racional, también conocida como la IPA. Esto esencialmente significa que usted diferenciar a lo largo de cada ruta. Es el límite en el tamaño del bulto va a cero de finito de diferenciación.

El principal inconveniente de este método es que la diferenciación puede ser engorroso y lento. El Fumar adjoints papel que hizo mención la observación de que el uso de adjuntos/automático diferenciación hace que sea rápido y, de hecho, hay paquetes que va a hacer la diferenciación de forma automática para usted. Hay una encuesta en el artículo por Homescu sobre este tema.

Adjoints y Automática (Algorítmico) la Diferenciación en Finanzas Computacionales

Cristian Homescu

También he escrito demasiados papeles en esta. Ver mi página SSRN http://papers.ssrn.com/sol3/cf_dev/AbsByAuth.cfm?per_id=550354

Yo también dedicar un capítulo de Más Matemáticas de las Finanzas para esto.

Cuando el pago es discontinua o desea Hesse la vida es más complicada. Cociente de probabilidad es un método, pero puede dar lugar a grandes variaciones. Este es particularmente el caso de las vegas.

Ver Glasserman (2003) Métodos de Monte Carlo en la Ingeniería Financiera para la discusión general.

He hecho varios papeles en la discontinuo caso y en Hesse. Mis favoritos son

http://ssrn.com/abstract=2431580

http://ssrn.com/abstract=2011690

Esencialmente, estos funcionan haciendo el cambio de variables que eliminar las discontinuidades y entonces el pathwise método puede ser aplicado. Están diseñados para producir la mayoría de los pathwise mezcla de razón de verosimilitud y pathwise que evita la discontinuidad.

0voto

Sriram Puntos 121

Otra manera de hacer esto es utilizar el doble de los números. http://fmsdual.codeplex.com.

Permiten calcular un número arbitrario de los derivados mientras se ejecuta una sola de Monte Carlo. Aquí está un ejemplo de cómo usarlo:

// Monte Carlo derivatives
void fms_test_monte(size_t N)
{
    ::srand(static_cast<unsigned int>(::time(0)));

    double a = 0.5;
    dual::number<double,3> A(a, 1);
    dual::number<double,3> E(0.,1);

    for (int i = 0; i < N; ++i) {
        double x = 1.0*rand()/RAND_MAX;
        E = E + (x - A)*(x - A);
    }

    E = E/(1.*N);

    // X uniform [0,1]
    // E(X - a)^2 = 1/3 - 2a 1/2 + a^2
    ensure (fabs(E._(0) - (1./3 - a + a*a)) < sqrt(1./N));

    // d/da E(X - a)^2 = -2 E(X - a) = 2a - 1
    ensure (fabs(E._(1) - (2*a - 1)) < sqrt(1./N));

    // d^2/da^2 E(X - a)^2 = 2
    ensure (fabs(E._(2) - 2) < sqrt(1./N));
}

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