using Qdp.Pricing.Base.Utilities; using YLErp.Configuration; using YLErp.Modules.SystemModule; namespace YLErp.Web.Models { /// /// 组合报价视图模型 /// public class PricingModel : BasicViewModel { /// /// 是否导入 /// public bool IsImport { get; set; } /// /// 定价数据 /// public OtcOptionTradeFull Trade { get; set; } /// /// 系统日期 /// public string SysDate { get; } /// /// 公司枚举 /// public string Company { get; } /// /// 公司名称 /// public string CompanyName { get; } /// /// 公司简称 /// public string AbstractCompanyName { get; } /// /// 是否国君 /// public bool IsGuoJun { get; } /// /// 是否pv四舍五入 /// public bool IsPvRounded { get; } /// /// 是否交易波动率 /// public bool IsTradeVol { get; } /// /// 是否更精确的波动率 /// public bool VolMoreAccurate { get; } /// /// 是否精确模式 /// public bool PrecisionOfMinuteInQuote { get; } /// /// 是否skew模式的波动率 /// public bool SkewMapVol { get; } /// /// 是否获取目标波动率 /// public bool GetTradeCloseVol { get; } /// /// 是否有权限选择交易员 /// public bool CanSelectTrader { get; } /// /// 股票优先 /// public bool StockFirst { get; } /// /// 定价计算时是否需要选择客户 /// public bool ClientUsedForCalc { get; } /// /// 是否对冲下单 /// public bool HedgingOrder { get; } /// /// 是否交易员 /// public bool IsTrader { get; } /// /// 是否显示初始预付金 /// public bool ShowInitialMargin { get; } /// /// 双向预付金 /// public bool TwoSideMargin { get; } /// /// 是否计算预付金 /// public bool CalcMargin { get; } /// /// 简易模式 /// public bool SimpleMode { get; } /// /// QDP日历年天数 /// public int DaysInYear { get; } /// /// /// public string BinaryCalculation { get; set; } /// /// 交易编号必须大写 /// public bool UpperTradeNumber { get; set; } /// /// 组合报价是否计算凤凰/雪球期权风险值 /// public bool CalcAutocallGreeks { get; set; } /// /// 是否证券模式 /// public bool SecuritiesEnvironment => PS.Config.ErpElement.SecuritiesEnvironment; /// /// 目标波动率配置 /// public string TradeCloseVolatilityCfg { get; } /// /// 平滑过渡天数配置 /// public string NumOfSmoothingDaysCfg { get; } /// /// 远期到期类型配置 /// public string ForwardPriceTypeCfg { get; } public PricingModel(UserInfo userInfo, bool isTrader) : base(userInfo) { SysDate = valuedateBLL.ValueDate.ToString("yyyy-MM-dd"); Company = PS.Config.Company.ToString(); CompanyName = PS.Config.CompanyShortName.TrimToNull() ?? PS.Config.Company.ToString(); AbstractCompanyName = PS.Config.CompanyName ?? string.Empty; IsGuoJun = PS.Config.Company == CompanyEnum.国泰君安; IsPvRounded = PS.Config.IsPVRounded; IsTradeVol = PS.Config.IsTradeVol; ShowInitialMargin = valuedateBLL.SystemDate.CanSetInitialMargin; //是否使用更加精确的波动率 VolMoreAccurate = PS.Config.ErpElement.VolMoreAccurate; PrecisionOfMinuteInQuote = PS.Config.ErpElement.PrecisionOfMinuteInQuote; SkewMapVol = PS.Config.ErpElement.SkewMapVolConstruction; GetTradeCloseVol = true; CanSelectTrader = userInfo.交易管理_新增选择交易员; StockFirst = AppHelper.OtcConfig.StockFirst; ClientUsedForCalc = AppHelper.OtcConfig.ClientUsedForCalc; HedgingOrder = (AppHelper.OtcConfig.HedgingOrder & 1) == 1; TwoSideMargin = PS.Config.ErpElement.TwoSideMargin; IsTrader = isTrader; // 前端会JS直接覆盖成365,这里的赋值暂时没用 DaysInYear = 365; //个性化设置 var config = new SysUserConfigService(userInfo).GetConfigData(Server.CacheProvider); SimpleMode = config?.Pricing_SimpleMode ?? true; CalcMargin = config?.Pricing_CalcMargin ?? false; CalcAutocallGreeks = config?.Pricing_CalcAutocallGreeks ?? false; BinaryCalculation = valuedateBLL.BinaryCalculation; UpperTradeNumber = PS.Config.ErpElement.UpperTradeNumber; var nv = YieldChain.Helpers.UrlHelper.ParseQueryString(PS.Config.ErpElement.TradePricingCfg); TradeCloseVolatilityCfg = nv?["目标波动率"].TrimToNull() ?? "Mid"; NumOfSmoothingDaysCfg = nv?["平滑过渡天数"].TrimToNull() ?? "NONE"; ForwardPriceTypeCfg = nv?["远期期初价类型"].TrimToNull() ?? "期权行权价格"; } } }