@@ -555,11 +555,23 @@ void XvaAnalyticImpl::runPostProcessor() {
555555 if (!dimCalculator_ && (analytics[" mva" ] || analytics[" dim" ])) {
556556 if (inputs_->dimModel () == " Regression" ) {
557557 LOG (" dim calculator not set, create RegressionDynamicInitialMarginCalculator" );
558+ std::map<std::string, Real> currentIM;
559+ if (inputs_->collateralBalances ()) {
560+ for (auto const & [n, b] : inputs_->collateralBalances ()->collateralBalances ()) {
561+ currentIM[n.nettingSetId ()] =
562+ b->initialMargin () * (b->currency () == baseCurrency
563+ ? 1.0
564+ : analytic ()
565+ ->market ()
566+ ->fxRate (b->currency () + baseCurrency, marketConfiguration)
567+ ->value ());
568+ }
569+ }
558570 dimCalculator_ = boost::make_shared<RegressionDynamicInitialMarginCalculator>(
559- inputs_, analytic ()->portfolio (), cube_, cubeInterpreter_, *scenarioData_, dimQuantile, dimHorizonCalendarDays, dimRegressionOrder,
560- dimRegressors, dimLocalRegressionEvaluations, dimLocalRegressionBandwidth);
561- }
562- else {
571+ inputs_, analytic ()->portfolio (), cube_, cubeInterpreter_, *scenarioData_, dimQuantile,
572+ dimHorizonCalendarDays, dimRegressionOrder, dimRegressors, dimLocalRegressionEvaluations,
573+ dimLocalRegressionBandwidth, currentIM);
574+ } else {
563575 LOG (" dim calculator not set, create FlatDynamicInitialMarginCalculator" );
564576 dimCalculator_ = boost::make_shared<FlatDynamicInitialMarginCalculator>(
565577 inputs_, analytic ()->portfolio (), cube_, cubeInterpreter_, *scenarioData_);
0 commit comments