using YLErp.Model.Enum; using YLErp.Modules.DataProviderModule; namespace YLErp.Modules.TradeModule.DealModule { /// /// 收益互换数据验证 /// public static class SwapTradeValidator { /// /// 收益互换预付金校验 /// public static string Validate(trade req) { var errorMsg = string.Empty; var client = DataCacheProvider.GetClientDataSource().GetData(req.ClientId); if (client.DerivativesInvestmentVarieties == null || !client.DerivativesInvestmentVarieties.Contains((int)DerivativesInvestmentVarietiesEnum.场外互换 + "")) { return $"客户:{client.Name}未设置交易种类“场外互换”,无法生成互换交易!"; } //收益互换初始预付金校验 //errorMsg = checkMarginRate(req.trade_swap); return errorMsg; } private static string checkMarginRate(trade_swap tradeSwap) { var errorMsg = ""; //多空组合 if (ClientMarginTypeEnum.多空组合.ToString().Equals(tradeSwap.SwapType)) { if (tradeSwap.GetMarginRate < 0.25) { errorMsg = $"根据监管要求权益类多空组合型收益互换预付金不得低于25%,当前交易预付金率为:{ tradeSwap.GetMarginRate * 100}%,不符合监管要求!"; } } else { //获取标的品种 var underlingData = new UnderlyingDataProvider(); var underlyingCode = tradeSwap.PayUnderlyingCode; if (tradeSwap.IsGetFloatingProfit) { underlyingCode = tradeSwap.GetUnderlyingCode; } var underlying = underlingData.GetUnderlying(underlyingCode); var variety = underlingData.GetVariety(underlying.UnderlyingTypeId); if (variety == null) { errorMsg = $"所设置标的未对应品种,请设置对应品种后再进行交易!"; } else { //股票、窄基股票指数及其产品、信用债 初始预付金比率 必须大于等于100% if ((variety.AssetType == "个股" || (variety.AssetType == "指数" && "窄基指数".Equals(variety.IndexType))) && tradeSwap.GetMarginRate < 1) { errorMsg = $"所交易标的为股票或窄基指数及其产品、信用债,初始预付金比例不得低于100%!,当前交易预付金率为:{ tradeSwap.GetMarginRate * 100}%,不符合监管要求!"; } else if ((variety.AssetType == "指数" && "宽基指数".Equals(variety.IndexType)) && tradeSwap.GetMarginRate < 0.5) { //挂钩宽基股票指数及其产品,无对应期货品种的 向单一交易对手方收取的预付金比例不得低于50% errorMsg = $"所交易标的挂钩宽基股票指数及其产品,无对应期货品种的,初始预付金比例不得低于50%!,当前交易预付金率为:{ tradeSwap.GetMarginRate * 100}%,不符合监管要求!"; } else if (tradeSwap.GetMarginRate < (variety.Margin ?? 0.0)) { //有对应期货或集中交易品种的 不得低于品种设置的最低预付金比例 errorMsg = $"所交易标的对应期货或集中交易品种的,初始预付金比例不得低于品种[{ variety.VarietyName}]所设置最低预付金比例{variety.Margin * 100}%!,当前交易预付金率为:{ tradeSwap.GetMarginRate * 100}%,不符合监管要求!"; } } } return errorMsg; } } }