-
Notifications
You must be signed in to change notification settings - Fork 2
/
TestApproxDD.cpp
81 lines (54 loc) · 2.5 KB
/
TestApproxDD.cpp
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
#include "TestApproxDD.h"
#include "CheyetteModel.h"
#include <iostream>
//creer une instance de CheyetteModel
//avec vol locale piecewiseconst_DD_R2R_Function
//creation d'un swap
void createSwap()
{
double strike = 0.04;
LMM::Index indexStart = 1;
LMM::Index indexEnd = 2;
Tenor floatingLegTenorType = Tenor::_6M;
Tenor fixedLegTenorType = Tenor::_12M; //Tenor::_1YR;
// LMMTenorStructure_PTR simulationStructure(new LMMTenorStructure(Tenor::_6M , 5) ); //OK
// LMMTenorStructure_PTR simulationStructure(new LMMTenorStructure(Tenor::_1YR , 5) ); //PAS OK !!
LMMTenorStructure_PTR simulationStructure(new LMMTenorStructure(Tenor::_6M , 2) ); //OK
VanillaSwap w = VanillaSwap(strike, indexStart, indexEnd, floatingLegTenorType, fixedLegTenorType, simulationStructure);
std::cout << "get_EndDate " << simulationStructure->get_EndDate() << std::endl ;
std::cout << "get_horizon " << simulationStructure->get_horizon() << std::endl ;
std::cout << "get_nbLIBOR " << simulationStructure->get_nbLIBOR() << std::endl ;
std::cout << "get_tenorType " << simulationStructure->get_tenorType() << std::endl ;
}
VanillaSwaption createSwaption()
{
double strike = 0.04;
LMM::Index indexStart = 16;
LMM::Index indexEnd = 28;
Tenor floatingLegTenorType = Tenor::_6M;
Tenor fixedLegTenorType = Tenor::_1YR;
LMMTenorStructure_PTR simulationStructure(new LMMTenorStructure(Tenor::_6M , 15) );
VanillaSwap w = VanillaSwap(strike, indexStart, indexEnd, floatingLegTenorType, fixedLegTenorType, simulationStructure);
VanillaSwaption x = VanillaSwaption(w, OptionType::OptionType::CALL);
return (x) ;
}
void TestApprox()
{
piecewiseconst_RR_Function chi0 ;
piecewiseconst_DD_R2R_Function sigma0 ;
double x0(0), y0(0) ;
CheyetteModel::Cheyette_Parameter CheyetteParam = initStruct(chi0, sigma0) ;
courbeInput_PTR courbe_PTR( new courbeInput() ) ;
Cheyette_PTR Cheyette_Model_Test_PTR( new CheyetteModel(courbe_PTR, CheyetteParam, x0, y0) );
double t = 0 ;// date valo
double y_bar = 0.2 ; /// .................................
double ExpansionPoint_s = 2 ; // ............................
VanillaSwaption s = createSwaption() ;
boost::shared_ptr<VanillaSwaption> swaption_PTR( new VanillaSwaption() );
CheyetteVanillaSwaptionApproxPricer_Piterbarg DD_approx =
CheyetteVanillaSwaptionApproxPricer_Piterbarg(Cheyette_Model_Test_PTR,
swaption_PTR,
t,
y_bar,
ExpansionPoint_s);
}