Esempio n. 1
0
 public Zc(DateTime date, DateTime payDate, Currency currency, FinancingId financingId)
 {
     FinancingId = financingId;
     Currency    = currency;
     PayDate     = payDate;
     Date        = date;
 }
        private static Market Market()
        {
            var refDate = DateTime.Parse("07/06/2009");
            var time    = TimeMeasure.Act365(refDate);
            var pillars = new[] { refDate + Duration.Year, refDate + 2 * Duration.Year, refDate + 3 * Duration.Year, refDate + 5 * Duration.Year };
            var zcRates = new[] { 0.0010, 0.003, 0.005, 0.008 };
            var zcs     = zcRates.Select((r, i) => Math.Exp(-time[pillars[i]] * r)).ToArray();

            DiscountCurve discountCurve = DiscountCurve.LinearRateInterpol(
                FinancingId.RiskFree(Currency.Eur),
                pillars, zcs, time);
            var market = new Market(new[] { discountCurve }, new AssetMarket[0]);

            return(market);
        }
        public static object Discount(object mktObj, object[,] dates, string curveId)
        {
            return(FunctionRunnerUtils.Run("Discount", () =>
            {
                var market = MarketManager.Instance.GetMarket(mktObj);
                var finCurveId = FinancingId.Parse(curveId);
                DiscountCurve curve = market.DiscountCurve(finCurveId);

                var result = dates.Map(o =>
                {
                    var dateOrDuration = DateAndDurationConverter.ConvertDateOrDuration(o);
                    var date = dateOrDuration.ToDate(curve.RefDate);
                    return curve.Zc(date);
                });

                return result;
            }));
        }
Esempio n. 4
0
        private static AssetMarket[] ProcessAssetMkt(object[,] bag, DateTime refDate, DiscountCurve[] discountCurves)
        {
            var eqtyTime      = TimeMeasure.Act365(refDate);
            var assetRawDatas = bag.ProcessLabelledMatrix("Asset", o => o.ToString(), o => o.ToString(), o => o);

            TimeMatrixDatas repoRawDatas = bag.ProcessTimeMatrixDatas("Repo");
            var             repoPillars  = repoRawDatas.RowLabels
                                           .Select(dOrDur => dOrDur.ToDate(refDate)).ToArray();

            var assetMkts = new List <AssetMarket>();

            for (int i = 0; i < assetRawDatas.RowLabels.Length; i++)
            {
                var    assetName   = assetRawDatas.RowLabels[i];
                var    rawCurrency = assetRawDatas.GetColFromLabel("Currency")[i].ToString();
                object rawSpot     = assetRawDatas.GetColFromLabel("Spot")[i];

                var currency = Currency.Parse(rawCurrency);
                var assetId  = new AssetId(assetName, currency);

                double spot;
                if (!NumberConverter.TryConvertDouble(rawSpot, out spot))
                {
                    throw new ArgumentException(String.Format("AssetMarketFactory, invalid {0} spot : {1}", assetName, rawSpot));
                }

                double[] repoRates = repoRawDatas.GetColFromLabel(assetName);
                var      repoZcs   = repoRates.Select((r, idx) => Math.Exp(-eqtyTime[repoPillars[idx]] * r)).ToArray();
                var      repoCurve = DiscountCurve.LinearRateInterpol(FinancingId.AssetCollat(assetId), repoPillars, repoZcs, eqtyTime);

                var divQuotes = ProcessDiv(bag, refDate, assetName);
                var volMatrix = AssetVolMatrix(bag, eqtyTime, assetName);

                var riskFreeDiscount = discountCurves.Single(curve => curve.Financing.Equals(FinancingId.RiskFree(currency)));

                var mkt = new AssetMarket(assetId, refDate, eqtyTime,
                                          spot, riskFreeDiscount, repoCurve,
                                          divQuotes, volMatrix);
                assetMkts.Add(mkt);
            }

            return(assetMkts.ToArray());
        }
Esempio n. 5
0
        private static DiscountCurve[] RateCurveFromRawDatas(TimeMatrixDatas curveRawDatas, DateTime refDate)
        {
            var rateTimeInterpol = RateTimeMeasure(refDate);

            DateTime[] datePillars = curveRawDatas.RowLabels
                                     .Select(dOrDur => dOrDur.ToDate(refDate)).ToArray();

            var curves = new List <DiscountCurve>();

            foreach (var curveLabel in curveRawDatas.ColLabels)
            {
                FinancingId financingId;
                if (!FinancingId.TryParse(curveLabel, out financingId))
                {
                    throw new ArgumentException(String.Format("RateMarketFactory, invalid Discount Curve Id : {0}", curveLabel));
                }

                double[] zcs           = curveRawDatas.GetColFromLabel(curveLabel);
                var      discountCurve = DiscountCurve.LinearRateInterpol(financingId, datePillars, zcs, rateTimeInterpol);

                curves.Add(discountCurve);
            }
            return(curves.ToArray());
        }
Esempio n. 6
0
 public Leg(TCoupon[] coupons)
 {
     this.coupons = coupons;
     financing    = coupons.Select(cpn => cpn.Financing).Distinct().Single();
 }