lema de ito

para derivar las ecuaciones diferenciales de evolución de precios de activos se usa lema de Ito dos dimenciones:

\( d f(X_t,Y_t) = f_{x}(X)dX+f_{y}(Y)dY+f_{xy}dXdY + \frac{1}{2} f_{xx}(X) dXdX+ \frac{1}{2} f_{yy}(Y) dY dY \)

basicamente es lo mismo que la formula de Taylor para dos variables desarollada hasta los terminos de 2ndo orden.mientras que en el calculo clasico basta con el primer orden , en el calculo estocastico hace falta 2ndo orden

cuadno aplicamos la lema de Ito vienen utiles las siguientes formulas:

\( dW_tdW_t=dt \)
\( dt_tdW_t=0 \)
\( dtdt=0 \)

ejemplo Ito

$$ d XY= XdY+YdX+dXdY $$ porque $$ (XY)_{xx}=0 $$ y $$ (XY)_{yy}=0 $$

Aplicaciones

– derivacion formula de Black-Scholes Black Scholes
-derivacion drift en Libor Market Model

Publicado en math

teorema de Girsanov

para cambiar medida de probabilidad se usa la formula de girsanov (teorema de girsanov ):

\( \frac{N_a(0)}{N_a(T)} d \mathbb{P}_a=\frac{N_b(0)}{N_b(T)} d \mathbb{P}_b\)

 

Na es numeraire a y su correpondiente medida de probabilidad es Pa

Nb es cualuier otro numeraire con su medida de probabilidad Pb

numeraire es precio de activo financiero liquido,generalmente como numeraire se coje precio de Bono cero-cupon o precio de accion o risk-neutral numeraire (growth factor)

Publicado en math

FX forward (seguro de cambio de divisas)

definición

Fx forward (= seguro de cambio) es un contrato de compra/venta de divisa a plazo con tipo de cambio determinado

Valoracion FX forward online

ejemplo

fecha inicio 1/oct/2012

fecha vencimiento 1/oct/2013

A compra 100 USD a tipo de cambio EURUSD de 1.23 (llamado strike)

valoración

que datos de mercado necesitamos?

  1. puntos forward
  2. curva descuento EUR

puntos forward de 1 mes representan cuantos puntos básicos hay que añadir al spot de hoy para saber el forward rate de EURUSD   (para el dia de hoy se la puede ver en esta pagina)

ejemplo si puntos forward para EURUSD  para term 1 mes es 30 , y spot de EURUSD a la fecha de valoración es 1.234 entonces el forward rate EURUSD para fecha de valoración +1 mes sera de 1.234+30/10000=1.237

algoritmo de valoración

  1. calculamos forward en Euros: Forward en dolares=spot+puntosForward/10000 , Forward en Euros=1/ForwardEnDolares
  2. calculamos valor neto de transaccion a vencimiento: NetValue=Nominal*(Forward-Strike)
  3. descontamos con la curva de EUR: NPV=FactorDescuentoEUR(vencimiento)*NetValue

valoración del FX forward del ejemplo:

fecha valoracion: 1/oct/2012

datos de mercado:

puntos forward EURUSD 12meses = 100

factor descuento EUR (1/oct/2013) = 0.9

spot EURUSD (1/oct/2012) = 1.234

1) calculamos forward 12 meses:

forward 12meses EURUSD=1.234+100/10000  = 1.244

forward USDEUR = 1/1.244=0.8039

2) calculamos valor a vencimiento:

strike en EUR = 1/1.23 = 0.813

Valor(vencimiento)=100 (0.8039-0.813)=-0.9149 EUR

3) descontamos el valor a fecha de valoración

NPV= 0.9*(-0.9149)=-0.8234 EUR

ejemplo en Excel (se peude editar celdas blancas)

Publicado en instrumentos financieros Etiquetado con:

como instalar quantlib para windows

para instalar quantlib para windows se necesitará visual studio 2008/2010 la solucion para visual studio 2012 esta en trunc

instalar python 2.7

bajar quantlib 

bajar quantlib-swig (puede ser para distribucion linux, por ejemplo para debian)

bajar boost

extrer todo eso en el directorio sin espacios [hay un bug en el script de python si hay espacios en directorios]

modificar variables de entorno:

INCLUDE = path to boost

QL_DIR = path to quantlib

build quantlib

ir al directorio swig/python

ejecutar:

python setup.py build --compiler=msvc

python setup.py install
Publicado en quantlib

Libor Market Model (BGM)

Libor Market Model es un modelo donde los forwards de Libor tienen distribución log-normal

en su medida de probabilidad correspondiente [ llamada T-measure]

ejemplo de Libor Market Model solo con dos forwards:

el P3(t) es el precio en tiempo t del bono cupón cero con vencimiento T3

F1->2(t) es el Forward [fixing T1, vencimiento T2]

Libor Market Model

Libor Market Model

cojemos como numeraire el bono P3(t)

segun LMM el forward $$F_{2->3}(t)$$ es martingala i.e. tiene la dinamica en la medida de probabilidad P3(t) de:
$$ dF_{2->3}(t)=F_{2->3}(t) \sigma_2 dW_2(t) $$
de esta dinámica se puede deducir la formula de Black para caplet (T2->T3) [la formula que se usa el los mercado, de aqui se llama Libor market model]

 

el forward F1->2 ya no es martingala y tendrá un drift

$$ dF_{1->2}(t)=F_{1->2}(t) ( drift(t) + \sigma_1 dW_1(t) ) $$

los brownianos en general son correladas

$$ dW_1dW_2=\rho dt $$

este drift(t) se puede calcular (idea de calculo: los P2/P3 y P1/P3 y F2->3 son martingalas, y pueden ser expresadas en funcion de $$F_{1->2}$$ y $$F_{2->3}$$ )

una vez obtenida la formula del drift se puede simular la dinámica conjunta de los dos forwards con el método monte-carlo y calcular asi cualquier derivado cuyo payoff depende de estos forwards

calculo drift Libor Market Model

idea: encontremos un activo expresado con $$ F_2 $$ y $$ F_3 $$ (va a ser el bono $$P_1$$)
dinamica $$F_3$$:
$$dF_3=F_3 \sigma_3 dW_3$$
dinamica $$F_2$$:
$$dF_2=\mu F_2 dt + \sigma_2 F_2 d W_2$$ en la medida $$P_3$$
$$1+\delta F_2=\frac{P_1}{P_2}$$
$$1+\delta F_3=\frac{P_2}{P_3}$$
si multiplicamos obtenemos martingala en medida $$P_3$$
asi que tenemos que encontrar $$\mu$$ tal que
$$ d [( 1+\delta F_2)(1+\delta F_3)] $$ tenga coeficiente delante de $$dt=0$$
aplicando formula de Ito de dos dimenciones y solo guardando los terminos con $$dt$$ obtenemos:
$$ \mu=-\frac{\sigma_2 \sigma_3 \rho \delta F_3}{1+\delta F_2}$$

Publicado en valoración derivados Etiquetado con:

Por que descontar los swaps colateralizados con curva EONIA?

en los swaps colateralizados
el colateral en cada momento debe coincidir con el MTM ( = valor razonable del derivado)

cojamos como ejemplo un swap simplificado con solo un flujo ,que paga 100 euros el dia T  [no tiene pata variable, si la tiene razonamiento es el mismo]

el dia T swap vale 100 euros => colateral también tiene que ser 100 euros

el dia T-1  cuanto colateral hay que poner? pues si el colateral en EUR y crece con tipo EONIA

hay que meter en cuenta del colateral 100 euros [valor del flujo] descontado según tipo EONIA

pero el colateral tiene que coincidir con el MTM (valor razonable) del derivado , asi que el flujo de 100 euros hay que descontarlo segun este tipo

 

otro ejemplo

si tenemos un swap en EUR, pero el colateral lo ponemos en USD , tenemos que descontar los flujos del swap segun tipo OIS (USD, fed funds rate) , por el mismo razonamiento que el parrafo anterior

Publicado en valoración derivados Etiquetado con: ,

valoración de derivados 101 : swap

como calcular el valor razonable del swap?

un ejemplo típico de contrato de swap entre contrapartidas A y B:

ejemplo de swap

fecha inicio: 1/5/2012
fecha vencimiento: 1/5/2014
nominal: 1 000 000 Eur
periodicidad de pagos: anuales
base de calculo: Actual/360
calendario: TARGET
convención día hábil: Modified Following
A paga: tipo fijo 4%
B paga: Euribor 12m

este contrato se puede representar en el siguiente diagrama de cashflows:

swap cashflows

swap cashflows

 

los Euribors están generalmente fijados al principio del periodo de pago (en nuestro caso están fijados año antes del pago)

para encontrar el valor razonable de este swap hace falta:

Algoritmo de valoracion

  1. calcular/estimar flujo neto en cada fecha de pago
  2. descontar cada flujo a la fecha de valoracion
  3. sumar flujos descontados
pago 1 (1/5/2013)
A paga 4% sobre 1000 000 = 40000 eur
hay que multiplicar esta cantidad por la fracción del  año según base Act/360 = frac(1/5/2012 -> 1/5/2013) = 1.014
asi que finalmente A paga 40000*1.014=40560 eur
B paga euribor 12m fijado el dia 1/5/2012 [  1.321 % ] es decir pago del B sera de 1000000*0.01321*1.014 = 13394 eur
pago1 neto = 40560 – 13394 =  27166 eur
este flujo hay que descontar con la curva de descuento de EUR a fecha de 31/12/2012
suponemos que factor descuento para dia 1/5/2013  es 0.9
asi flujo 1 descontado sera de 27166*0.9 = 24449 eur
pago 2 (1/5/2014)
A paga 4% sobre 1000 000 = 40000 eur
hay que multiplicar esta cantidad por la fracción del año (1.014)
A paga 40000*1.014=40560 eur
B paga euribor 12m fijado el dia 1/5/2013
este pago esta en futuro así que tenemos que estimar este Euribor ( es decir calcular su forward)  a partir de curva de Euribor 12m del dia 31/12/2012
esto se hace según la formula
\( F= \frac{1}{YearFrac(1/5/2013 -> 1/5/2014)}(\frac{ FD(1/5/2013)}{FD(1/5/2014)}-1) \)
la fracción del año aquí se calcula según la base de creación de la curva de descuentos  (supongamos que es la misma act/360)
si FD(1/5/2013)=0.8
y FD(1/5/2014)=0.85
entonces el pago del B sera de 1000000*0.058*1.014 = 58812 eur
pago1 neto = 40560 – 58812 =  -18252 eur
este flujo hay que descontar con la curva de descuento de EUR a fecha de 31/12/2012
suponemos que factor descuento para dia 1/5/2014  es 0.7
asi flujo 1 descontado sera de -18252*0.7 =-12776.4 eur
Asi , valor razonable de este swap el dia 31/12/2012 es de -12776.4 eur
Publicado en valoración derivados Etiquetado con:

como construir la curva de tipos en QuantLib (curva quantlib)

bloomberg o reuters permiten obtener la curva ya bootstrapeada (en factores de descuento)  en formato [fecha] [descuento]
la vamos a usar para construir curva quantlib

la curva de tipos normalmente se usa para obtener factores de descuento a una fecha dada y para proyectar Euribors  .

aquí mostramos snippet del código en quantlib que muestra estos dos usos
curva quantlib

ejemplo de datos de mercado:

fecha valoración: 31/dec/2012

30/12/2013 0.99
30/12/2014 0.98

vamos a calcular factor descuento para la fecha 25 june 2013
y el forward de euribor 6meses para la misma fecha

#include 

using namespace std;
using namespace QuantLib;
using namespace boost;

int main()
{

vector dates; 
vector discountFactor; 

Date valuationDate(31,December,2012);

dates.push_back(valuationDate); discountFactor.push_back(1.0); 

dates.push_back(Date(30,December, 2013));  discountFactor.push_back(0.99); 
dates.push_back(Date(30,December, 2014));  discountFactor.push_back(0.98); 

shared_ptr curve(new InterpolatedDiscountCurve(dates,discountFactor,Actual360())); 

//factor descuento
Date datex(25,June,2013);
double discount=curve->discount(datex);

//euribor forward
Period period(6*Months);
boost::shared_ptr euribor(new Euribor(period));
double forward6m=curve->forwardRate(datex,period,curve->dayCounter(),QuantLib::Compounding::Simple);

}


Publicado en quantlib

que es OAS spread (option adjusted spread)

Option Adjusted spread (OAS spread)
se calcula para bonos que tienen opciones , por ejemplo callable bonds
OAS es el spread constante que hay que aplicar a la curva de descuento para que bono valga el precio de mercado.

ejemplo:
el bono callable de empresa A vale 101$
si OAS spread es 3% significa que si queremos calcular un bono similar de la empresa A , que no tiene opciones tendríamos que descontar los sus flujos con curva descuento con spread 3%

OAS spread podría ser usado como CDS spread sobre empresa A , si A no tiene CDS líquidos.

Publicado en valoración derivados

Ejemplo simple calculo CVA ( ajuste por riesgo de credito)

Ejemplo calculo simple de CVA (Current Net Exposure) – Ajuste Por riesgo de crédito.

Ejemplo Avanzado de código con Python y método Monte-Carlo segun formula Basilea III

Ejemplo de portafolio con dos derivados: Swaps de tipos de interés , con la misma contraparte:

Si sus valores de mercado (NPV) a fecha de valoración son:
swap1: +2M
swap2: -1M

y hay un netting agreement (recuperación en caso de default sera sobre la posición neta, en caso que no hay netting agreeement la exposición seria (1-R)*( swap 1 – swap 2 ) i.e. recuperamos R% de posicion positiva y seguimos debiendo 100% de posición negativa )

Podemos aproximar la exposición al riesgo de credito de contraparte como (1-R)*(2M-1M) = (1-R)*1M $
(R- recovery rate, normalmente se coje 40%)

CVA -Credit Value Adjustment- seria el precio de asegurar mediante un CDS (Credit Default Swap) esta exposición.
Si , por ejempo, CDS spread de contraparte es de 300 pb (3%) entonces
podemos aproximar Ajuste por riesgo de credito como:

CVA=3% * (tiempo hasta vencimiento) * (1-R) *1M $

Si por ejemplo R=40% y los swaps vencen en 2 años una aproximacion al ajuste por riesgo de credito seria
CVA=3% * 2 * 0.6 *1M $ = 36000$

para mejorar esta aproximación podemos cojer la exposición de swaps media hasta vencimiento y calcular precio de cobertura como pata fija de Credit Default Swap [en nuestro caso 3% * annuity (fecha valoración->fecha vencimiento) ]

Ejemplo calculo de ajuste por riesgo de credito en Excel (calculadora online – se puede editar las celdas):

calculo ajuste por riesgo de credito

calculo ajuste por riesgo de credito

Publicado en valoración derivados Etiquetado con: