Skip to content

Commit 2e7513a

Browse files
author
sebastien.bouvard
committed
QPR-11556 Add constructor to dynamicoptionlet for proxyConfig
1 parent 980ebc7 commit 2e7513a

3 files changed

Lines changed: 26 additions & 5 deletions

File tree

OREAnalytics/orea/scenario/scenariosimmarket.cpp

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -947,8 +947,8 @@ ScenarioSimMarket::ScenarioSimMarket(
947947
DLOG("Dynamic (" << wrapper->volatilityType() << ") yield vols (" << decayModeString
948948
<< ") for qualifier " << name);
949949

950-
QL_REQUIRE(!QuantLib::ext::dynamic_pointer_cast<ProxySwaptionVolatility>(*wrapper),
951-
"DynamicSwaptionVolatilityMatrix does not support ProxySwaptionVolatility surface");
950+
// QL_REQUIRE(!QuantLib::ext::dynamic_pointer_cast<ProxySwaptionVolatility>(*wrapper),
951+
// "DynamicSwaptionVolatilityMatrix does not support ProxySwaptionVolatility surface");
952952

953953
QuantLib::ext::shared_ptr<SwaptionVolatilityStructure> atmSlice;
954954
if (isAtm)
@@ -1207,9 +1207,14 @@ ScenarioSimMarket::ScenarioSimMarket(
12071207
string decayModeString = parameters->capFloorVolDecayMode();
12081208
ReactionToTimeDecay decayMode = parseDecayMode(decayModeString);
12091209

1210-
QuantLib::ext::shared_ptr<OptionletVolatilityStructure> capletVol =
1211-
QuantLib::ext::make_shared<DynamicOptionletVolatilityStructure>(*wrapper, 0, NullCalendar(),
1212-
decayMode);
1210+
auto proxyVolConfig = QuantLib::ext::dynamic_pointer_cast<ProxyOptionletVolatility>(*wrapper);
1211+
QuantLib::ext::shared_ptr<OptionletVolatilityStructure> capletVol = nullptr;
1212+
if(proxyVolConfig){
1213+
capletVol = QuantLib::ext::make_shared<DynamicOptionletVolatilityStructure>(*wrapper, NullCalendar(), decayMode);
1214+
}else{
1215+
capletVol = QuantLib::ext::make_shared<DynamicOptionletVolatilityStructure>(*wrapper, 0, NullCalendar(), decayMode);
1216+
}
1217+
12131218
hCapletVol = Handle<OptionletVolatilityStructure>(capletVol);
12141219
}
12151220
hCapletVol->setAdjustReferenceDate(false);

QuantExt/qle/termstructures/dynamicoptionletvolatilitystructure.cpp

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,17 @@ namespace QuantExt {
2222
DynamicOptionletVolatilityStructure::DynamicOptionletVolatilityStructure(
2323
const QuantLib::ext::shared_ptr<OptionletVolatilityStructure>& source, Natural settlementDays, const Calendar& calendar,
2424
ReactionToTimeDecay decayMode)
25+
: OptionletVolatilityStructure(settlementDays, calendar, source->businessDayConvention(), source->dayCounter()),
26+
source_(source), decayMode_(decayMode), originalReferenceDate_(source->referenceDate()),
27+
volatilityType_(source->volatilityType()), displacement_(source->displacement()) {
28+
QL_REQUIRE(decayMode_ != ForwardForwardVariance,
29+
"ForwardVariance not yet supported for DynamicOptionletVolatilityStructure");
30+
enableExtrapolation(source->allowsExtrapolation());
31+
}
32+
33+
DynamicOptionletVolatilityStructure::DynamicOptionletVolatilityStructure(
34+
const QuantLib::ext::shared_ptr<OptionletVolatilityStructure>& source, const Calendar& calendar,
35+
ReactionToTimeDecay decayMode)
2536
: OptionletVolatilityStructure(source->referenceDate(), calendar, source->businessDayConvention(), source->dayCounter()),
2637
source_(source), decayMode_(decayMode), originalReferenceDate_(source->referenceDate()),
2738
volatilityType_(source->volatilityType()), displacement_(source->displacement()) {

QuantExt/qle/termstructures/dynamicoptionletvolatilitystructure.hpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,9 +42,14 @@ using namespace QuantLib;
4242

4343
class DynamicOptionletVolatilityStructure : public OptionletVolatilityStructure {
4444
public:
45+
//Constructor with the reference date based on the global evaluation date
4546
DynamicOptionletVolatilityStructure(const QuantLib::ext::shared_ptr<OptionletVolatilityStructure>& source,
4647
Natural settlementDays, const Calendar& calendar,
4748
ReactionToTimeDecay decayMode = ConstantVariance);
49+
// Constructor to initialize with a fixed reference date
50+
DynamicOptionletVolatilityStructure(const QuantLib::ext::shared_ptr<OptionletVolatilityStructure>& source,
51+
const Calendar& calendar,
52+
ReactionToTimeDecay decayMode = ConstantVariance);
4853

4954
QuantLib::ext::shared_ptr<OptionletVolatilityStructure> getSource() { return source_; }
5055

0 commit comments

Comments
 (0)