curso c++ finanzas [parte 2] – opcion Call via integracion

C++ finanzas curso – parte 2 – Black-Scholes a través de la integración numérica

objetivo

cálculo de opción de compra (Call) de Black-Scholes con c++

C++ y QuantLib tienen muchos tipos de variables. En las finanzas cuantitativas los tipos más útiles son:

double – para almacenar números reales
int – para almacenar números enteros
QuantLib :: Date – para almacenar fechas
QuantLib :: Array – guardar array de doubles
QuantLib :: Matrix – para almacenar la matriz 2D de doubles

vamos a empezar haciendo con integración numérica

borrar todos los contenidos del fichero source.cpp copiar y pegar el código siguiente

ejemplo – la integración numérica Call

este código calculará integral
$$ \int_ {0} ^ {1} e^x dx $$

#include  
#include  //for using math functions

//everything after // is a comment

double f(double x) //declaration of function f(x)=exp(x)
{
return std::exp(x);
}

void main() 
{
	
	double dt=0.0001; //integration step
	double sum=0; //current value of integral
	for(double t=0;t<1.0;t+=dt) //for loop    t+=dt means t=t+dt
	{
	sum+=f(t)*dt; // its equivalent to write sum=sum+f(t)*dt;
	}
std::cout<<"integral "<< sum; //output

int dummy;std::cin>>dummy;//screen delay
}

leer acerca de las estructuras de control de bucle y otra aquí: http://www.cplusplus.com/doc/tutorial/control/

Notas importantes:
utilizar 1.0 en vez de 1
en c + + 1.0 y 1 son diferentes números 1.0 es el número real y 1 es el número entero
que significa que 1/2 = 0. mientras que 1.0/2 es 0.5

al hacer comparaciones de dobles no lo uses si (x == 0)
utilizar si (std :: abs (x) <epsilon) donde épsilon es su precisión (por ejemplo 10 ^ -8)

la variable t es «visible» sólo dentro loop
Consulte «Variables scope» aquí http://www.cplusplus.com/doc/tutorial/variables/

Aquí hemos utilizado la forma más simple de integración numérica
para un integratoin rápido / más precisa puede utilizar otros métodos
muchos de ellos se describen en el libro gratis «recetas numéricas en c»
este libro es para C, pero la estructura del código sería el mismo

ejemplo

– opción Call en Black Scholes usando integración

Ahora vamos a cambiar el programa anterior para calcular opción Call en modelo Black-Scholes con tasas de interés cero

dinámica neutral al riesgo:
$$ dS_t = S_t \sigma dWt $$
así
$$ S_T S_0 = exp (-0.5 \sigma^2 + \sigma \sqrt x T) $$
donde x es un estándar gaussiano
por lo que el precio de la opción llamada será
$$ Call = \int_{-\infty}^{+\infty} (S_0 e ^ {-0,5 \sigma ^ 2 + \sigma \sqrt T x} – K) ^ + \phi (x) dx $$
donde $$ \phi(x) = \frac {1} {\sqrt {2 \pi}} exp (-0.5 x ^ 2) $$ densidad gaussiana estándar
S0 = 100
volatilidad = 20%
vencimiento = T = 1 año

#include 
#include 
#include 

double density(double x) //normal density 
{
	const double pi = boost::math::constants::pi();
	return 1.0/sqrt(2.0*pi)*std::exp(-0.5*x*x);
}

double pp(double x) //positive part   x+   
{
if(x>0) return x;
return 0;
}

double f(double K,double S0,double T,double sigma,double x) //function to integrate  
{
return pp(S0*std::exp(-0.5*sigma*sigma*T+sigma*std::sqrt(T)*x)-K)*density(x);  
}

void main()
{
	double S0=100.0;
	double sigma=0.2;
	double T=1.0;
	double K=80.0;
	double dx=0.0001;
	double sum=0;

	for(double x=-10.0;x<10.0;x+=dx)
	{
	sum+=f(K,S0,T,sigma,x)*dx;
	}
std::cout<<"call= "<< sum;

int dummy;std::cin>>dummy;
}

Notas:

tenemos que pasar argumentos de nuevo a la función integrada debido a que su alcance original está dentro main () , por lo que las variables K, S0 etc no son visibles en el interior función f (x)
usamos impulsar aquí para extraer constante Pi, por lo que será más fácil de portar a programas linux por ejemplo (estándar de C++ no tiene constantes matemáticas)

ejercicios

– Debugear primer programa mediante el establecimiento de puntos de interrupción y ver las variables de suma y t valor del cambio
– Cambiar el primer programa para integrar a través de regla trapezoidal , compruebe los resultados con respuesta conocida $$ e^1-1 $$
– Cambie segundo programa para incluir los tipos de interés no cero
– Cambie segundo programa para calcular el precio puesto
– Verificar llama poner la paridad

algunos trucos

si tienes un error siempre comienza corrigiendo primer error de compilación (doble clic en la línea de error de compilación)
algunos mensajes de error de + c + son bastante crípticos y son el resultado de errores anteriores

por ejemplo, eliminar el «;» después sentencia return
pulse F7 para compilar
Ahora haga doble clic en el primer error:

black scholes c++

black scholes c++

Publicado en curso c++ finanzas