fix: 修复基础费率平仓待结算费用按实际平仓规模分摊
This commit is contained in:
@@ -17,6 +17,17 @@ namespace YLErp.Modules.SwapModule
|
||||
return (decimal)method.Invoke(null, new object[] { position, unwindData });
|
||||
}
|
||||
|
||||
private static decimal InvokeCalcInitTradingFeePending(swap_position oriPosition, swap_position position, UnwindData unwindData)
|
||||
{
|
||||
var method = typeof(SwapDealService).GetMethod(
|
||||
"CalcInitTradingFeePending",
|
||||
BindingFlags.NonPublic | BindingFlags.Static);
|
||||
|
||||
Assert.IsNotNull(method, "CalcInitTradingFeePending was not found");
|
||||
|
||||
return (decimal)method.Invoke(null, new object[] { oriPosition, position, unwindData });
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void 百分比模式_按平仓名义本金计算并四舍五入到两位()
|
||||
{
|
||||
@@ -61,5 +72,49 @@ namespace YLErp.Modules.SwapModule
|
||||
Assert.AreEqual(0m, InvokeCalcInitTradingFee(null, new UnwindData()));
|
||||
Assert.AreEqual(0m, InvokeCalcInitTradingFee(new swap_position(), null));
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void BaseRatePendingFeeUsesTheSameActualCloseAmountAsCloseFee()
|
||||
{
|
||||
var oriPosition = new swap_position
|
||||
{
|
||||
PosiFeeType = 1,
|
||||
PosiTradingFeeUnit = 0.2m
|
||||
};
|
||||
oriPosition.PosiTradingFeePending = 2000m;
|
||||
var position = new swap_position { PosiTradingFeePending = 840m };
|
||||
var unwindData = new UnwindData { NotionalQty = 10000m, CloseQty = 3000m, CloseNotionalValue = 4200m };
|
||||
|
||||
var fee = InvokeCalcInitTradingFeePending(oriPosition, position, unwindData);
|
||||
|
||||
Assert.AreEqual(600m, fee);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void BaseRatePendingFeeAllocatesManuallyAdjustedOriginalPendingFee()
|
||||
{
|
||||
var oriPosition = new swap_position
|
||||
{
|
||||
PosiFeeType = 1,
|
||||
PosiTradingFeeUnit = 0.2m,
|
||||
PosiTradingFeePending = 1500m
|
||||
};
|
||||
var unwindData = new UnwindData { NotionalQty = 10000m, CloseQty = 3000m };
|
||||
|
||||
var fee = InvokeCalcInitTradingFeePending(oriPosition, new swap_position(), unwindData);
|
||||
|
||||
Assert.AreEqual(450m, fee);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void LegacyPendingFeeKeepsCurrentPositionValueWhenNoBaseRateIsConfigured()
|
||||
{
|
||||
var oriPosition = new swap_position { PosiTradingFeeUnit = 0m };
|
||||
var position = new swap_position { PosiTradingFeePending = 840m };
|
||||
|
||||
var fee = InvokeCalcInitTradingFeePending(oriPosition, position, new UnwindData());
|
||||
|
||||
Assert.AreEqual(840m, fee);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user