예제 #1
0
        public ProductPathFlowCalculator(IPathFlowCalculator <double[], IFixing[]> fixingPathCalculator,
                                         IPathFlowCalculator <double[], PaymentInfo[]> numerairePathCalc,
                                         IProductPathFlow productPathFlow)
        {
            this.fixingPathCalculator = fixingPathCalculator;
            this.numerairePathCalc    = numerairePathCalc;
            this.productPathFlow      = productPathFlow;

            //Buffers initialization
            fixingsPath   = fixingPathCalculator.NewPathFlow();
            numerairePath = numerairePathCalc.NewPathFlow();
        }
        public static ProductPathFlowCalculator Build(IProduct product, McModel model)
        {
            IFixing[][] fixings = FixingsByDate(product);
            Func <double[], double>[][]   fixingFromFactors = fixings.Map(fs => fs.Map(f => model.FactorRepresentation[f]));
            ArrayPathCalculator <IFixing> fixingPathCalc    = FixingPathCalc(model.SimulatedDates, fixings, fixingFromFactors);

            PaymentInfo[][] paymentsByDate = PaymentsByDate(product);
            ArrayPathCalculator <PaymentInfo> numerairePathCalc = NumerairePathCalc(paymentsByDate, model);

            var pathFlowVisitor = new ProductPathFlowVisitor(fixings, paymentsByDate);
            IProductPathFlow productPathFlow = product.Accept(pathFlowVisitor);

            return(new ProductPathFlowCalculator(fixingPathCalc, numerairePathCalc, productPathFlow));
        }