예제 #1
0
 private static Task <IModel> CalibrateModel(TaskFactory taskFactory, Task <Market> market, Task <ICalibrationDescription> modelCalibDesc)
 {
     return(taskFactory.ComputationTaskWithLog("Model calibration", () =>
     {
         IModelDescription modelDesc = ModelCalibration.Instance.Calibrate(modelCalibDesc.Result, market.Result);
         return ModelFactory.Instance.Build(modelDesc, market.Result);
     }, market, modelCalibDesc));
 }
예제 #2
0
        public IXmlDataReader BuildFor(IModelDescription model, string uri)
        {
            if (model.Type.BaseType != typeof(DataRow))
            {
                _logger.LogWarning($"{model.Type.Name} does not implement {typeof(DataRow).Name}");
            }

            return(new XmlDataReader(uri, model.DataSetType.Name));
        }
예제 #3
0
        public IModel Build(IModelDescription modelDescription, Market market)
        {
            IModelFactory modelfactory;

            if (factories.TryGetValue(modelDescription.GetType(), out modelfactory))
            {
                return(modelfactory.Build(modelDescription, market));
            }
            throw new ArgumentException(string.Format("Missing Model Factory for {0}", modelDescription));
        }
예제 #4
0
        public static object Bergomi2FAtmfSkewApprox(object mktObj, object[,] modelBag, object[] maturities)
        {
            return(FunctionRunnerUtils.Run("Bergomi2FAtmfSkewApprox", () =>
            {
                Market market = MarketManager.Instance.GetMarket(mktObj);
                ICalibrationDescription b2FCalibDesc = Bergomi2FModelFactoryFromBag.Instance.Build(modelBag);
                IModelDescription b2FDesc = ModelCalibration.Instance.Calibrate(b2FCalibDesc, market);
                var b2Fmodel = (Bergomi2FModel)ModelFactory.Instance.Build(b2FDesc, market);

                var mats = b2Fmodel.Time[ObjectConverters.ConvertDateArray(maturities, market.RefDate)];

                var skews = Bergomi2FUtils.AtmfSkewApprox(b2Fmodel, mats);
                return skews.AsColumn();
            }));
        }
예제 #5
0
        public static object Bergomi2FVolOfVol(object mktObj, object[,] modelBag, object[] starts, object[] ends)
        {
            return(FunctionRunnerUtils.Run("Bergomi2FVolOfVol", () =>
            {
                Market market = MarketManager.Instance.GetMarket(mktObj);
                ICalibrationDescription b2FCalibDesc = Bergomi2FModelFactoryFromBag.Instance.Build(modelBag);
                IModelDescription b2FDesc = ModelCalibration.Instance.Calibrate(b2FCalibDesc, market);
                var b2Fmodel = (Bergomi2FModel)ModelFactory.Instance.Build(b2FDesc, market);

                var startDates = b2Fmodel.Time[ObjectConverters.ConvertDateArray(starts, market.RefDate)];
                var endDates = b2Fmodel.Time[ObjectConverters.ConvertDateArray(ends, market.RefDate)];
                if (startDates.Length != endDates.Length)
                {
                    throw new ArgumentException("Incompatible size between starts and ends");
                }

                return Bergomi2FUtils.FwdVolInstantVol(b2Fmodel, startDates, endDates).AsColumn();
            }));
        }
예제 #6
0
 public FiasDbContext BuildFor(IModelDescription modelDescription)
 {
     return(new FiasDbContext(_settings, new[] { modelDescription }));
 }