50 lines
1.9 KiB
C#
50 lines
1.9 KiB
C#
using Qdp.Pricing.Base.Enums;
|
|
using Qdp.Pricing.Library.Common.Interfaces;
|
|
using Qdp.Pricing.Library.Options.Products.Rainbow.Engines.Analytical;
|
|
|
|
namespace YLErp.BLL.Calculation.Engine
|
|
{
|
|
class RainbowEngineFactory : OptionEngineFactoryBase
|
|
{
|
|
public static RainbowEngineFactory Instace => _instance ?? (_instance = new RainbowEngineFactory());
|
|
|
|
protected RainbowEngineFactory() { }
|
|
protected static RainbowEngineFactory _instance;
|
|
|
|
public override IEngine GetEngine(string engineName = null, OptionExercise exercise = OptionExercise.European, params object[] additionalParams)
|
|
{
|
|
if (string.IsNullOrWhiteSpace(engineName))
|
|
{
|
|
return DefaultEngine(exercise, additionalParams);
|
|
}
|
|
else
|
|
{
|
|
switch (engineName.ToUpper())
|
|
{
|
|
case "ANALYTICALRAINBOWOPTIONENGINE":
|
|
return new AnalyticalRainbowOptionEngine();
|
|
case "GENERICMONTECARLOENGINE":
|
|
return CreateGenericMonteCarloEngine(additionalParams);
|
|
default:
|
|
if (engineName.IsValidEngineName())
|
|
{
|
|
return OptionEngineRepository.CreateEngine(engineName);
|
|
}
|
|
else
|
|
{
|
|
return DefaultEngine(exercise);
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
private static IEngine DefaultEngine(OptionExercise exercise, params object[] additionalParams)
|
|
{
|
|
return string.IsNullOrWhiteSpace(OptionEngineRepository.RainbowDefaultEngine)
|
|
? new AnalyticalRainbowOptionEngine()
|
|
: OptionEngineRepository.CreateEngine(OptionEngineRepository.RainbowDefaultEngine);
|
|
}
|
|
}
|
|
}
|