Files
zszq-trs/Framework/YLErp.Jobs/Imp/GeLinCalcPnLJob.cs
T
2024-05-09 14:06:26 +08:00

79 lines
2.5 KiB
C#

using YLErp.BLL;
using YLErp.Core.DBModels;
using YLErp.DBModels;
using YLErp.Modules;
namespace YLErp.Jobs.Imp
{
/// <summary>
/// 格林计算PnL
/// </summary>
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<EodScenarioanalysis>(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<EodScenarioanalysis>($"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
}
}