using YLErp.QdpModule.Constants; namespace YLErp.QdpModule { /// /// 正常的波动率曲面初始化类 /// 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); } } }