50 lines
2.0 KiB
C#
50 lines
2.0 KiB
C#
using Qdp.Pricing.Base.Enums;
|
|
using Qdp.Pricing.Library.Common.Interfaces;
|
|
using Qdp.Pricing.Library.Options.Products.SyntheticSpread.Engines.Analytical;
|
|
|
|
namespace YLErp.BLL.Calculation.Engine
|
|
{
|
|
public class SyntheticNormalSpreadFactory : OptionEngineFactoryBase
|
|
{
|
|
public static SyntheticNormalSpreadFactory Instance => _instance ?? (_instance = new SyntheticNormalSpreadFactory());
|
|
|
|
protected SyntheticNormalSpreadFactory() { }
|
|
protected static SyntheticNormalSpreadFactory _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 "ANALYTICALSYNTHETICNORMALSPREADOPTIONENGINE":
|
|
return new AnalyticalSyntheticNormalSpreadOptionEngine();
|
|
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.SyntheticNormalSpreadEngine)
|
|
? new AnalyticalSyntheticNormalSpreadOptionEngine()
|
|
: OptionEngineRepository.CreateEngine(OptionEngineRepository.SyntheticNormalSpreadEngine);
|
|
}
|
|
}
|
|
}
|