79 lines
2.5 KiB
C#
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
|
|
}
|
|
}
|