Loading...
Home / Calibration Problem

Home Forums Help Calibration Problem

Tagged: 

Viewing 4 posts - 1 through 4 (of 4 total)
  • Author
    Posts
  • #6156
    rkapl
    Participant

    Dear All!

    I’ve got following Problem with calibrating volatilities using swaptions:
    ……….
    NOTICE [2017-Jun-28 17:01:28.962759] (…assetmodelbuilder.cpp:68) : Start building CrossAssetModel, configurations: LgmCalibration libor, FxCalibration libor, EqCalibration libor, FinalModel libor
    NOTICE [2017-Jun-28 17:01:28.963736] (…assetmodelbuilder.cpp:96) : IR Parametrization 0 ccy EUR
    NOTICE [2017-Jun-28 17:01:28.965689] (…\model\lgmbuilder.cpp:51) : LgmCalibration for ccy EUR, configuration is libor
    NOTICE [2017-Jun-28 17:01:28.981315] (…model\lgmbuilder.cpp:282) : Added Period / Period based SwaptionHelper EUR 1Y, 19Y, ATM : 0.561400 Normal
    NOTICE [2017-Jun-28 17:01:28.993034] (…model\lgmbuilder.cpp:282) : Added Period / Period based SwaptionHelper EUR 2Y, 18Y, ATM : 0.585400 Normal
    NOTICE [2017-Jun-28 17:01:28.994987] (…model\lgmbuilder.cpp:282) : Added Period / Period based SwaptionHelper EUR 4Y, 16Y, ATM : 0.607000 Normal
    NOTICE [2017-Jun-28 17:01:28.995964] (…model\lgmbuilder.cpp:282) : Added Period / Period based SwaptionHelper EUR 6Y, 14Y, ATM : 0.621403 Normal
    NOTICE [2017-Jun-28 17:01:28.997917] (…model\lgmbuilder.cpp:282) : Added Period / Period based SwaptionHelper EUR 8Y, 12Y, ATM : 0.635472 Normal
    NOTICE [2017-Jun-28 17:01:28.999870] (…model\lgmbuilder.cpp:282) : Added Period / Period based SwaptionHelper EUR 10Y, 10Y, ATM : 0.650000 Normal
    NOTICE [2017-Jun-28 17:01:29.002800] (…model\lgmbuilder.cpp:282) : Added Period / Period based SwaptionHelper EUR 12Y, 8Y, ATM : 0.638576 Normal
    NOTICE [2017-Jun-28 17:01:29.002800] (…model\lgmbuilder.cpp:282) : Added Period / Period based SwaptionHelper EUR 14Y, 6Y, ATM : 0.626262 Normal
    NOTICE [2017-Jun-28 17:01:29.004753] (…model\lgmbuilder.cpp:282) : Added Period / Period based SwaptionHelper EUR 16Y, 4Y, ATM : 0.607020 Normal
    NOTICE [2017-Jun-28 17:01:29.005730] (…model\lgmbuilder.cpp:282) : Added Period / Period based SwaptionHelper EUR 18Y, 2Y, ATM : 0.580836 Normal
    NOTICE [2017-Jun-28 17:01:29.006706] (…model\lgmbuilder.cpp:282) : Added Period / Period based SwaptionHelper EUR 19Y, 1Y, ATM : 0.571205 Normal
    NOTICE [2017-Jun-28 17:01:29.007683] (…\model\lgmbuilder.cpp:74) : overriding alpha time grid with swaption expiries
    NOTICE [2017-Jun-28 17:01:29.008659] (…model\lgmbuilder.cpp:101) : before calibration: alpha times = [ 1.000000; 2.000000; 4.008219; 6.002740; 8.005479; 10.010959; 12.008219; 14.008219; 16.013699; 18.010959 ] values = [ 0.010000; 0.010000; 0.010000; 0.010000; 0.010000; 0.010000; 0.010000; 0.010000; 0.010000; 0.010000; 0.010000 ]
    NOTICE [2017-Jun-28 17:01:29.009636] (…model\lgmbuilder.cpp:102) : before calibration: h times = [ ] values = [ 0.030000 ]
    NOTICE [2017-Jun-28 17:01:29.010613] (…model\lgmbuilder.cpp:110) : IR parametrization for EUR: IrLgm1fPiecewiseConstant
    NOTICE [2017-Jun-28 17:01:29.013542] (…model\lgmbuilder.cpp:118) : alpha times size: 10
    NOTICE [2017-Jun-28 17:01:29.013542] (…model\lgmbuilder.cpp:119) : lambda times size: 0
    DEBUG [2017-Jun-28 17:01:29.016472] (…model\lgmbuilder.cpp:138) : Recalibrate LGM model for currency EUR
    NOTICE [2017-Jun-28 17:01:29.018425] (…model\lgmbuilder.cpp:282) : Added Period / Period based SwaptionHelper EUR 1Y, 19Y, ATM : 0.561400 Normal
    NOTICE [2017-Jun-28 17:01:29.020379] (…model\lgmbuilder.cpp:282) : Added Period / Period based SwaptionHelper EUR 2Y, 18Y, ATM : 0.585400 Normal
    NOTICE [2017-Jun-28 17:01:29.022332] (…model\lgmbuilder.cpp:282) : Added Period / Period based SwaptionHelper EUR 4Y, 16Y, ATM : 0.607000 Normal
    NOTICE [2017-Jun-28 17:01:29.023308] (…model\lgmbuilder.cpp:282) : Added Period / Period based SwaptionHelper EUR 6Y, 14Y, ATM : 0.621403 Normal
    NOTICE [2017-Jun-28 17:01:29.025262] (…model\lgmbuilder.cpp:282) : Added Period / Period based SwaptionHelper EUR 8Y, 12Y, ATM : 0.635472 Normal
    NOTICE [2017-Jun-28 17:01:29.027215] (…model\lgmbuilder.cpp:282) : Added Period / Period based SwaptionHelper EUR 10Y, 10Y, ATM : 0.650000 Normal
    NOTICE [2017-Jun-28 17:01:29.028191] (…model\lgmbuilder.cpp:282) : Added Period / Period based SwaptionHelper EUR 12Y, 8Y, ATM : 0.638576 Normal
    NOTICE [2017-Jun-28 17:01:29.030145] (…model\lgmbuilder.cpp:282) : Added Period / Period based SwaptionHelper EUR 14Y, 6Y, ATM : 0.626262 Normal
    NOTICE [2017-Jun-28 17:01:29.031121] (…model\lgmbuilder.cpp:282) : Added Period / Period based SwaptionHelper EUR 16Y, 4Y, ATM : 0.607020 Normal
    NOTICE [2017-Jun-28 17:01:29.032098] (…model\lgmbuilder.cpp:282) : Added Period / Period based SwaptionHelper EUR 18Y, 2Y, ATM : 0.580836 Normal
    NOTICE [2017-Jun-28 17:01:29.034051] (…model\lgmbuilder.cpp:282) : Added Period / Period based SwaptionHelper EUR 19Y, 1Y, ATM : 0.571205 Normal
    NOTICE [2017-Jun-28 17:01:29.035028] (…model\lgmbuilder.cpp:164) : call calibrateGlobal
    ALERT [2017-Jun-28 17:01:29.129758] (orea\app\oreapp.cpp:166) : Error: less functions (11) than available variables (12)
    NOTICE [2017-Jun-28 17:01:29.136594] (orea\app\oreapp.cpp:173) : ORE done.

    The CrossAssetModel in my Simulation.xml looks like this:
    `
    <CrossAssetModel>
    <DomesticCcy>EUR</DomesticCcy>
    <Currencies>
    <Currency>EUR</Currency>
    <Currency>USD</Currency>
    <Currency>CHF</Currency>
    <Currency>JPY</Currency>
    <Currency>GBP</Currency>
    <Currency>CAD</Currency>
    </Currencies>
    <BootstrapTolerance>0.0001</BootstrapTolerance>
    <InterestRateModels>
    <LGM ccy=”default”>
    <CalibrationType>Bootstrap</CalibrationType>
    <Volatility>
    <Calibrate>Y</Calibrate>
    <VolatilityType>Hagan</VolatilityType>
    <ParamType>Piecewise</ParamType>
    <TimeGrid>1.0, 2.0, 3.0, 4.0, 5.0, 7.0, 10.0</TimeGrid>
    <InitialValue>0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01</InitialValue>
    </Volatility>
    <Reversion>
    <Calibrate>Y</Calibrate>
    <ReversionType>HullWhite</ReversionType>
    <ParamType>Constant</ParamType>
    <TimeGrid/>
    <InitialValue>0.03</InitialValue>
    </Reversion>
    <CalibrationSwaptions>
    <Expiries> 1Y, 2Y, 4Y, 6Y, 8Y, 10Y, 12Y, 14Y, 16Y, 18Y, 19Y</Expiries>
    <Terms> 19Y, 18Y, 16Y, 14Y, 12Y, 10Y, 8Y, 6Y, 4Y, 2Y, 1Y</Terms>
    <Strikes/>
    </CalibrationSwaptions>
    <ParameterTransformation>
    <ShiftHorizon>0.0</ShiftHorizon>
    <Scaling>1.0</Scaling>
    </ParameterTransformation>
    </LGM>
    </InterestRateModels>
    <ForeignExchangeModels>
    <CrossCcyLGM foreignCcy=”default”>
    <DomesticCcy>EUR</DomesticCcy>
    <CalibrationType>Bootstrap</CalibrationType>
    <Sigma>
    <Calibrate>Y</Calibrate>
    <ParamType>Piecewise</ParamType>
    <TimeGrid>1.0, 2.0, 3.0, 4.0, 5.0, 7.0, 10.0</TimeGrid>
    <InitialValue>0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1</InitialValue>
    </Sigma>
    <CalibrationOptions>
    <Expiries>1Y, 2Y, 3Y, 4Y, 5Y, 10Y</Expiries>
    <Strikes/>
    </CalibrationOptions>
    </CrossCcyLGM>
    </ForeignExchangeModels>
    <InstantaneousCorrelations>
    <!– if not given, default correlation = 0 –>
    <Correlation factor1=”IR:EUR” factor2=”IR:USD”>0.3</Correlation>
    <Correlation factor1=”IR:EUR” factor2=”IR:GBP”>0.3</Correlation>
    <Correlation factor1=”IR:EUR” factor2=”IR:CHF”>0.3</Correlation>
    <Correlation factor1=”IR:EUR” factor2=”IR:CAD”>0.3</Correlation>
    <Correlation factor1=”IR:EUR” factor2=”IR:JPY”>0.3</Correlation>
    <Correlation factor1=”IR:USD” factor2=”IR:GBP”>0.3</Correlation>
    <Correlation factor1=”IR:USD” factor2=”IR:CHF”>0.3</Correlation>
    <Correlation factor1=”IR:USD” factor2=”IR:CAD”>0.3</Correlation>
    <Correlation factor1=”IR:USD” factor2=”IR:JPY”>0.3</Correlation>
    <Correlation factor1=”IR:GBP” factor2=”IR:CHF”>0.3</Correlation>
    <Correlation factor1=”IR:GBP” factor2=”IR:CAD”>0.3</Correlation>
    <Correlation factor1=”IR:GBP” factor2=”IR:JPY”>0.3</Correlation>
    <Correlation factor1=”IR:CHF” factor2=”IR:CAD”>0.3</Correlation>
    <Correlation factor1=”IR:CHF” factor2=”IR:JPY”>0.3</Correlation>
    <Correlation factor1=”IR:JPY” factor2=”IR:CAD”>0.3</Correlation>
    <Correlation factor1=”IR:EUR” factor2=”FX:USDEUR”>0</Correlation>
    <Correlation factor1=”FX:USDEUR” factor2=”FX:GBPEUR”>0</Correlation>
    </InstantaneousCorrelations>
    </CrossAssetModel>

    I’ve no Idea how to change that to have 12 (or maybe more) functions, btw. what is a “function” in that context?

    -regards,
    Roland

    #6158
    Anonymous
    Inactive

    Hi Roland,

    This is the LGM calibration, it looks like you are trying to calibrate both the model sigma and the mean reversion from a set of co-terminal swaptions, is that right? then you don’t have enough information to fully calibrate.

    The functions in this context are the bootstrap helpers, which comes from the 11 swaptions that have been specified (by expiry and tenor).
    The 12 available variables are the model variables (11 expiries and 1 mean reversion) or degrees of freedom if you prefer.

    Regards,
    Niall.

    #6159
    Roland Lichters
    Keymaster

    Hi Roland,

    if you want to calibrate the mean reversion parameter as well, then you have got two ways out here:

    1) Continue with CalibrationType “Bootstrap” and add another calibration swaption; it has to reuse the expiry of one of the existing calibration swaptions and have a different term. Like this:
    before
    expiries: 1Y, 2Y, 3Y, 5Y, 7Y, 10Y
    terms: 5Y, 5Y, 5Y, 5Y, 7Y, 10Y
    after
    expiries: 1Y, 2Y, 3Y, 5Y, 7Y, 10Y, 5Y
    terms: 5Y, 5Y, 5Y, 5Y, 7Y, 10Y, 10Y

    With CalibrationType “Bootstrap” the LGM builder will overwrite the time grid for the volatility parameter with the distinct swaption expiries. So the second choice there does not increase the number of volatility parameters, but adds the extra calibration instrument you need.

    2) Switch to CalibrationType “BestFit”
    In that case the time grid for the volatility parameter is not overwritten, but the LGM builder uses whats given in the TimeGrid tag.
    If that lists less grid points than there are calibration swaptions, then you are fine and BestFit will do a global optimisation.

    I hope that helps, and I am curious how you get on with these options. Technically this should work (I just double checked), and that’s what I have seen users do.

    An alternative (and my preference) would be not to calibrate the mean reversion parameter to European Swaptions, but to keep it fixed here. I’d rather try to find a reversion level that is consistent with market Bermudan Swaption prices if you have visibility of those (set reversion speed manually, calibrate to your co-terminal European Swaptions, price associated Bermudan Swaption on that calibrated model, compare with market prices if available, change reversion level and try again etc.). We do not have such an optimiser in ORE (yet).

    Regards,
    Roland

    #6160
    rkapl
    Participant

    Dear Roland!

    Many thanks for the Explanation, I could get the calibration (without Reversion) to work now, I’ll discuss with my colleagues the Options of calibrating the Reversion next.

    -regards,
    Roland

Viewing 4 posts - 1 through 4 (of 4 total)
  • You must be logged in to reply to this topic.