using YLErp.BLL; using YLErp.Core.DBModels; using YLErp.DBModels; using YLErp.Modules; namespace YLErp.Jobs.Imp { /// /// 格林计算PnL /// public class GeLinCalcPnLJob : BaseJob { public override Task JobImp() { //压力测试l var req = new YLErp.Modules.ScenarioModule.ScenarioRequest { UseTradeDivendRate = true, IsFullyHedged = true, ValueDate = valuedateBLL.ValueDate, VolType = "对冲", RiskFreeRate = valuedateBLL.SysRiskFreeRate(), SearchModel = new YLErp.Modules.ScenarioModule.TradeScenarioSearchModel { IsSelAll = true, page = 1, rows = 20, sord = "asc" } }; var config = new ScenarioConfigV2() { xRates = "0.2", xType = "波动率", yRates = "-0.2,0.2", yType = "标的价格", }; var result = new YLErp.Modules.ScenarioModule.ScenarioCalcService(YLErp.OptUserInfo.SystemUser).Calculate(req, config); var tradeGroup = result.Trades.GroupBy(O => O.TradeId); var list = new List(result.ResultItems.Count()); foreach (var item in tradeGroup) { var pnlList = item.ToList(); var obj = new EodScenarioanalysis() { ValueDate = req.ValueDate, TradeId = item.Key, CalcDateTime = DateTime.Now, PnL = item.Max(O => O.PnL), PnL1 = pnlList[0].PnL, PnL2 = pnlList[1].PnL, }; list.Add(obj); } using (var db = DbContextFactory.GetYLDbContext()) { db.BulkDelete($"ValueDate='{req.ValueDate:yyyy-MM-dd}'"); db.eod_scenarioanalyses.AddRange(list); db.SaveChanges(); } return Task.CompletedTask; } #region JobStatus Manager static JobStatus jobStatus = JobStatus.Init; public override JobStatus GetJobStatus() { return jobStatus; } public override void SetJobStatus(JobStatus status) { jobStatus = status; } #endregion } }