From d2b133901a65244934eb642ec8e20c797efaf650 Mon Sep 17 00:00:00 2001 From: Bertrand Date: Fri, 19 Feb 2016 15:03:51 +0000 Subject: nettoyage du dépôt MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/option.cpp | 92 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 92 insertions(+) create mode 100644 src/option.cpp (limited to 'src/option.cpp') diff --git a/src/option.cpp b/src/option.cpp new file mode 100644 index 0000000..0e5a56c --- /dev/null +++ b/src/option.cpp @@ -0,0 +1,92 @@ +#include +#include +#include "rqmc.hpp" +#include "p_adic.o" + +double frac_part(double x){ + return x - floor(x); +} + +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 +struct quasi_option : public generator +{ + quasi_option(int n, int d, Fct payoff) : n(n), d(d), payoff(payoff), G(d) {}; + + typename Fct::result_type operator()() { + double sum =0; + for(int i=0; i G; + }; + +int main(){ + init_alea(1); + asian_option A(0.05, 1.0, 50.0, 0.1, 16, 45); + int N= 10000; + + int d =16; + + + std::vector result(3); + result = monte_carlo(100, quasi_option (N, d, A)); + for(int i =0; i<3; i++){ + std::cout< result2(3); + result = monte_carlo(100, quasi_option (N, d, A)); + for(int i =0; i<3; i++){ + std::cout<