aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBertrand <bertrand.horel@gmail.com>2016-02-14 17:59:49 +0000
committerBertrand <bertrand.horel@gmail.com>2016-02-14 17:59:49 +0000
commit69d81d75339bc16725346b452ca6e0dc5da89554 (patch)
tree0fd4e6ee9c1859ef2615b1af2ffb3a9c6d2f3066
parent833fe23df203623c0cf9c540cd9a085792c04869 (diff)
downloadprojet_C++-69d81d75339bc16725346b452ca6e0dc5da89554.tar.gz
début exemple sur options asiatiques
-rw-r--r--Makefile3
-rw-r--r--option.cpp61
2 files changed, 64 insertions, 0 deletions
diff --git a/Makefile b/Makefile
index bb7cdc6..3e093eb 100644
--- a/Makefile
+++ b/Makefile
@@ -17,5 +17,8 @@ test: test.o mt19937.o
rqmc: rqmc.o mt19937.o
$(CXX) $^ -o $@ $(GSL_FLAGS)
+option: option.o mt19937.o
+ $(CXX) $^ -o $@ $(GSL_FLAGS)
+
clean:
-$(RM) -f *.o test stratified_sampling main
diff --git a/option.cpp b/option.cpp
new file mode 100644
index 0000000..5caf23f
--- /dev/null
+++ b/option.cpp
@@ -0,0 +1,61 @@
+#include <vector>
+#include <gsl/gsl_cdf.h>
+#include "var_alea.hpp"
+#include <algorithm>
+#include <iostream>
+
+double r;
+double T;
+double S0;
+double V;
+int d;
+
+std::vector<double> path_gen(std::vector<double> X){
+ d=X.size();
+ std::vector<double> S(d);
+ S[0]= S0;
+ 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]);
+ }
+ return S;
+}
+
+double mean_monte_carl(double r, double T, double S0, double V, int N, int d){
+ double moyenne=0;
+ gaussian G;
+ std::vector<double> S(d);
+ std::vector<double> X(d);
+ for(int i=1; i<N; i++){
+ for(int j=1;j<d;i++){
+ X[i]=G();
+ }
+ S=path_gen(X);
+ moyenne+=std::accumulate(S.begin(), S.end(), 0 );
+ }
+ return moyenne/N;
+}
+
+int main(){
+ init_alea(0);
+ double r=0.05;
+ double T=1.0;
+ double S0=50.0;
+ double V=0.1;
+ int d=16;
+ int N=1000000;
+
+
+ double moyenne = mean_monte_carl(r, T, S0, V, N, d);
+ std::cout<<moyenne<<std::endl;
+
+
+ return 0;
+}
+
+
+
+
+
+
+
+