TRS-ZS-546 资金监控增加费用及利息
This commit is contained in:
@@ -1,10 +1,12 @@
|
||||
using Newtonsoft.Json;
|
||||
using NPOI.SS.Formula.Functions;
|
||||
using NPOI.SS.UserModel;
|
||||
using Org.BouncyCastle.Asn1.Ocsp;
|
||||
using YieldChain.Helpers;
|
||||
using YLErp.BLL;
|
||||
using YLErp.BLL.MarginCalculation;
|
||||
using YLErp.Configuration;
|
||||
using YLErp.DBModels;
|
||||
using YLErp.DBModels.Enums;
|
||||
using YLErp.Helpers;
|
||||
using YLErp.Model;
|
||||
@@ -37,7 +39,7 @@ namespace YLErp.Modules.EodModule.SettlementModule
|
||||
|
||||
var currencyCodes = _context.CurrencyCodes;
|
||||
var currencyProvider = _context.EodCurrencyProvider;
|
||||
|
||||
List<int> marginTypes = new List<int>() { (int)InterestModeEnum.追加预付金, (int)InterestModeEnum.初始预付金 };
|
||||
//预付金可取上浮比率
|
||||
var marginRatio = _context.SystemValue.MarginRatio ?? 0.15;
|
||||
var marginMaxRatio = marginRatio + 0.02;
|
||||
@@ -123,7 +125,7 @@ namespace YLErp.Modules.EodModule.SettlementModule
|
||||
join t in DbContext.trade.Where(x => x.TradeType == "收益互换" && x.ValidState != ConsGlobal.InValid && ConsTrade.TradeStatusAfterConfirmed.Contains(x.TradeStatus) && x.StartDate <= balanceDate) on eod.SwapTradeId equals t.id
|
||||
select eod;
|
||||
// 互换合约估值持仓信息
|
||||
var eodSwapPosiQuery = from eod in DbContext.eod_swap_position.Where(x => x.ValueDate <= balanceDate && x.ValueDate >= preBalanceDate&&x.PosiDirection>0)
|
||||
var eodSwapPosiQuery = from eod in DbContext.eod_swap_position.Where(x => x.ValueDate <= balanceDate && x.ValueDate >= preBalanceDate)
|
||||
join t in DbContext.trade.Where(x => x.TradeType == "收益互换" && x.ValidState != ConsGlobal.InValid && ConsTrade.TradeStatusAfterConfirmed.Contains(x.TradeStatus) && x.StartDate <= balanceDate) on eod.SwapTradeId equals t.id
|
||||
select eod;
|
||||
var positionList = DbContext.trade.Where(t => (ConsTrade.TradeStatusAfterConfirmed.Contains(t.TradeStatus)||t.UnWindDate> balanceDate) && t.ValidState != "InValid"&&t.TradeType=="收益互换");
|
||||
@@ -136,7 +138,11 @@ namespace YLErp.Modules.EodModule.SettlementModule
|
||||
StructureType = t.StructureType,
|
||||
marin = s.InterestPrincipalFix * (s.InterestDirection == 1 ? -1m : 1m)
|
||||
};
|
||||
|
||||
// 互换平仓信息
|
||||
var clientEventFlowQuery = from eod in DbContext.swap_flow_event.Where(x => x.EventDate <= balanceDate && x.EventDate > preBalanceDate && x.DataState == (int)SwapFlowDateStateEnum.完成 && x.EventType == (int)SwapFlowEventTypeEnum.平仓)
|
||||
join t in DbContext.trade.Where(x => x.TradeType == "收益互换" && x.ValidState != ConsGlobal.InValid && ConsTrade.TradeStatusAfterConfirmed.Contains(x.TradeStatus) && x.TradeDate <= balanceDate) on eod.SwapTradeId equals t.id
|
||||
select eod;
|
||||
var clientEventFlows = clientEventFlowQuery.ToList();
|
||||
var eodSwaps = eodSwapQuery.ToList();
|
||||
var eodSwapPosis = eodSwapPosiQuery.ToList();
|
||||
if (reqClientIds != null && reqClientIds.Any())
|
||||
@@ -144,6 +150,7 @@ namespace YLErp.Modules.EodModule.SettlementModule
|
||||
eodSwaps = eodSwaps.Where(t => reqClientIds.Contains(t.ClientId)).ToList();
|
||||
eodSwapPosis= eodSwapPosis.Where(t => reqClientIds.Contains(t.ClientId)).ToList();
|
||||
marignQuery = marignQuery.Where(t => reqClientIds.Contains(t.ClientId));
|
||||
clientEventFlows.Where(t => reqClientIds.Contains(t.ClientId??0));
|
||||
}
|
||||
var swapIds = eodSwaps.Select(s => s.SwapTradeId);
|
||||
var todaySwapTrades = DbContext.trade.Where(t => swapIds.Contains(t.id)).ToList();
|
||||
@@ -297,6 +304,10 @@ namespace YLErp.Modules.EodModule.SettlementModule
|
||||
var PFE = 0d;
|
||||
//互换存续预付金
|
||||
var SwapMarinAmount = 0d;
|
||||
//交易费用
|
||||
var tradeFee= 0d;
|
||||
//利息盈亏
|
||||
var interestPnl= 0d;
|
||||
//
|
||||
ClientBalanceDaily clientbalancedaily = null;
|
||||
#endregion
|
||||
@@ -807,11 +818,9 @@ namespace YLErp.Modules.EodModule.SettlementModule
|
||||
foreach (var item in clientEodSwapsLast)
|
||||
{
|
||||
var lastEodSwap = eodSwaps.FirstOrDefault(t => t.SwapTradeId == item.SwapTradeId && t.ValueDate == preBalanceDate);
|
||||
var lastEodSwapPosition = eodSwapPosis.FirstOrDefault(t => t.SwapTradeId == item.SwapTradeId && t.ValueDate == preBalanceDate&&t.PosiStartDate<= preBalanceDate);
|
||||
var eodSwapPosition = clientEodSwapPositionLast.FirstOrDefault(t => t.SwapTradeId == item.SwapTradeId && t.ValueDate == balanceDate && t.PosiStartDate <= balanceDate);
|
||||
item.PostionValue=Math.Round(item.PostionValue, ConsGlobal.MoneyRound,MidpointRounding.AwayFromZero);
|
||||
PotentialSurpluses += Convert.ToDouble(item.PostionValue) * (-1);
|
||||
// WinLoss += Convert.ToDouble(item.TdRealizedPnL) * (-1);
|
||||
// WinLoss += Convert.ToDouble(item.TdRealizedPnL) * (-1);
|
||||
var lastPv = lastEodSwap != null ? Convert.ToDouble(lastEodSwap.PostionValue) * (-1) : 0;
|
||||
eodPnlSum.LastPvSum = eodPnlSum.LastPvSum.HasValue ? eodPnlSum.LastPvSum + lastPv : lastPv;
|
||||
var pnl = item.PostionValue;
|
||||
@@ -827,6 +836,17 @@ namespace YLErp.Modules.EodModule.SettlementModule
|
||||
DailyPnl += Convert.ToDouble(pnl - lastPnl + item.TdRealizedPnL) * (-1);
|
||||
//PayableMargin += Convert.ToDouble(item.InitMarginLoss + item.InitMarginGain+ item.PostionMarginLoss + item.PostionMarginGain);
|
||||
}
|
||||
var clientEventFlowList = clientEventFlows.Where(x=>x.ClientId== client.id);
|
||||
foreach (var item in clientEventFlowList.GroupBy(x => x.SwapTradeId))
|
||||
{
|
||||
var eventPosi = item.FirstOrDefault(t => t.PayDirection > 0);
|
||||
|
||||
var eventInterests = item.Where(t => t.PayDirection == 0).ToList();
|
||||
|
||||
interestPnl += Convert.ToDouble(eventInterests.Sum(x=>x.InterestClosePnL)) * (-1);
|
||||
|
||||
tradeFee += Convert.ToDouble(eventPosi.TradingFee + eventPosi.TradingFeePending) * (-1);
|
||||
}
|
||||
var clientmarignQuery = marignQuery.Where(x => x.ClientId == client.id&&x.StructureType!="多空组合");
|
||||
SwapMarinAmount = Convert.ToDouble(clientmarignQuery.Sum(s => s.marin));
|
||||
#endregion
|
||||
@@ -963,6 +983,8 @@ namespace YLErp.Modules.EodModule.SettlementModule
|
||||
clientbalancedaily.ExerciseBalance = ExerciseBalance;
|
||||
clientbalancedaily.AdvisableMargin = AdvisableMargin;
|
||||
clientbalancedaily.TotalNominal = TotalNominal;
|
||||
clientbalancedaily.trade_fee = tradeFee;
|
||||
clientbalancedaily.interest_pnl = interestPnl;
|
||||
clientbalancedaily.Pv = clientPv ?? 0;
|
||||
clientbalancedaily.RoundedPv = roundedClientPv ?? 0;
|
||||
clientbalancedaily.SellPv = clientSellPv ?? 0;
|
||||
@@ -1067,6 +1089,8 @@ namespace YLErp.Modules.EodModule.SettlementModule
|
||||
clientbalancedaily.CouponSum = clientbalancedaily.Coupon;
|
||||
clientbalancedaily.SwapBalanceSum = clientbalancedaily.SwapBalance;
|
||||
clientbalancedaily.WinLossSum = clientbalancedaily.WinLoss;
|
||||
clientbalancedaily.trade_fee_sum = clientbalancedaily.trade_fee;
|
||||
clientbalancedaily.interest_pnl_sum = clientbalancedaily.interest_pnl;
|
||||
clientbalancedaily.EndPremiumSum = clientbalancedaily.EndPremium;
|
||||
clientbalancedaily.CashInCashOutProductChangeSum = clientbalancedaily.CashInCashOutProductChange;
|
||||
|
||||
@@ -1134,6 +1158,8 @@ namespace YLErp.Modules.EodModule.SettlementModule
|
||||
clientbalancedaily.CouponSum += clientbalancedailyPre.CouponSum;
|
||||
clientbalancedaily.SwapBalanceSum += clientbalancedailyPre.SwapBalanceSum;
|
||||
clientbalancedaily.WinLossSum += clientbalancedailyPre.WinLossSum;
|
||||
clientbalancedaily.trade_fee_sum += clientbalancedailyPre.trade_fee_sum??0;
|
||||
clientbalancedaily.interest_pnl_sum += clientbalancedailyPre.interest_pnl_sum??0;
|
||||
clientbalancedaily.EndPremiumSum += (clientbalancedailyPre.EndPremiumSum ?? 0);
|
||||
clientbalancedaily.CashInCashOutProductChangeSum += clientbalancedailyPre.CashInCashOutProductChangeSum;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user