fix: 修复基础费率平仓待结算费用按实际平仓规模分摊

This commit is contained in:
tengyufan
2026-07-29 13:07:55 +08:00
parent 422507df8d
commit e1d68393f8
4 changed files with 123 additions and 2 deletions
+18 -1
View File
@@ -306,7 +306,7 @@ namespace YLErp.Modules.SwapModule
floatEvent.ContractSize = position.ContractSize;
floatEvent.TradingAmount = floatEvent.Quantity * floatEvent.ContractSize;
var ratio = position.PosiDirection == (int)SwapDirectionEnum. ? -1m : 1m;
floatEvent.TradingFeePending = position.PosiTradingFeePending;
floatEvent.TradingFeePending = CalcInitTradingFeePending(oriPosition, position, unwindData);
floatEvent.DataState = (int)SwapFlowDateStateEnum.;
floatEvent.InterestMode = position.InterestMode;
floatEvent.ClientId = td.ClientId;
@@ -330,6 +330,23 @@ namespace YLErp.Modules.SwapModule
return Math.Round(oriPosition.PosiTradingFeeUnit / 100m * unwindData.CloseNotionalValue, ConsGlobal.MoneyRound, MidpointRounding.AwayFromZero);
}
private static decimal CalcInitTradingFeePending(swap_position oriPosition, swap_position position, UnwindData unwindData)
{
if (oriPosition == null || unwindData == null || oriPosition.PosiTradingFeeUnit == 0)
{
return position?.PosiTradingFeePending ?? 0;
}
var closeBase = oriPosition.PosiFeeType == 1 ? unwindData.CloseQty : unwindData.CloseNotionalValue;
var originalBase = oriPosition.PosiFeeType == 1 ? unwindData.NotionalQty : unwindData.NotionalValue;
if (originalBase <= 0)
{
return position?.PosiTradingFeePending ?? 0;
}
return Math.Round(oriPosition.PosiTradingFeePending * closeBase / originalBase, ConsGlobal.MoneyRound, MidpointRounding.AwayFromZero);
}
/// <summary>
/// 校验上日是否收盘
/// </summary>