feature: 结算报告单中字段取值
This commit is contained in:
@@ -70,8 +70,7 @@ public static class SwapSettlementBillRowBuilder
|
||||
?? throw new ServiceException("结算单缺少支付日");
|
||||
|
||||
// 将同一事件的普通利息与预付金利息分开;预付金本金仅统计结算日前已生效的腿。
|
||||
var floatingPosition = positions.FirstOrDefault(x => x.PositionType > 0)
|
||||
?? positions.FirstOrDefault(x => !ConsTrade.InterestMarginModels.Contains(x.InterestMode));
|
||||
var settlementPosition = positions.FirstOrDefault(x => x.id == input.CloseFlow.PositionId);
|
||||
var interestEvents = eventFlows
|
||||
.Where(x => ConsTrade.InterestModels.Contains(x.InterestMode))
|
||||
.ToList();
|
||||
@@ -91,10 +90,12 @@ public static class SwapSettlementBillRowBuilder
|
||||
var periodAmount = -input.CloseFlow.DividendIn;
|
||||
var initialMargin = SumMargin(effectiveMargins, InterestModeEnum.初始预付金);
|
||||
var additionalMargin = SumMargin(effectiveMargins, InterestModeEnum.追加预付金);
|
||||
var marginBackAmount = marginEvents.Sum(x => x.InterestPrincipal);
|
||||
|
||||
// 净额结算按实际轧差项求和;到期结算在净额基础上返还或收取期初、追加预付金。
|
||||
var netSettlementAmount = interestAmount + floatingAmount + fee + marginInterest
|
||||
+ (input.IncludePeriodPaymentInNetting ? periodAmount : 0m);
|
||||
// 沿用原结算单口径:全部事件利息、浮动盈亏和预付金返还本金参与净额结算。
|
||||
var netSettlementAmount = -eventFlows.Sum(x => x.InterestClosePnL)
|
||||
- input.CloseFlow.FloatPnlSum
|
||||
+ marginBackAmount;
|
||||
var maturitySettlementAmount = netSettlementAmount + initialMargin + additionalMargin;
|
||||
var floatRateAbs = input.CloseNotionalValue == 0m
|
||||
? 0m
|
||||
@@ -119,17 +120,17 @@ public static class SwapSettlementBillRowBuilder
|
||||
InterestRate = interestEvents.Sum(x => x.InterestRate).ToString("0.00%"),
|
||||
PosiNotionalValue = input.CloseNotionalValue.ToString("0.00"),
|
||||
Quantity = input.CloseFlow.Quantity.ToString("0.00"),
|
||||
DividendIn = isCashBond ? periodAmount.ToString("0.00") : string.Empty,
|
||||
DividendIn = periodAmount.ToString("0.00"),
|
||||
PeriodDividend = isEtf ? periodAmount.ToString("0.00") : string.Empty,
|
||||
PosiNetPrice = ((floatingPosition?.PosiGrossPrice ?? 0m) * 100m).ToString("0.00000000"),
|
||||
PosiNetPrice = ((settlementPosition?.PosiGrossPrice ?? 0m) * 100m).ToString("0.00000000"),
|
||||
InitYtm = isCashBond && input.Trade.InitYtm.HasValue
|
||||
? input.Trade.InitYtm.Value.ToString("0.####%")
|
||||
: string.Empty,
|
||||
ClosePrice = (input.CloseFlow.TradingAmountAvg * 100m).ToString("0.00000000"),
|
||||
ExitYtm = isCashBond && input.ExitYtm.HasValue
|
||||
ExitYtm = input.ExitYtm.HasValue
|
||||
? input.ExitYtm.Value.ToString("0.0000")
|
||||
: string.Empty,
|
||||
RateDays = Math.Max(0, (eventDate - startDate).Days + 1).ToString(),
|
||||
RateDays = Math.Max(0, (eventDate - startDate).Days).ToString(),
|
||||
FloatRateAbs = floatRateAbs.ToString("0.0000%"),
|
||||
FloatRate = floatRateAbs.ToString("0.0000%"),
|
||||
InterestAmount = interestAmount.ToString("0.00"),
|
||||
|
||||
Reference in New Issue
Block a user