Example #1
0
        public static VolatilitySurface BuildInterpol(VolatilityMatrix volMatrix, MoneynessProvider moneyness)
        {
            double[] timePillars = volMatrix.Time[volMatrix.Pillars];

            var varianceSlices = EnumerableUtils.For(0, timePillars.Length, i =>
            {
                double t = timePillars[i];
                double[] moneynessPillars = volMatrix.Strikes.Map(k => moneyness.Moneyness(t, k));
                var varianceSlice         = volMatrix.Vols.Row(i).Map(v => t * v * v);
                return((RrFunction)SplineInterpoler.BuildCubicSpline(moneynessPillars, varianceSlice));
            });

            var varianceInterpol = new VarianceInterpoler(timePillars, varianceSlices);

            return(new VolatilitySurface(volMatrix.Time, moneyness, varianceInterpol, varianceInterpol.BuildLocalVariance()));
        }
Example #2
0
        public AssetMarket(AssetId asset, DateTime refDate, ITimeMeasure time,
                           double spot,
                           DiscountCurve riskFreeDiscount,
                           DiscountCurve repoCurve,
                           DividendQuote[] dividends,
                           VolatilityMatrix volMatrix)
        {
            Time             = time;
            Spot             = spot;
            RiskFreeDiscount = riskFreeDiscount;
            RepoCurve        = repoCurve;
            Dividends        = dividends;
            VolMatrix        = volMatrix;
            RefDate          = refDate;
            Asset            = asset;

            if (refDate != repoCurve.RefDate || refDate != time.RefDate)
            {
                throw new Exception("AssetMarket : incompatible ref date !");
            }
        }