Files
zszq-trs/YLErpWeb/Models/PricingModel.cs
T
2024-05-09 14:06:26 +08:00

201 lines
6.2 KiB
C#

using Qdp.Pricing.Base.Utilities;
using YLErp.Configuration;
using YLErp.Modules.SystemModule;
namespace YLErp.Web.Models
{
/// <summary>
/// 组合报价视图模型
/// </summary>
public class PricingModel : BasicViewModel
{
/// <summary>
/// 是否导入
/// </summary>
public bool IsImport { get; set; }
/// <summary>
/// 定价数据
/// </summary>
public OtcOptionTradeFull Trade { get; set; }
/// <summary>
/// 系统日期
/// </summary>
public string SysDate { get; }
/// <summary>
/// 公司枚举
/// </summary>
public string Company { get; }
/// <summary>
/// 公司名称
/// </summary>
public string CompanyName { get; }
/// <summary>
/// 公司简称
/// </summary>
public string AbstractCompanyName { get; }
/// <summary>
/// 是否国君
/// </summary>
public bool IsGuoJun { get; }
/// <summary>
/// 是否pv四舍五入
/// </summary>
public bool IsPvRounded { get; }
/// <summary>
/// 是否交易波动率
/// </summary>
public bool IsTradeVol { get; }
/// <summary>
/// 是否更精确的波动率
/// </summary>
public bool VolMoreAccurate { get; }
/// <summary>
/// 是否精确模式
/// </summary>
public bool PrecisionOfMinuteInQuote { get; }
/// <summary>
/// 是否skew模式的波动率
/// </summary>
public bool SkewMapVol { get; }
/// <summary>
/// 是否获取目标波动率
/// </summary>
public bool GetTradeCloseVol { get; }
/// <summary>
/// 是否有权限选择交易员
/// </summary>
public bool CanSelectTrader { get; }
/// <summary>
/// 股票优先
/// </summary>
public bool StockFirst { get; }
/// <summary>
/// 定价计算时是否需要选择客户
/// </summary>
public bool ClientUsedForCalc { get; }
/// <summary>
/// 是否对冲下单
/// </summary>
public bool HedgingOrder { get; }
/// <summary>
/// 是否交易员
/// </summary>
public bool IsTrader { get; }
/// <summary>
/// 是否显示初始预付金
/// </summary>
public bool ShowInitialMargin { get; }
/// <summary>
/// 双向预付金
/// </summary>
public bool TwoSideMargin { get; }
/// <summary>
/// 是否计算预付金
/// </summary>
public bool CalcMargin { get; }
/// <summary>
/// 简易模式
/// </summary>
public bool SimpleMode { get; }
/// <summary>
/// QDP日历年天数
/// </summary>
public int DaysInYear { get; }
/// <summary>
///
/// </summary>
public string BinaryCalculation { get; set; }
/// <summary>
/// 交易编号必须大写
/// </summary>
public bool UpperTradeNumber { get; set; }
/// <summary>
/// 组合报价是否计算凤凰/雪球期权风险值
/// </summary>
public bool CalcAutocallGreeks { get; set; }
/// <summary>
/// 是否证券模式
/// </summary>
public bool SecuritiesEnvironment => PS.Config.ErpElement.SecuritiesEnvironment;
/// <summary>
/// 目标波动率配置
/// </summary>
public string TradeCloseVolatilityCfg { get; }
/// <summary>
/// 平滑过渡天数配置
/// </summary>
public string NumOfSmoothingDaysCfg { get; }
/// <summary>
/// 远期到期类型配置
/// </summary>
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<OtcWebUserConfig>(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() ?? "期权行权价格";
}
}
}