#13 Llevabas razón totalmente, lo mire ayer y al final es como tu decias.
Las variables estan en ingles porque el manual que estamos siguiendo esta en ingles pero me parece correcto lo que han comentado sobre que es mejor hacerlo en ingles para poder difundirlo mejor y trabajar con gente de fuera. ( Aunque definitivamente de momento no es mi caso) xD
Siguiendo con el ejercicio me esta saltando un error que no entiendo. He creado un header para hacer la función normal que necesito en la formula y he incluido la formula en el cpp para usarla en el int main() pero no sé por qué me salta un error diciendo que no se han incluido los datos necesarios en la función. Os dejo el código a ver si alguien ve el error
Primero el del header:
#include <cmath>
double normcdf(double x, double mu = 0.0, double sigma = 1.0) {
double b1 = 0.319381530, b2 = -0.356563782,
b3 = 1.781477937, b4 = -1.821255978,
b5 = 1.330274429, p = 0.2316419 ,
c = 0.3989422804; //c = 1/sqrt(2*pi) con pi = 3.14159...
x = (x-mu)/sigma;
if(x >= 0.0) {
double t = 1.0 / ( 1.0 + p * x );
return (1.0 - c * exp( -x * x / 2.0 ) * t *
( t *( t * ( t * ( t * b5 + b4 ) + b3 ) + b2 ) + b1 ));
}
else {
double t = 1.0 / ( 1.0 - p * x );
return ( c * exp( -x * x / 2.0 ) * t *
( t *( t * ( t * ( t * b5 + b4 ) + b3 ) + b2 ) + b1 ));
}
}
Segundo el del CPP:
#include <iostream>
#include <cmath>
#include "normal.h"
bool iscorrectinput(double k)
{
bool correct = k > 0;
if(!correct){
std::cout << "The introduced value is incorrect. Please, introduce a positive Strike Price:";
}
return correct;
}
double eblsprice(char type, double sprice, double k, double T, double r, double v){
double d1, d2;
d1 = (log(sprice/k)+(r+v*v/2)*T)/(v*sqrt(T));
d2 = d1-v*sqrt(T);
if(type == 'c') // Option CALL
return sprice * normcdf(d1) - k * exp(-r*T) * normcdf(d2);
else if(type == 'p') // Option PUT
return k * exp(-r * T) * normcdf(-d2) - sprice * normcdf(-d1);
else
return 0;
}
int main()
{
std::cout << "Please enter a Strike Price: ";
double k;
do{
std::cin >> k;
} while(!iscorrectinput(k));
std::cout << "Please enter a risk-free rate: ";
double r;
std::cin >> r;
std::cout << "Please enter a volatily: ";
double v;
std::cin >> v;
std::cout << "Please enter time to maturity: ";
double T;
std::cin >> T;
std::cout << "Please enter a type: ";
char type;
std::cin >> type;
std::cout << "Please enter underlyig price: ";
double sprice;
std::cin >> sprice;
std::cout << "The price for the option is equal to "<< eblsprice();
system("pause");
return 0;
}
Si los variables las voy rellenando según saltan los cout y cin no entiendo porque me salta el error de que la funcioón no acepta 0 argumentos.
Muchas gracias por las respuestas.