收盘去掉标的交易的pv

This commit is contained in:
吴方海
2025-06-24 11:32:35 +08:00
parent 64caeea7de
commit 3935d46b0d
2 changed files with 7 additions and 44 deletions
@@ -1281,7 +1281,7 @@ namespace YLErp.BLL.Eod
var posiQty = eodPosi?.PosiQuantity ?? 0;
var flowEvents = swapFlowEvents.Where(x => x.SwapTradeId == item.Key).ToList();
var unwindQty = flowEvents.Sum(s => s.Quantity);
var pnl = lastEodSwap.PostionValue- eodPosi?.VTradingFee+eodPosi?.PosiFeePending;
var pnl = lastEodSwap.PostionValue;
decimal unwindPercent = 0;
if (unwindQty != 0)
{
@@ -112,13 +112,6 @@ namespace YLErp.Modules.EodModule.SettlementModule
{
eodRiskList = eodRiskList.Where(t => reqClientIds.Contains(t.ClientId)).ToList();
}
//获取所有用户当日Eod_pnl
IEnumerable<EodTradePosition> eodpnlList = DbContext.eod_trade_position.Where(t => t.ValueDate == balanceDate && t.TradeType != "收益互换").ToList();
if (reqClientIds != null && reqClientIds.Any())
{
eodpnlList = eodpnlList.Where(t => reqClientIds.Contains(t.ClientId)).ToList();
}
//获取客户导入的所有持仓信息 -- 收益互换(国君)
var EodPositionSwapMannual = DbContext.eod_trade_position_swap_mannual.Where(x => x.ValueDate == balanceDate).ToList();
if (reqClientIds != null && reqClientIds.Any())
@@ -728,8 +721,6 @@ namespace YLErp.Modules.EodModule.SettlementModule
CopeWithExpirePremium = OptionPremium + OptionPremiumSwap;
//应付存续权利金
CopeWithLastPremium = FrozenPremium;
//获取客户持仓交易的pv以及浮动盈亏
var eodpnlQuery = eodpnlList.Where(t => positionTradeIds.Contains(t.TradeId));
//未了结名义成交金额 todo //持仓的买入 以及卖出是否都统计
TotalNominal = positionTrades == null || positionTrades.Count == 0 ? 0 : positionTrades.Sum(t => t.UnderlyingInstrumentType == "Stock" ? t.StockEqvNotional : (t.Notional * (t.SpotPrice ?? 0.0)));
@@ -810,34 +801,6 @@ namespace YLErp.Modules.EodModule.SettlementModule
EndPremium = todayFinishedTrades.Sum(t => t.TradeType != "远期" ? -TradeCalcHelper.GetSign(t.BuySell) * (t.TradePrice ?? 0) * finishedTradeNotionalPercentDic[t.id] : (t.TradePrice ?? 0) * finishedTradeNotionalPercentDic[t.id]) * -1;
EndPremium = EndPremium + todaySwapFinishedCash.Sum(s => s.Money ?? 0);
var eodPnlSum = new EodPnlGridSum();
if (eodpnlQuery.Any())
{
eodPnlSum.LastPvSum = eodpnlQuery.Sum(q => q.LastPv) * (-1);//昨日价值
eodPnlSum.PvSum = eodpnlQuery.Sum(q => q.Pv) * (-1);//当日价值
eodPnlSum.SellPvSum = eodpnlQuery.Where(x => x.BuySell == "买入").Sum(q => q.Pv) * (-1);//当日价值
eodPnlSum.RoundedPvSum = eodpnlQuery.Sum(q => q.RoundedPv) * (-1);//当日四舍五入价值
if (_context.SystemValue.PotentialSurplusCalcMode == valuedate.PotentialSurplusCalcMode_Pv)
{
PotentialSurpluses = eodPnlSum.PvSum ?? 0;
}
PositionPnl = eodpnlQuery.Sum(q => q.PositionPnL) * (-1);
RoundedPositionPnl = eodpnlQuery.Sum(q => q.RoundedPositionPnL) * (-1);
TotalPnl = eodpnlQuery.Sum(q => q.TotalPnL) * (-1);
#region =max(*(-), 0) , Pnl合计
var singlePositionPnlTotal = eodpnlQuery.Where(x => x.TradeType != "结构化交易" && x.ParentTradeId == 0).Sum(n => n.BuySell == "买入" ? Math.Max(-n.PositionPnL, 0) : 0);
ClientSellPositionPnl = singlePositionPnlTotal;
#endregion
}
if (eodpnlList.Where(t => t.ClientId == client.id).Any())
{
eodPnlSum.DailyPnLSum = eodpnlList.Where(t => t.ClientId == client.id).Sum(q => q.DailyPnL) * (-1);//当日浮动盈亏
DailyPnl = eodpnlList.Where(t => t.ClientId == client.id).Sum(q => q.DailyPnL) * (-1);
}
#region V2
var clientEodSwapsLast = clientEodSwaps.ToList();
var clientEodSwapPositionLast = clientEodSwapPosis.ToList();
@@ -848,13 +811,13 @@ namespace YLErp.Modules.EodModule.SettlementModule
var eodSwapPosition = clientEodSwapPositionLast.FirstOrDefault(t => t.SwapTradeId == item.SwapTradeId && t.ValueDate == balanceDate && t.PosiStartDate <= balanceDate);
PotentialSurpluses += Convert.ToDouble(item.PostionValue) * (-1);
// WinLoss += Convert.ToDouble(item.TdRealizedPnL) * (-1);
var lastPv = lastEodSwap != null ? Convert.ToDouble(lastEodSwap.PostionValue- lastEodSwapPosition?.VTradingFee+lastEodSwapPosition?.PosiFeePending) * (-1) : 0;
var lastPv = lastEodSwap != null ? Convert.ToDouble(lastEodSwap.PostionValue) * (-1) : 0;
eodPnlSum.LastPvSum = eodPnlSum.LastPvSum.HasValue ? eodPnlSum.LastPvSum + lastPv : lastPv;
var pnl = item.PostionValue- eodSwapPosition?.VTradingFee+ eodSwapPosition?.PosiFeePending;
eodPnlSum.PvSum = eodPnlSum.PvSum.HasValue ? eodPnlSum.PvSum - Convert.ToDouble(item.PostionValue) : Convert.ToDouble(item.PostionValue) * (-1);
eodPnlSum.SellPvSum = eodPnlSum.SellPvSum.HasValue ? eodPnlSum.SellPvSum - Convert.ToDouble(item.MarketValueShort) : Convert.ToDouble(item.MarketValueShort) * (-1);
eodPnlSum.RoundedPvSum = eodPnlSum.RoundedPvSum.HasValue ? eodPnlSum.RoundedPvSum - Math.Round(Convert.ToDouble(item.PostionValue), 2) : Math.Round(Convert.ToDouble(item.PostionValue), 2) * (-1);
eodPnlSum.DailyPnLSum = eodPnlSum.DailyPnLSum.HasValue ? eodPnlSum.DailyPnLSum - Convert.ToDouble(item.TdRealizedPnL) : Convert.ToDouble(item.TdRealizedPnL) * (-1);
var pnl = item.PostionValue;
eodPnlSum.PvSum = Convert.ToDouble(item.PostionValue) * (-1);
eodPnlSum.SellPvSum = Convert.ToDouble(item.MarketValueShort) * (-1);
eodPnlSum.RoundedPvSum = Math.Round(Convert.ToDouble(item.PostionValue), 2) * (-1);
eodPnlSum.DailyPnLSum = Convert.ToDouble(item.TdRealizedPnL) * (-1);
PositionPnl += Convert.ToDouble(pnl) * (-1);
RoundedPositionPnl += Math.Round(Convert.ToDouble(pnl), 2) * (-1);
TotalPnl += Convert.ToDouble(item.RealizedPnL) * (-1);