コード例 #1
0
        public void CheckZeroVolForward(AssetMarket assetMkt)
        {
            var zcCurve = assetMkt.RiskFreeDiscount;
            var market  = new Market(new[] { zcCurve }, new[] { assetMkt });

            var zeroVol           = new MapRawDatas <DateOrDuration, double>(new[] { new DateOrDuration(assetMkt.RefDate) }, new[] { 0.0 });
            var blackScholesDesc  = new BlackScholesModelDescription(assetMkt.Asset.Name, zeroVol, true);
            var mcConfig          = new MonteCarloConfig(1, RandomGenerators.GaussianSobol(SobolDirection.Kuo3));
            var blackScholesModel = ModelFactory.Instance.Build(blackScholesDesc, market);

            var fwdDates = new[] { Duration.Month, 6 * Duration.Month, Duration.Year, 2 * Duration.Year, 5 * Duration.Year }
            .Map(d => assetMkt.RefDate + d);

            IProduct    fwdLeg      = ForwardLeg(fwdDates);
            PriceResult priceResult = (PriceResult)McPricer.WithDetails(mcConfig).Price(fwdLeg, blackScholesModel, market);

            double[] fwds = priceResult.Details.Map(kv => kv.Item3.Value);

            var assetFwdCurve = assetMkt.Forward();

            double[] refFwds = fwdDates.Map(d => assetFwdCurve.Fwd(d) * zcCurve.Zc(d));

            foreach (var i  in Enumerable.Range(0, fwdDates.Length))
            {
                var err = Math.Abs(fwds[i] / refFwds[i] - 1.0);
                Assert.LessOrEqual(err, 20.0 * DoubleUtils.MachineEpsilon);
            }
        }
コード例 #2
0
        public ICalibrationDescription Build(object[,] bag)
        {
            var assetName = bag.ProcessScalarString("Asset");
            var withDivs  = !bag.Has("WithDivs") || bag.ProcessScalarBoolean("WithDivs");

            var calibDatas = bag.ProcessTimeMatrixDatas("CalibDate");

            if (calibDatas.HasCol("Sigma"))
            {
                var sigmaValues   = calibDatas.GetColFromLabel("Sigma");
                var sigma         = new MapRawDatas <DateOrDuration, double>(calibDatas.RowLabels, sigmaValues);
                var bsDescription = new BlackScholesModelDescription(assetName, sigma, withDivs);
                return(new ExplicitCalibration <BlackScholesModelDescription>(bsDescription));
            }

            var calibStrikes = calibDatas.GetColFromLabel("Strike");

            return(new BlackScholesModelCalibDesc(assetName, withDivs, calibDatas.RowLabels, calibStrikes));
        }