81 lines
3.9 KiB
C#
81 lines
3.9 KiB
C#
using YLErp.Model.Enum;
|
|
using YLErp.Modules.DataProviderModule;
|
|
|
|
namespace YLErp.Modules.TradeModule.DealModule
|
|
{
|
|
/// <summary>
|
|
/// 收益互换数据验证
|
|
/// </summary>
|
|
public static class SwapTradeValidator
|
|
{
|
|
/// <summary>
|
|
/// 收益互换预付金校验
|
|
/// </summary>
|
|
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;
|
|
}
|
|
|
|
}
|
|
}
|