Files
zszq-trs/YLErpDAL/QdpModule/Vol/NormalVolSurfaceInitializer.cs
T
2024-05-09 14:06:26 +08:00

41 lines
1.6 KiB
C#

using YLErp.QdpModule.Constants;
namespace YLErp.QdpModule
{
/// <summary>
/// 正常的波动率曲面初始化类
/// </summary>
public class NormalVolSurfaceInitializer : IVolSurfaceInitializer
{
public void InitializeMarketProxy(VolSurfaceInitParams initParams)
{
var marketProxy = QdpMarketManager.Instance.GetPrebuiltMarketProxy(initParams.userId);
InitializeMarketProxy(marketProxy, initParams);
}
public void InitializeMarketProxy(IQdpMarketProxy marketProxy, VolSurfaceInitParams initParams)
{
if (string.IsNullOrWhiteSpace(initParams.valueDate))
{
throw new System.ArgumentException("缺少valueDate", nameof(initParams.valueDate));
}
marketProxy.CreateMarket(initParams.valueDate);
var surfaceType = (initParams.volSurfaceMode != null && initParams.volSurfaceMode == "MoneynessVol") ? "MoneynessVol" : "StrikeVol";
var volSurfaceName = initParams.volSurfaceNameKey;
if (string.IsNullOrWhiteSpace(volSurfaceName))
{
volSurfaceName = QdpVolHelper.GetVolSurfaceName(initParams.UnderlyingCode);
}
var volSurfaceWrap = new VolSurfaceBuilder
{
volSurfaceName = volSurfaceName,
volSurfaceType = surfaceType,
interpolation = initParams.interpolation ?? ConsVolMethod.BiLinear
}.SetVectors(initParams.vols, initParams.addVolRate, initParams.isAddVolPercent).Build(initParams.valueDate);
marketProxy.SaveVolSurface(volSurfaceWrap);
}
}
}