Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Finanzas Cuantitativas
Juan Salvador Domandl
FaMAF
2021
juan.domandl@mi.unc.edu.ar
lim Vn ≃ V Black−Scholes
n→∞
Esta adaptación CRR se puede leer en (Ross, 2011).
Computar analíticamente la prima de la opción Vn del modelo binomial tiene complejidad O(2n ), es
decir, es sumamente costoso a medida que n crece y no existe un método efectivo que tenga complejidad
polinomial. Una buena solución es usar simulaciones de Monte Carlo, tomamos una muestra aleatoria
m < 2n de payoffs V n(i) de la opción generados por el árbol binomial y tenemos que
m→∞ [ (1 + i ) n ∑ ]
m
1
Vn ≃ lim V n(i)
i=1
Esta solución si bien no es exacta, tiene complejidad O(m) . Para el desarrollo del trabajo
implementamos en python la discretización CRR y aproximamos la prima de la opción europea usando el
método de Monte Carlo.
Para el análisis de convergencia y de sensibilidad hemos usado siempre un valor inicial del
subyacente S0 = 1, esto es porque normalizamos la prima y el strike con S0.
figura 1
Usando 10 5 iteraciones en la simulación de Monte Carlo, el número de pasos n = 30 , fijando los parámetros
de volatilidad σ = 0.4 , la madurez de la opción T = 0.25 , la tasa de interés sin riesgo en r = 0.10 . y con
100 valores en orden ascendiente del strike K ∈ [0.5, 1.5] obtenemos los valores de la figura 2.
Manteniendo los demás parámetros constantes, podemos observar que la prima de una put (call)
crece (decrece) de manera monótona creciente (decreciente) frente a los aumentos del strike.
figura 2
También observamos en la figura 3 que la paridad put-call teórica de una opción europea, es decir,
c − p = S0 − K(1/(1 + i ))T se cumple (con un pequeño error, reducible si se aumenta el número de pasos y/
o simulaciones) si las comparamos con la paridad put-call empírica. Es decir la diferencia entre las primas
call y put generadas por el método.
figura 3
Usando 10 5 iteraciones en la simulación de Monte Carlo, el número de pasos n = 30 , fijando los parámetros
de madurez de la opción T = 0.25 , el strike K = 1.3 , la tasa de interés sin riesgo en r = 0.10 . y con 100
valores en orden ascendiente de la volatilidad σ ∈ [0.1, 1.0] obtenemos los valores de la figura 4.
Observamos que tanto la prima de la opción put como la de la call crecen a medida que el parámetro
de volatilidad del subyacente crece. Si el activo no tiene volatilidad no tendría mucho sentido realizar una
opción, por ej. sería muy raro realizar un contrato de opción sobre un plazo fijo.
La volatilidad se traduce en cuánto el precio del subyacente puede llegar a bajar o subir. Si el precio
del subyacente sube +σ entonces la prima de la call será mas cara y si el precio baja −σ entonces la prima de
la put se apreciará.
gura 4
Usando 10 5 iteraciones en la simulación de Monte Carlo, el número de pasos n = 30 , fijando los parámetros
de volatilidad σ = 0.4, la madurez de la opción, el strike K = 1.3, la tasa de interés sin riesgo en r = 0.10. y
con 100 valores en orden ascendiente de la volatilidad T ∈ [0.1, 1.0] obtenemos los valores de la figura 5.
Observamos que tanto la prima de la opción put como la de la call crecen a medida que el tiempo de
maduración es más grande. La razón de esto es que le da más tiempo al subyacente para bajar o subir de
precio, cuando sube el precio entonces la opción call es más valiosa y cuando baja entonces la put se aprecia.
Ahora bien, podemos observar que la prima put parece crecer más lento que la prima call o que
converge a algún valor. La explicación de esto es que un subyacente puede subir infinitamente su precio (i.e.,
la prima call puede subir infinitamente), pero no puede caer infinitamente (i.e., la prima put no puede subir
infinitamente): su límite es el precio mínimo, o sea, es 0$.
figura 5
fi
Para valorar una opción lookback flotante primero aplicamos el método de CRR para discretizar el modelo
de Black - Scholes. El método lookback hace depender el payoff de la opción de la trayectoria que toma el
activo, en nuestro caso el payoff es dado por,
V(T ) = S(T ) − min {St}
0≤t≤T
Existen 2n posibles trayectorias en el modelo binomial, por ende, el método que soluciona
analíticamente tiene complejidad O(2n ) . A continuación usaremos dos métodos menos costosos
computacionalmente para obtener una prima. Usando la adaptación de CRR para los parámetros σ = 0.4 ,
r = 0.10, T = 0.25 y S0 = 10.
figura 7
II. b. Método B.
Es claro ver en la figura 6 que en general en el modelo binomial tendremos que en el k paso entonces habrá
k + 1 nodos en ese paso.
En la opción lookback, si Si, j es el precio del nodo en el paso i y altura j, entonces tenemos que para
construir el árbol el precio de Si+1, j+1 si j ∉ {0, i} entonces tiene como padres a Si, j y Si, j+1 . Si j = 0
entonces tiene como único padre a Si,0 y si j = i tiene como único padre a Si,i . Aprovechamos esto para ir
actualizando los precios solo en función de los padres del nodo. Al árbol lo representamos como una matriz
de nodos.
Como la suma de las longitudes las listas de mínimos en el paso k es 2k , para reducir costos
computaciones, usamos en cada nodo un contador de las ocurrencias de los mínimos.
El costo de computar la lista de mínimos de cada nodo es despreciable, porque solo nos fijamos en
los padres del nodo y si algún, Smin del padre(s) es menor que Si+1, j+1 , entonces lo agregamos al contador
mínimos del presente nodo. Si no, agregamos Si+1, j+1 al contador de mínimos. En la implementación
utilizamos la estructura collections.Counter de la librería estándar de Python. El método
implementado, para 4 pasos nos genera árbol de la figura 9.
Es fácil ver que el árbol tiene 1 + 2 + . . . + n + (n + 1) = (n + 1) * (n + 2)/2 nodos. Esto nos da la
complejidad de construir el árbol O(n 2 ).
Como el modelo del árbol binomial tiene distribución binomial, podemos calcular la probabilidad de los
n + 1 Vk payoffs del paso n-ésimo de la siguiente manera,
( ∑ (k) )
n
n k n−k
V0 = (1 + i )−n p q Vk
k=0
Cada uno de los payoffs de la hoja k, Vk tiene el siguiente valor
∑
Vk = pmin,k, j (S(T ) − Smin,k, j )
j
Supongamos Mk la lista de mínimos en la hoja k , tenemos que la probabilidad de que ocurra un mínimo en
la hoja k es
𝔼
( ∑ (k) ( ∑ min,k, j ))
n
−n n k n−k k
V0 = (1 + i ) p q p (S(T ) − Smin,k, j )
k=0 j=0
Es fácil ver que inclusive en el pero caso l = m a x{lk} se tiene que l < n , hay que tener en cuenta que
computar el número combinatorio cuesta más de n pasos, entonces, el costo computacional de calcular la
prima V0 es O(n 2l ).
En la implementación utilizamos exactamente esta fórmula para para computar la prima, usando la
información almacenada en las hojas del árbol.
figura 10
Si bien ambos métodos generan una valoración similar, el método B. tiene la ventaja de ser mucho más
rápido. Según el razonamiento previo la complejidad del método de Monte Carlo es O(n m), con n el número
de pasos y m el número de simulaciones. Como queríamos un ECM < 0.001, según los resultados de nuestro
algoritmo es un múltiplo de 106 simulaciones. Es decir, m es muy grande.
En cambio, según nuestra inferencia sobre la complejidad del método B., ésta es o(n 2l ) con l la
máxima cantidad de mínimos distintos en las listas de mínimos. En teoría, para nuestro caso el método B,
debería ser mucho más rápido que el método A porque n ≤ 40 pero m ≥ 106.
La figura 11 afirma que el método de Monte Carlo es mucho más lento que el del árbol binomial. En
la figura 12 se observa mejor que el tiempo de ejecución del método B crece a medida que n aumenta.
figura 11
figura 12
Referencias.
• Applied Mathematical Finance, Ross y Reimer (1996).
• An Elementary Introduction to Mathematical Finance, Sheldon M. Ross (2011)
• Modelos Matemáticos en Finanzas Cuantitativas, Patricia Kisbye (2021).
• Modelos y Simulaciones, Patricia Kisbye (2021).
• Calculadora online de Black-Scholes: https://www.calkoo.com/en/black-scholes-option-pricing-model.
• Efficient Procedures for Valuing European and American Path-Dependent Options, J. Hull y A.White
(1993).
• The CRR Market Model, Marek Rutkowski (2016)
• Numerical Pricing for Path Dependent options, Yidong Liu, 1996