diff options
Diffstat (limited to 'option.cpp')
| -rw-r--r-- | option.cpp | 92 |
1 files changed, 0 insertions, 92 deletions
diff --git a/option.cpp b/option.cpp deleted file mode 100644 index 0e5a56c..0000000 --- a/option.cpp +++ /dev/null @@ -1,92 +0,0 @@ -#include <algorithm> -#include <iostream> -#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<std::vector<double>, 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<double> X) const { - std::vector<double> S(d); - S[0]= S0*exp((r-V*V/2)*(T/d)+V*sqrt(T/d)*X[0]); - for(int i=1;i<d;i++){ - S[i]=S[i-1]*exp((r-V*V/2)*(T/d)+V*sqrt(T/d)*X[i]); - } - double temp = std::accumulate(S.begin(), S.end(), 0.)/d; - return exp(-r*T)*pos(temp-K); - }; - - private: - double r; - double T; - double S0; - double V; - int d; - double K; - }; - - - - -template <typename Fct, typename LDS> -struct quasi_option : public generator<typename Fct::result_type> -{ - 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<n; i++){ - sum += payoff(G()); - - } - return sum/n; - }; - - private: - int n, d; - Fct payoff; - quasi_gaussian<LDS> 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<double> result(3); - result = monte_carlo(100, quasi_option<asian_option, sobol> (N, d, A)); - for(int i =0; i<3; i++){ - std::cout<<result[i]<<std::endl; - } - - std::vector<double> result2(3); - result = monte_carlo(100, quasi_option<asian_option, halton> (N, d, A)); - for(int i =0; i<3; i++){ - std::cout<<result[i]<<std::endl; - } - - - - return 0; -} - - - - - - - - |
