aboutsummaryrefslogtreecommitdiffstats
path: root/option.cpp
diff options
context:
space:
mode:
authorBertrand <bertrand.horel@gmail.com>2016-02-19 15:03:51 +0000
committerBertrand <bertrand.horel@gmail.com>2016-02-19 15:03:51 +0000
commitd2b133901a65244934eb642ec8e20c797efaf650 (patch)
treef8d186f8e8ca0886f8f0a464261ba8747242b4e6 /option.cpp
parent355e4567e68a76356714e2e58a42dcd78533cf6c (diff)
downloadprojet_C++-d2b133901a65244934eb642ec8e20c797efaf650.tar.gz
nettoyage du dépôt
Diffstat (limited to 'option.cpp')
-rw-r--r--option.cpp92
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;
-}
-
-
-
-
-
-
-
-