-
Notifications
You must be signed in to change notification settings - Fork 0
/
plan
87 lines (70 loc) · 1.69 KB
/
plan
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
/*
A little plan about a possible organization of classes
*/
enum Model {
Black_Scholes;
Kou;
Merton;
};
class Parameters<dim>{
private:
double K;
std::vector<double> S0;
std::vector<double> Sigma;
double T;
double r;
double rho;
Model model;
// Kou
std::vector<double> p;
std::vector<double> lambda;
std::vector<double> lambda_piu;
std::vector<double> lamnda_meno;
// Merton
std::vector<double> C;
std::vector<double> mu;
std::vector<double> delta;
public:
Parameters<dim>(std::vector<double> S0, double K, double r,
std::vector<double> Sigma, double rho, double T){
...
model=Black_Scholes;
}
Parameters<dim>(... // Kou parameters
){
model=Kou;
}
Parameters<dim>(... // Merton parameters
){
model=Merton;
}
// stessi costruttori specializzati in 1d, con i double
...
// calibrazione, costruttori e operatori di copia
};
class Option<dim>{
...
}
class EuropeanOption<dim>: public Option<dim>{
public:
EuropeanOption(Parameters<dim> &, Model &);
compute_call_price();
compute_put_price(); // put call parity per B&S?
};
class AmericanOption<dim>: public Option<dim>{
public:
AmericanOption(Parameters<dim> &, Model &);
compute_put_price();
};
// quante sono le barriera??
class Barrier<dim>: public Option<dim>{
public: // in più dimensioni, le barriere per ogni dimensione
Barrier(Parameters<dim> &, bool IN, std::vector<double> & const D, std::vector<double> & const U, Model &);
Barrier(Parameters<1> &, double D, double U, Model &);
// poi basta prendere
// Smin[i]=max(D[i], Smin[i]);
// Smax[i]=min(U[i], Smax[i]);
};
class Asian: public Option<2> {
// qui si riscrivono tutte le funzioni di Option perché è tutto diverso
}