Files
zszq-trs/YLErpDAL/Modules/RiskModule/WarningService.cs
T
2024-05-09 14:06:26 +08:00

352 lines
16 KiB
C#

using YLErp.Model;
namespace YLErp.Modules.RiskModule
{
public class WarningService : YLBaseService
{
private static Dictionary<string, WarnModel> dicCache = new Dictionary<string, WarnModel>();
private static int total = 0;
private static DateTime? dt = null;
private WarningService(OptUserInfo userInfo) : base(userInfo)
{
}
public static Dictionary<string, WarnModel> GetInstance()
{
return dicCache;
}
public static int GetModelSum()
{
if (dicCache != null)
{
dicCache.TryGetValue("summary", out WarnModel warn);
total = (warn?.YellowWarning ?? 0) + (warn?.RedWarning ?? 0);
}
return total;
}
public static DateTime? GetUpdateTime()
{
return dt;
}
public static void QuotaMonitorMsgQuery()
{
var dic = new Dictionary<string, WarnModel>();
var service = new QuotaMonitorService(OptUserInfo.SystemUser);
QuotaMonitorReq req = new QuotaMonitorReq()
{
PvPercent = PS.Config.ErpElement.EodVarPvPercent,
UseCalcCreditExposure = false,
ValueDate = System.DateTime.Today
};
List<QuotaMonitor_Global> OverallBusinessResult = service.QueryGlobalFromCalc(req);
int allRed = 0;
int allYellow = 0;
if (OverallBusinessResult != null)
{
string prefixName = "OverallBusiness";
int redshu = 0;
int yellowshu = 0;
WarnModel warnDeltaCashModel = new WarnModel();
dic.Add($"{prefixName}_Delta", warnDeltaCashModel);
WarnModel warnMybjModel = new WarnModel();
dic.Add($"{prefixName}_StockEqvNotional", warnMybjModel);
WarnModel warnGammaModel = new WarnModel();
dic.Add($"{prefixName}_Gamma", warnGammaModel);
WarnModel warnVegaModel = new WarnModel();
dic.Add($"{prefixName}_Vega", warnVegaModel);
WarnModel warnThetaModel = new WarnModel();
dic.Add($"{prefixName}_Theta", warnThetaModel);
WarnModel warnPositionPnlModel = new WarnModel();
dic.Add($"{prefixName}_PositionPnl", warnPositionPnlModel);
OverallBusinessResult.ForEach(trade =>
{
if (trade.Quota_DeltaCash_Lower > trade.DeltaCash || trade.Quota_DeltaCash_Upper < trade.DeltaCash)
{
redshu++;
if (dic.ContainsKey($"{prefixName}_Delta"))
{
warnDeltaCashModel = dic[$"{prefixName}_Delta"];
warnDeltaCashModel.RedWarning += 1;
}
}
if (trade.Quota_DeltaCash_wLower > trade.DeltaCash || trade.Quota_DeltaCash_wUpper < trade.DeltaCash)
{
yellowshu++;
if (dic.ContainsKey($"{prefixName}_Delta"))
{
warnDeltaCashModel = dic[$"{prefixName}_Delta"];
warnDeltaCashModel.YellowWarning += 1;
}
}
if (trade.Quota_StockEqvNotional_Lower > trade.StockEqvNotional || trade.Quota_StockEqvNotional_Upper < trade.StockEqvNotional)
{
redshu++;
if (dic.ContainsKey($"{prefixName}_StockEqvNotional"))
{
warnMybjModel = dic[$"{prefixName}_StockEqvNotional"];
warnMybjModel.RedWarning += 1;
}
}
if (trade.Quota_StockEqvNotional_wLower > trade.StockEqvNotional || trade.Quota_StockEqvNotional_wUpper < trade.StockEqvNotional)
{
yellowshu++;
if (dic.ContainsKey($"{prefixName}_StockEqvNotional"))
{
warnMybjModel = dic[$"{prefixName}_StockEqvNotional"];
warnMybjModel.YellowWarning += 1;
}
}
if (trade.Quota_GammaCash_Lower > trade.GammaCash || trade.Quota_GammaCash_Upper < trade.GammaCash)
{
redshu++;
if (dic.ContainsKey($"{prefixName}_Gamma"))
{
warnGammaModel = dic[$"{prefixName}_Gamma"];
warnGammaModel.RedWarning += 1;
}
}
if (trade.Quota_GammaCash_wLower > trade.GammaCash || trade.Quota_GammaCash_wUpper < trade.GammaCash)
{
yellowshu++;
if (dic.ContainsKey($"{prefixName}_Gamma"))
{
warnGammaModel = dic[$"{prefixName}_Gamma"];
warnGammaModel.YellowWarning += 1;
}
}
if (trade.Quota_VegaCash_Lower > trade.VegaCash || trade.Quota_VegaCash_Upper < trade.VegaCash)
{
redshu++;
if (dic.ContainsKey($"{prefixName}_Vega"))
{
warnVegaModel = dic[$"{prefixName}_Vega"];
warnVegaModel.RedWarning += 1;
}
}
if (trade.Quota_VegaCash_wLower > trade.VegaCash || trade.Quota_VegaCash_wUpper < trade.VegaCash)
{
yellowshu++;
if (dic.ContainsKey($"{prefixName}_Vega"))
{
warnVegaModel = dic[$"{prefixName}_Vega"];
warnVegaModel.YellowWarning += 1;
}
}
//if (trade.Quota_TotalPnL_Lower > trade.TotalPnL || trade.Quota_TotalPnL_Upper < trade.TotalPnL)
//{
// yellowshu++;
// if (dic.ContainsKey($"{prefixName}_TotalPnL"))
// {
// warnPnlModel = dic[$"{prefixName}_TotalPnL"];
// warnPnlModel.YellowWarning += 1;
// }
//}
//if (trade.Quota_TotalPnL_wLower > trade.TotalPnL || trade.Quota_TotalPnL_wUpper < trade.TotalPnL)
//{
// redshu++;
// if (dic.ContainsKey($"{prefixName}_TotalPnL"))
// {
// warnPnlModel = dic[$"{prefixName}_TotalPnL"];
// warnPnlModel.RedWarning += 1;
// }
//}
if (trade.Quota_PositionPnl_Lower > trade.PositionPnl || trade.Quota_PositionPnl_Upper < trade.PositionPnl)
{
redshu++;
if (dic.ContainsKey($"{prefixName}_PositionPnl"))
{
warnPositionPnlModel = dic[$"{prefixName}_PositionPnl"];
warnPositionPnlModel.RedWarning += 1;
}
}
if (trade.Quota_PositionPnl_wLower > trade.PositionPnl || trade.Quota_PositionPnl_wUpper < trade.PositionPnl)
{
yellowshu++;
if (dic.ContainsKey($"{prefixName}_PositionPnl"))
{
warnPositionPnlModel = dic[$"{prefixName}_PositionPnl"];
warnPositionPnlModel.YellowWarning += 1;
}
}
if (trade.Quota_Theta_Lower > trade.Theta || trade.Quota_Theta_Upper < trade.Theta)
{
redshu++;
if (dic.ContainsKey($"{prefixName}_Theta"))
{
warnThetaModel = dic[$"{prefixName}_Theta"];
warnThetaModel.RedWarning += 1;
}
}
if (trade.Quota_Theta_Lower > trade.Theta || trade.Quota_Theta_wUpper < trade.Theta)
{
yellowshu++;
if (dic.ContainsKey($"{prefixName}_Theta"))
{
warnThetaModel = dic[$"{prefixName}_Theta"];
warnThetaModel.YellowWarning += 1;
}
}
});
dic.Add($"{prefixName}_summary", new WarnModel() { RedWarning = redshu, YellowWarning = yellowshu });
allRed += redshu;
allYellow += yellowshu;
}
var VarietyResult = service.QueryVarietyFromCalc(req);
if (VarietyResult != null)
{
string prefixName = "Variety";
int redshu = 0;
int yellowshu = 0;
WarnModel warnDeltaCashModel = new WarnModel();
dic.Add($"{prefixName}_Delta", warnDeltaCashModel);
WarnModel warnMybjModel = new WarnModel();
dic.Add($"{prefixName}_StockEqvNotional", warnMybjModel);
WarnModel warnGammaModel = new WarnModel();
dic.Add($"{prefixName}_Gamma", warnGammaModel);
WarnModel warnThetaModel = new WarnModel();
dic.Add($"{prefixName}_Theta", warnThetaModel);
WarnModel warnVegaModel = new WarnModel();
dic.Add($"{prefixName}_Vega", warnVegaModel);
WarnModel warnPositionPnlModel = new WarnModel();
dic.Add($"{prefixName}_PositionPnl", warnPositionPnlModel);
VarietyResult.ForEach(v =>
{
if (v.Quota_DeltaCash_Lower > v.DeltaCash || v.Quota_DeltaCash_Upper < v.DeltaCash)
{
redshu++;
if (dic.ContainsKey($"{prefixName}_Delta"))
{
warnDeltaCashModel = dic[$"{prefixName}_Delta"];
warnDeltaCashModel.RedWarning += 1;
}
}
if (v.Quota_DeltaCash_wLower > v.DeltaCash || v.Quota_DeltaCash_wUpper < v.DeltaCash)
{
yellowshu++;
if (dic.ContainsKey($"{prefixName}_Delta"))
{
warnDeltaCashModel = dic[$"{prefixName}_Delta"];
warnDeltaCashModel.YellowWarning += 1;
}
}
if (v.Quota_StockEqvNotional_Lower > v.StockEqvNotional || v.Quota_StockEqvNotional_Upper < v.StockEqvNotional)
{
redshu++;
if (dic.ContainsKey($"{prefixName}_StockEqvNotional"))
{
warnMybjModel = dic[$"{prefixName}_StockEqvNotional"];
warnMybjModel.RedWarning += 1;
}
}
if (v.Quota_StockEqvNotional_wLower > v.StockEqvNotional || v.Quota_StockEqvNotional_wUpper < v.StockEqvNotional)
{
yellowshu++;
if (dic.ContainsKey($"{prefixName}_StockEqvNotional"))
{
warnMybjModel = dic[$"{prefixName}_StockEqvNotional"];
warnMybjModel.YellowWarning += 1;
}
}
if (v.Quota_PositionPnl_Lower > v.PositionPnl || v.Quota_PositionPnl_Upper < v.PositionPnl)
{
redshu++;
if (dic.ContainsKey($"{prefixName}_PositionPnl"))
{
warnPositionPnlModel = dic[$"{prefixName}_PositionPnl"];
warnPositionPnlModel.RedWarning += 1;
}
}
if (v.Quota_PositionPnl_wLower > v.PositionPnl || v.Quota_PositionPnl_wUpper < v.PositionPnl)
{
yellowshu++;
if (dic.ContainsKey($"{prefixName}_PositionPnl"))
{
warnPositionPnlModel = dic[$"{prefixName}_PositionPnl"];
warnPositionPnlModel.YellowWarning += 1;
}
}
if (v.Quota_GammaCash_Lower > v.GammaCash || v.Quota_GammaCash_Upper < v.GammaCash)
{
redshu++;
if (dic.ContainsKey($"{prefixName}_Gamma"))
{
warnGammaModel = dic[$"{prefixName}_Gamma"];
warnGammaModel.RedWarning += 1;
}
}
if (v.Quota_GammaCash_wLower > v.GammaCash || v.Quota_GammaCash_wUpper < v.GammaCash)
{
yellowshu++;
if (dic.ContainsKey($"{prefixName}_Gamma"))
{
warnGammaModel = dic[$"{prefixName}_Gamma"];
warnGammaModel.YellowWarning += 1;
}
}
if (v.Quota_VegaCash_Lower > v.VegaCash || v.Quota_VegaCash_Upper < v.VegaCash)
{
redshu++;
if (dic.ContainsKey($"{prefixName}_Vega"))
{
warnVegaModel = dic[$"{prefixName}_Vega"];
warnVegaModel.RedWarning += 1;
}
}
if (v.Quota_VegaCash_wLower > v.VegaCash || v.Quota_VegaCash_wUpper < v.VegaCash)
{
yellowshu++;
if (dic.ContainsKey($"{prefixName}_Vega"))
{
warnVegaModel = dic[$"{prefixName}_Vega"];
warnVegaModel.YellowWarning += 1;
}
}
if (v.Quota_Theta_Lower > v.Theta || v.Quota_Theta_Upper < v.Theta)
{
redshu++;
if (dic.ContainsKey($"{prefixName}_Theta"))
{
warnThetaModel = dic[$"{prefixName}_Theta"];
warnThetaModel.RedWarning += 1;
}
}
if (v.Quota_Theta_Lower > v.Theta || v.Quota_Theta_wUpper < v.Theta)
{
yellowshu++;
if (dic.ContainsKey($"{prefixName}_Theta"))
{
warnThetaModel = dic[$"{prefixName}_Theta"];
warnThetaModel.YellowWarning += 1;
}
}
});
dic.Add($"{prefixName}_summary", new WarnModel() { RedWarning = redshu, YellowWarning = yellowshu });
allRed += redshu;
allYellow += yellowshu;
}
dic.Add("summary", new WarnModel() { RedWarning = allRed, YellowWarning = allYellow });
dt=DateTime.Now;
dicCache = dic;
}
}
public class WarnModel
{
public int YellowWarning { get; set; } = 0;
public int RedWarning { get; set; } = 0;
}
public enum WarnType
{
//整体业务维度
ztywwd = 1,
//品种维度
pzwd = 2,
}
}