#include #include #include "var_alea.hpp" #include #include typedef struct option_param { double r; double T; double S0; double V; int d; double K; }option_param; std::vector path_gen(std::vector X, option_param *p){ std::vector S(p->d); S[0]= p->S0*exp((p->r-p->V*p->V/2)*(p->T/p->d)+p->V*sqrt(p->T/p->d)*X[0]); for(int i=1;id;i++){ S[i]=S[i-1]*exp((p->r-p->V*p->V/2)*(p->T/p->d)+p->V*sqrt(p->T/p->d)*X[i]); } return S; } double pos (double x){ return x>0?x:0; } double pay_off (double mean, option_param* p){ return exp(-p->r*p->T)*pos(mean-p->K); } std::pair monte_carl(option_param* p, int N){ double moyenne=0; double variance=0; gaussian G(0,1); double temp=0; std::vector S(p->d); std::vector X(p->d); for(int i=0; id;j++){ X[j]=G(); } S=path_gen(X, p); temp = pay_off(std::accumulate(S.begin(), S.end(), 0.)/p->d, p); moyenne+=temp; variance+=temp*temp; } return {moyenne/N, variance/N-(moyenne/N)*(moyenne/N)}; } int main(){ init_alea(1); option_param p = {.r=0.05, .T=1.0, .S0=50.0, .V=0.1, .d=16, .K=45}; int N=1000000; std::pair meanvar = monte_carl(&p, N); std::cout<<"espérance "<