-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathSliceMultiplicative.h
77 lines (54 loc) · 2.4 KB
/
SliceMultiplicative.h
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
//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
// SliceMultiplicative.h
//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
#ifndef SliceMultiplicativeH
#define SliceMultiplicativeH
//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
#include <vector>
#include "SliceBase.h"
#include "payoff.h"
class PseudoFactory;
class BranchesBase;
//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
// Slice
//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
class SliceMultiplicative : public SliceBase
{
public:
explicit SliceMultiplicative(PseudoFactory & );
~SliceMultiplicative();
void SetValues();
void SetBranches(const BranchesBase & ptb);
void roll_back(long j); // rolls back option values (European)
void Early_update(long j); // updates for early exercise
void roll_over(long j); // rolls over to the next time
double GetOValue() const ;
private:
PayOff * opt_; // Does not own
const BranchesBase * prb_; // Does not own
std::vector<double> * this_value_; // pointers so can swap cheaply
std::vector<double> * next_value_;
std::vector<double> S_values_;
std::vector<double> payoffs_;
long N_; // time steps
double S_0_;
double r_;
double T;
double sig;
double dis_dt_; // discount factor over time dt
double scale_s_; // scaling factor for S-rollback
long upbranches_; // # of up-branches
long adj_; // adjustment to go from logical to physical indexes
double current_t_; // current value of time
double dt_; // time step
double drift;
void roll_back_S(long j);
void Bermudan_update(long j);
void ComputeSvalues(long Vsize);
void ComputePayoffValues(long Vsize);
};
//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
#endif
//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
// end of file
//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX