Merge remote-tracking branch 'origin/glms/feature/1.4.2' into glms/feature/1.4.2
This commit is contained in:
@@ -267,9 +267,7 @@ namespace YLErp.Modules.SwapModule
|
||||
// 占期初(original)语义(A):默认"平掉剩余全部持仓" = 剩余名义本金/期初名义本金。
|
||||
// 未平仓时 PosiNotionalValue==NotionalValue → 1(平100%);部分平仓后自动变为剩余比例(如已平10%则默认90%)。
|
||||
// 与互换/提前终止 InitIncome(L447) 保持一致。
|
||||
unwindData.ClosePercent = unwindData.NotionalValue > 0
|
||||
? unwindData.PosiNotionalValue / unwindData.NotionalValue
|
||||
: 1;
|
||||
unwindData.ClosePercent = CalcDefaultInitClosePercent(unwindData.NotionalValue, unwindData.PosiNotionalValue);
|
||||
unwindData.CloseNotionalValue = unwindData.PosiNotionalValue;
|
||||
unwindData.CloseQty = unwindData.PositionQty;
|
||||
if (position != null)
|
||||
@@ -755,6 +753,18 @@ namespace YLErp.Modules.SwapModule
|
||||
return remainingClosePercent * posiNotionalValue / notionalValue;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 计算 InitUnwind 默认占期初(A)平仓比例 = "平掉剩余全部持仓"对应的占期初比例。
|
||||
/// 即:ClosePercent(A) = PosiNotionalValue / NotionalValue。
|
||||
/// 未平仓时 PosiNotionalValue==NotionalValue → 1(平100%);
|
||||
/// 部分平仓后自动变为剩余比例(如已平 30% 则默认 0.7)。
|
||||
/// 与互换/提前终止 InitIncome 保持一致。抽出为纯函数以支持无库单测。
|
||||
/// </summary>
|
||||
public static decimal CalcDefaultInitClosePercent(decimal notionalValue, decimal posiNotionalValue)
|
||||
{
|
||||
return notionalValue > 0 ? posiNotionalValue / notionalValue : 1;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取固定利率
|
||||
/// </summary>
|
||||
|
||||
@@ -2069,11 +2069,12 @@ namespace YLErp.Modules.SwapModule
|
||||
/// 浮动腿及普通利息腿维持数据库记录的方向;初始/追加预付金腿的利息
|
||||
/// 则与保证金本金方向相反。这样“收取对手方保证金”产生的利息会作为
|
||||
/// 我方支付给对手方的成本计入,而不会错误增加框架合约已实现收益。
|
||||
/// 抽为静态纯函数以支持无库单测(marginTypes 等价于 ConsTrade.InterestMarginModels)。
|
||||
/// </summary>
|
||||
private decimal CalculateSwapRealizedPnl(eod_swap_position position)
|
||||
public static decimal CalculateSwapRealizedPnl(eod_swap_position position)
|
||||
{
|
||||
var interestRatio = position.InterestDirection == (int)SwapDirectionEnum.收取 ? 1m : -1m;
|
||||
if (marginTypes.Contains(position.InterestMode))
|
||||
if (ConsTrade.InterestMarginModels.Contains(position.InterestMode))
|
||||
{
|
||||
interestRatio = -interestRatio;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user