41 lines
1.6 KiB
C#
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);
|
|
}
|
|
}
|
|
}
|