using Qdp.Pricing.Base.Enums; using Qdp.Pricing.Library.Common.Interfaces; namespace YLErp.BLL.Calculation.Engine { public interface IOptionEngineFactory { IEngine GetEngine(string engineName = null, OptionExercise exercise = OptionExercise.European, params object[] additionalParams); } public static class OptionEngineFactory { public static IOptionEngineFactory GetEngineFactory(string optionType) { switch (optionType.ToUpper()) { case "VANILLAOPTION": BLL.Calculation.Engine.OptionEngineRepository.VanillaAmericanDefaultEngine = valuedateBLL.VanillaAmericanOptionName; return VanillaEngineFactory.Instance; case "BARRIEROPTION": return BarrierEngineFactory.Instance; case "BINARYOPTION": return BinaryEngineFactory.Instance; case "ASIANOPTION": return AsianEngineFactory.Instance; case "RAINBOWOPTION": return RainbowEngineFactory.Instace; case "SYNTHTICNORMALSPREADOPTION": return SyntheticNormalSpreadFactory.Instance; case "DOUBLESHARKFINOPTION": return DoubleSharkFinFactory.Instance; case "SPREADOPTION": return SpreadEngineFactory.Instance; case "AUTOCALL": return AutoCallEngineFactory.Instance; case "SNOWBALL": return SnowballEngineFactory.Instance; case "RANGEACCRUAL": return RangeAccrualEngineFactory.Instance; default: throw new Exception($"不支持的期权类型{optionType}.无法创建计算引擎"); } } } }