fix: 统一互换部分平仓交易费用与待结算费用的分摊舍入

This commit is contained in:
tengyufan
2026-07-29 13:47:45 +08:00
parent e1d68393f8
commit 8c4f452482
4 changed files with 79 additions and 22 deletions
@@ -34,10 +34,12 @@ namespace YLErp.Modules.SwapModule
var position = new swap_position
{
PosiFeeType = 0,
PosiTradingFeeUnit = 0.1234m
PosiTradingFeeUnit = 0.1234m,
PosiTradingFeePending = 1234.00m
};
var unwindData = new UnwindData
{
NotionalValue = 1_000_000m,
CloseNotionalValue = 1_000_000m,
CloseQty = 8888m
};
@@ -53,10 +55,12 @@ namespace YLErp.Modules.SwapModule
var position = new swap_position
{
PosiFeeType = 1,
PosiTradingFeeUnit = 1.235m
PosiTradingFeeUnit = 1.235m,
PosiTradingFeePending = 12.35m
};
var unwindData = new UnwindData
{
NotionalQty = 10m,
CloseNotionalValue = 1_000_000m,
CloseQty = 10m
};
@@ -106,6 +110,30 @@ namespace YLErp.Modules.SwapModule
Assert.AreEqual(450m, fee);
}
[TestMethod]
public void PartialCloseTradingFeeAndPendingFeeUseTheSameRoundedOriginalFeeAllocation()
{
var oriPosition = new swap_position
{
PosiFeeType = 0,
PosiTradingFeeUnit = 1.1234m,
PosiTradingFeePending = 113.46m
};
var unwindData = new UnwindData
{
NotionalValue = 10098m,
CloseNotionalValue = 4039.2m,
NotionalQty = 10000m,
CloseQty = 4000m
};
var tradingFee = InvokeCalcInitTradingFee(oriPosition, unwindData);
var pendingFee = InvokeCalcInitTradingFeePending(oriPosition, new swap_position(), unwindData);
Assert.AreEqual(45.38m, tradingFee);
Assert.AreEqual(45.38m, pendingFee);
}
[TestMethod]
public void LegacyPendingFeeKeepsCurrentPositionValueWhenNoBaseRateIsConfigured()
{