fix(swap): 修复期末头寸已实现盈亏计算问题
- 在新创建的期末付款头寸中添加已实现盈亏字段计算 - 对历史数据的利息和已实现利息进行符号标准化处理 - 添加预付金腿利息方向与保证金本金方向的反向逻辑 - 兼容修复前已落库的利息腿数据缺失已实现盈亏字段问题 - 统一风险报表按绝对金额和业务方向的数据口径
This commit is contained in:
@@ -1023,6 +1023,7 @@ namespace YLErp.Modules.SwapModule
|
|||||||
//累计已实现
|
//累计已实现
|
||||||
newEodPayPosition.RealizedInterest = eodPayPosition.RealizedInterest + newEodPayPosition.TdCloseInterest * ratio;
|
newEodPayPosition.RealizedInterest = eodPayPosition.RealizedInterest + newEodPayPosition.TdCloseInterest * ratio;
|
||||||
newEodPayPosition.RealizedInterestFee = eodPayPosition.RealizedInterestFee + newEodPayPosition.TdCloseInterestFee;
|
newEodPayPosition.RealizedInterestFee = eodPayPosition.RealizedInterestFee + newEodPayPosition.TdCloseInterestFee;
|
||||||
|
newEodPayPosition.RealizedPnl = newEodPayPosition.RealizedInterest + newEodPayPosition.RealizedInterestFee;
|
||||||
var currencyRate = GetCurrencyRate(td.QuoteCurrency, td.SettlementCurrency, valueDate, true,
|
var currencyRate = GetCurrencyRate(td.QuoteCurrency, td.SettlementCurrency, valueDate, true,
|
||||||
position.InterestDirection == (int)SwapDirectionEnum.收取 ? CurrencyRateType.Buy : CurrencyRateType.Sell);
|
position.InterestDirection == (int)SwapDirectionEnum.收取 ? CurrencyRateType.Buy : CurrencyRateType.Sell);
|
||||||
newEodPayPosition.TdCurrency = Convert.ToDecimal(currencyRate);
|
newEodPayPosition.TdCurrency = Convert.ToDecimal(currencyRate);
|
||||||
@@ -2178,6 +2179,22 @@ namespace YLErp.Modules.SwapModule
|
|||||||
item.eodPosition.PosiNetFeePrice *= multiplier;
|
item.eodPosition.PosiNetFeePrice *= multiplier;
|
||||||
item.eodPosition.PosiNetNoFeePrice *= multiplier;
|
item.eodPosition.PosiNetNoFeePrice *= multiplier;
|
||||||
item.eodPosition.UnderlyingPrice *= multiplier;
|
item.eodPosition.UnderlyingPrice *= multiplier;
|
||||||
|
if (item.eodPosition.InterestDirection > 0)
|
||||||
|
{
|
||||||
|
// 历史数据的 TdCloseInterest、RealizedInterest 存在两种符号口径,
|
||||||
|
// 风险报表统一按绝对金额和业务方向还原:普通利息腿收取为正、支付为负,
|
||||||
|
// 预付金腿的利息方向与保证金本金方向相反。
|
||||||
|
var interestRatio = item.eodPosition.InterestDirection == (int)SwapDirectionEnum.收取 ? 1m : -1m;
|
||||||
|
if (ConsTrade.InterestMarginModels.Contains(item.eodPosition.InterestMode))
|
||||||
|
{
|
||||||
|
interestRatio = -interestRatio;
|
||||||
|
}
|
||||||
|
item.eodPosition.TdCloseInterest = Math.Abs(item.eodPosition.TdCloseInterest) * interestRatio;
|
||||||
|
item.eodPosition.RealizedInterest = Math.Abs(item.eodPosition.RealizedInterest) * interestRatio;
|
||||||
|
// 兼容修复前已落库的利息腿:当时只累计了明细字段,未同步写入 RealizedPnl。
|
||||||
|
item.eodPosition.RealizedPnl = item.eodPosition.RealizedInterest
|
||||||
|
+ item.eodPosition.RealizedInterestFee;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return retListResult;
|
return retListResult;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user