保证金算法&资金计算

This commit is contained in:
吴方海
2025-04-16 15:15:59 +08:00
parent 6e644083df
commit 8e61f23e18
47 changed files with 695 additions and 1194 deletions
@@ -489,7 +489,8 @@ where {nameof(t.TaskStartTime)}>'{startDateStr}' and {nameof(t.TaskState)}={(int
{
new EodCheckCurrency(_context).Execute();
}
SetTaskStep("检查日终流水");
new EodCheckSwapFlow(_context).Execute();
tasks = new Task[3];
tasks[0] = Task.Run(() =>
@@ -497,9 +498,6 @@ where {nameof(t.TaskStartTime)}>'{startDateStr}' and {nameof(t.TaskState)}={(int
SetTaskStep("检查标的到期日");
new EodCheckMaturityDate(_context).Execute();//t
SetTaskStep("合成篮子标的价格");
new EodBasketPriceSaveService(_context).Execute();//t
if (PS.Config.ErpElement.SupportMultiCalendar)
{
SetTaskStep("为处于节假日的交易标的复制上日收盘价");
@@ -508,121 +506,17 @@ where {nameof(t.TaskStartTime)}>'{startDateStr}' and {nameof(t.TaskState)}={(int
SetTaskStep("检查标的结算价格缺失");
new EodCheckSettlePrice(_context).Execute();//t
if (PS.Config.Is厦门象屿)
{
SetTaskStep("检查标的参考价格缺失");
new EodCheckReferencePrice(_context).Execute();//t
}
});
if (_request.IsSettleOtcTrades)
{
tasks[1] = Task.Run(() =>
{
//SetTaskStep("合成多空组合流水");
//new EodHandleSwapFlowService(_context).Execute();
SetTaskStep("检查当日交易");
new EodCheckNewTrade(_context).Execute();//t
SetTaskStep("日终结算检查");
new EodCheckVolService(_context).Execute();//t
SetTaskStep("合成互换交易");
new TradeSwapFlowMoreCheck(_context).Execute();//t
});
}
if (_request.IsSettleOtcTrades)
{
tasks[2] = Task.Run(() =>
{
SetTaskStep("汇率收盘结算");
new EodCurrencyRateService(_request.UserInfo).HandleAmountByCurrencyRate(_context.SettleDate, _context.Request.ClientIds);//t
});
}
WaitTasks(tasks);
if (_request.IsSettleOtcTrades)
{
tasks = new[]
{
Task.Run(() =>
{
SetTaskStep("检查期权观察状态1");
new EodCheckMonitoredTrade(_context).ExecuteTask1(SetTaskStep);//t
}),
Task.Run(() =>
{
SetTaskStep("检查期权观察状态2");
new EodCheckMonitoredTrade(_context).ExecuteTask2(SetTaskStep);//t
}),
// Task.Run(() =>
//{
// SetTaskStep("定期结算互换收益");
// new EodCheckMonitoredTrade(_context).ExecuteBalanceSwapProfit(SetTaskStep);//t
//})
Task.Run(() =>
{
SetTaskStep("定期归档收益互换");
new EodCheckMonitoredTrade(_context).ExecuteEodSwapPosition(SetTaskStep);//t
})
};
WaitTasks(tasks);
SetTaskStep("自动延期结算");
new EodDelaySettlementTrade(_context).Execute(_report.SetErrorTips);//t
SetTaskStep("检查当日交易");
new EodCheckNewTrade(_context).Execute();//t
SetTaskStep("检查当日到期交易");
new EodCheckMaturityTrade(_context).Execute();//t
SetTaskStep("定期归档收益互换");
new EodCheckMonitoredTrade(_context).ExecuteEodSwapPosition(SetTaskStep);//t
}
new EodCheckMonitoredTrade(_context).CalculateMargin();
new EodCheckMonitoredTrade(_context).ExecuteEodSwap();
tasks = new Task[4];
if (_request.IsSettleExchangeTrades)
{
//tasks[0] = Task.Run(() =>
//{
// if (_context.Request.ClientIds == null)
// {
// SetTaskStep("场内期权结算");
// new ExchangeOptionSettlementService(_context.UserInfo).Execute(_context.SettleDate); //t
// }
//});
}
if (_request.IsSettleOtcTrades)
{
tasks[0] = Task.Run(() =>
{
SetTaskStep("备份场外交易");
SaveEodTrade(_context, _cancellationTokenSource.Token);//t
});
tasks[1] = Task.Run(() =>
{
SetTaskStep("检查权利金应付日");
new EodCheckPremiumPayDate(_context).Execute();//t
});
if (_context.SettlementConfig.CalcForwradMargin)
{
tasks[2] = Task.Run(() =>
{
SetTaskStep("远期预付金成本结算");
new EodForwardMarginSettlement(_context).Execute();//t
});
}
}
//敏感数据计算
WaitTasks(tasks);
}
SetTaskStep("日终持仓结算");
@@ -648,61 +542,7 @@ where {nameof(t.TaskStartTime)}>'{startDateStr}' and {nameof(t.TaskState)}={(int
SetTaskStep("结算客户资金");
new EodClientBalanceCalc(_context).ClientBalanceCalc();
//客户资金买卖权分开算
if (_context.SettlementConfig.CalcBuySell)
{
new EodClientBalanceCalcBS(_context.UserInfo).ClientBalanceByDay(_context.SettleDate, null);
}
_context.LogInfo("结束任务:结算客户资金");
if (PS.Config.ErpElement.UseSettleDataAcquisition)
{
SetTaskStep("配合数据采集,限额监控数据落地");
var service = new QuotaMonitorService(_context.UserInfo);
if (_context.IsCurrentDay)
{
service.EodSettlementExecute(_context.SettleDate);
}
service.EodSensitiveDataCalc(_context);
_context.LogInfo("结束任务:限额监控数据落地");
}
//todo:客户日终结算完成发送行权到期邮件提醒
tasks = new Task[2];
if (_request.IsSettleExchangeTrades)
{
tasks[0] = Task.Run(() =>
{
SetTaskStep("准备次日数据");
new EodDividenService(_context).Execute(eodPositionService.EodTradePositions);//t
});
}
if (_request.IsSettleOtcTrades)
{
tasks[1] = Task.Run(() =>
{
SetTaskStep("除权除息");
var otcTrades = _context.OtcTrades.Where(t => !ConsTrade.TradeCompleteStatus.Contains(t.TradeStatus)).ToList();
var tradeIds = otcTrades.Select(O => O.id);
var parentTradeIds = otcTrades.Where(O => O.ParentTradeId > 0 && !tradeIds.Contains(O.ParentTradeId)).Select(O => O.ParentTradeId).ToHashSet();
if (parentTradeIds.Any())
{
using var db = DbContextFactory.GetYLDbContext();
var parentTrades = new TradeDalService(_context.UserInfo).GetTradeOrEodTrade(parentTradeIds, _context.SettleDate);
otcTrades.AddRange(parentTrades);
}
new EodDividenService(_context).Execute(otcTrades);
});
}
WaitTasks(tasks);
}
_cancellationTokenSource.Token.ThrowIfCancellationRequested();
@@ -711,32 +551,6 @@ where {nameof(t.TaskStartTime)}>'{startDateStr}' and {nameof(t.TaskState)}={(int
//{
AddOrUpdateEodStatus(_request);
//}
//兴证日终持仓数据上传数据中心的FTP服务器
if (PS.Config.Company == CompanyEnum. && _context.IsCurrentDay)
{
Task.Run(() => XingZhengService.EodExecute(_context));
}
//日终数据采集
if (PS.Config.Company == CompanyEnum.)
{
Task.Run(() => ChangJiangService.EodExecute(_context, _request.VolType, _request.UseClosePrice ? "收盘价" : "结算价"));
}
//东证
if (PS.Config.Company == CompanyEnum.)
{
Task.Run(() => DongZhengService.EodExecute(_context));
}
//广发商贸
if (PS.Config.Company == CompanyEnum.广 && _request.VolType == "对冲" && _request.UseClosePrice)
{
Task.Run(() => GuangFaService.EodExecute(_context));
}
sw.Stop();
elapsedMilliseconds = sw.ElapsedMilliseconds;