Example #1
0
        public double GetVolForAbsoluteStrike(double strike, double maturity, double forward)
        {
            var expiry = OriginDate.AddYearFraction(maturity, DayCountBasis.Act365F);
            var pair   = FundingModel.FxMatrix.GetFxPair(AssetSurface.Currency, Currency);
            var fxFwd  = FundingModel.GetFxRate(pair.SpotDate(expiry), pair.Domestic, pair.Foreign);

            double vA, vF;

            switch (CalculationType)
            {
            case CompositeVolType.Black:
                vA = AssetSurface.GetVolForAbsoluteStrike(forward / fxFwd, expiry, forward / fxFwd);
                vF = FundingModel.GetVolSurface(pair.ToString()).GetVolForAbsoluteStrike(fxFwd, expiry, fxFwd);
                break;

            case CompositeVolType.AssetSkewOnly:
                vA = AssetSurface.GetVolForAbsoluteStrike(strike / fxFwd, expiry, forward / fxFwd);
                vF = FundingModel.GetVolSurface(pair.ToString()).GetVolForAbsoluteStrike(fxFwd, expiry, fxFwd);
                break;

            default:
                throw new Exception($"Unable to handle calc type {CalculationType}");
            }

            var vC = System.Math.Sqrt(vA * vA + vF * vF + 2.0 * Correlation * vA * vF);

            return(vC);
        }
Example #2
0
        public Dictionary <string, IVolSurface> GetATMVegaScenarios(double bumpSize, DateTime?LastSensitivityDate)
        {
            var aDict = AssetSurface.GetATMVegaScenarios(bumpSize, LastSensitivityDate);
            var oDict = aDict.ToDictionary(kv => kv.Key, kv => (IVolSurface) new CompositeVolSurface(Name, AssetId, Currency, kv.Value, FundingModel, Correlation, CalculationType));

            var fDict = FundingModel.GetVolSurface(_Pair.ToString()).GetATMVegaScenarios(bumpSize, LastSensitivityDate);

            foreach (var kv in fDict)
            {
                var fModel = FundingModel.DeepClone(null);
                fModel.VolSurfaces[_Pair.ToString()] = kv.Value;
                oDict.Add(kv.Key, new CompositeVolSurface(Name, AssetId, Currency, AssetSurface, fModel, Correlation, CalculationType));
            }

            return(oDict);
        }
Example #3
0
 public DateTime PillarDatesForLabel(string label) => AssetSurface.PillarDatesForLabel(label);