feat(swap): 添加基金现金分红处理功能
- 实现 ApplyFundCashDividends 方法处理基金现金分红逻辑 - 现金分红在生效日 EOD 即执行,计入已实现分红字段 - 从盯市盈亏中分离分红金额,避免收益重复计算 - 更新测试用例验证现金分红正确记入已实现分红 - 修正测试方法名称反映实际功能变更 - 完善单元测试验证分红金额计算准确性
This commit is contained in:
@@ -107,6 +107,11 @@ namespace YLErp.Modules.SwapModule
|
||||
flowEvents,
|
||||
dividendInfos.ToDictionary(x => x.UnderlyingCode, StringComparer.OrdinalIgnoreCase),
|
||||
SettleDate);
|
||||
ApplyFundCashDividends(
|
||||
positions,
|
||||
previousEodPositions,
|
||||
dividendInfos.ToDictionary(x => x.UnderlyingCode, StringComparer.OrdinalIgnoreCase),
|
||||
SettleDate);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -327,7 +332,7 @@ namespace YLErp.Modules.SwapModule
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void SPC_FUND_002_现金分红_只调整价格不生成分红流水()
|
||||
public void SPC_FUND_002_现金分红_收盘时记入已实现分红()
|
||||
{
|
||||
var td = CreateTrade();
|
||||
var position = CreateFloatPosition(1, 1000m);
|
||||
@@ -342,22 +347,20 @@ namespace YLErp.Modules.SwapModule
|
||||
new List<swap_flow_event>(),
|
||||
price: 100m);
|
||||
service.ExDividendInfos.Add(CreateFundCorporateAction(cashAmount: 10m));
|
||||
var actual = previousEod.Clone();
|
||||
actual.ValueDate = SettleDate;
|
||||
actual.UnderlyingPrice = 100m;
|
||||
service.ExecuteSwapPositionCompose(SettleDate, PreSettleDate);
|
||||
|
||||
service.ExecuteFundCorporateActions(
|
||||
new[] { actual },
|
||||
new[] { previousEod },
|
||||
Array.Empty<swap_flow_event>(),
|
||||
service.ExDividendInfos);
|
||||
var actual = service.CreatedEodPositions.Single(x => x.PositionId == 1);
|
||||
|
||||
Assert.AreEqual(1000m, actual.PosiQuantity);
|
||||
Assert.AreEqual(0m, actual.TdChangedQty);
|
||||
Assert.AreEqual(99m, actual.PosiGrossPrice);
|
||||
Assert.AreEqual(0m, actual.TdPosiDividend);
|
||||
Assert.AreEqual(1000m, actual.TdPosiDividend);
|
||||
Assert.AreEqual(0m, actual.PosiDividendSum);
|
||||
Assert.AreEqual(99000m, actual.PosiNotionalValue);
|
||||
Assert.AreEqual(0m, actual.PosiMtmPnL);
|
||||
Assert.AreEqual(0m, actual.PosiProfitSum);
|
||||
Assert.AreEqual(1000m, actual.RealizedDividend);
|
||||
Assert.AreEqual(1000m, actual.RealizedPnl);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
|
||||
Reference in New Issue
Block a user