fix(swap): 修复债券结息价差盈亏计算逻辑
- 将价差盈亏计算从使用CloseNotionalValue改为使用PositionQty和ContractSize - 更新前端JavaScript代码中的计算公式,按持仓数量和合约乘数计算价差盈亏 - 在UnwindInput模型中添加PositionQty和ContractSize字段 - 修正后台计算服务中的数据映射逻辑 - 添加FC_009测试用例验证债券价差按数量计算的正确性 - 更新现有测试用例的输入参数以匹配新的计算方式
This commit is contained in:
@@ -222,7 +222,8 @@ describe('交叉校验:对齐 C# FrontendCalcCharacterizationTest 金标准',
|
||||
test('FC_006 结息 债券多头 全量', () => {
|
||||
const r = SwapCalc.calcIncome({
|
||||
multiplier: 100, posiGrossPrice: 1.02, tradingAmountAvg: 105,
|
||||
closeNotionalValue: 10000, closeQty: 0, payDirection: 1, positionType: 1,
|
||||
positionQty: 10000, contractSize: 1,
|
||||
closeNotionalValue: 10200, closeQty: 0, payDirection: 1, positionType: 1,
|
||||
tradingFee: '0', tradingFeePending: '0', dividendIn: '0'
|
||||
});
|
||||
expectClose(r.MarkClosePnl, 300, 'income MarkClosePnl');
|
||||
@@ -233,7 +234,8 @@ describe('交叉校验:对齐 C# FrontendCalcCharacterizationTest 金标准',
|
||||
test('FC_007 结息 改标的价格', () => {
|
||||
const r = SwapCalc.calcIncome({
|
||||
multiplier: 100, posiGrossPrice: 1.02, tradingAmountAvg: 110,
|
||||
closeNotionalValue: 10000, closeQty: 0, payDirection: 1, positionType: 1,
|
||||
positionQty: 10000, contractSize: 1,
|
||||
closeNotionalValue: 10200, closeQty: 0, payDirection: 1, positionType: 1,
|
||||
tradingFee: '0', tradingFeePending: '0', dividendIn: '0'
|
||||
});
|
||||
expectClose(r.MarkClosePnl, 800, '改价格后 income MarkClosePnl');
|
||||
@@ -243,7 +245,8 @@ describe('交叉校验:对齐 C# FrontendCalcCharacterizationTest 金标准',
|
||||
test('FC_008 结息 含利息腿与预付金腿 总额', () => {
|
||||
const r = SwapCalc.calcIncome({
|
||||
multiplier: 100, posiGrossPrice: 1.02, tradingAmountAvg: 105,
|
||||
closeNotionalValue: 10000, closeQty: 0, payDirection: 1, positionType: 1,
|
||||
positionQty: 10000, contractSize: 1,
|
||||
closeNotionalValue: 10200, closeQty: 0, payDirection: 1, positionType: 1,
|
||||
tradingFee: '0', tradingFeePending: '0', dividendIn: '0',
|
||||
interestLegs: [{ interestClosePnL: 100 }],
|
||||
marginLegs: [{ interestClosePnL: 50 }]
|
||||
@@ -251,4 +254,17 @@ describe('交叉校验:对齐 C# FrontendCalcCharacterizationTest 金标准',
|
||||
expectClose(r.SwapRealizedPnL, 450, '含利息+预付金 SwapRealizedPnL');
|
||||
expectClose(r.SwapMarginRebatePnl, 50, 'SwapMarginRebatePnl');
|
||||
});
|
||||
|
||||
// FC_009 真实回归:债券结息价差按数量计算,不能误用期初名义本金
|
||||
test('FC_009 结息 债券价差按数量计算', () => {
|
||||
const r = SwapCalc.calcIncome({
|
||||
multiplier: 100, posiGrossPrice: 0.98, tradingAmountAvg: 80,
|
||||
positionQty: 30000000, contractSize: 1,
|
||||
closeNotionalValue: 29400000, closeQty: 0,
|
||||
payDirection: 2, positionType: 1,
|
||||
tradingFee: '0', tradingFeePending: '0', dividendIn: '-45000'
|
||||
});
|
||||
expectClose(r.MarkClosePnl, 5400000, 'income MarkClosePnl按数量计算');
|
||||
expectClose(r.FloatPnlSum, 5355000, 'income FloatPnlSum包含分红');
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user