#include #include #include "rqmc.hpp" double pos (double x){ return x>0?x:0; } struct asian_option : public std::unary_function, double> { asian_option(double r, double T, double S0, double V, int d, double K) : r(r), T(T), S0(S0), V(V), d(d), K(K) {}; double operator()(std::vector X) const { std::vector S(d); S[0]= S0*exp((r-V*V/2)*(T/d)+V*sqrt(T/d)*X[0]); for(int i=1;i { asian_option_qmc(double r, double T, double S0, double V, int d, double K) : r(r), T(T), S0(S0), V(V), d(d), K(K), G(d), U(0,1), seed(d) { for(int i=0; i S(d); std::vector sob(d); sob = G(); S[0]= S0*exp((r-V*V/2)*(T/d)+V*sqrt(T/d)*gsl_cdf_gaussian_Pinv(frac_part(seed[0]+sob[0]), 1)); for(int i=1;i seed; }; int main(){ init_alea(1); asian_option A(0.05, 1.0, 50.0, 0.1, 16, 45); //~ int M= 1000000; int N= 10000; //~ int I= 100; //~ std::vector meanvar = monte_carlo(M, A); //~ std::cout<<"espérance "< temp; //~ double m = 0; //~ double s = 0; //~ for(int i=0;i test(d,1); std::cout< r = monte_carlo(N, A, G); for(int i=0; i<3; i++){ std::cout<