feat(swap): 新增基础费率字段,支持百分比/单位数量模式切换及自动计算
- 浮动收益端新增基础费率列(原单位交易费用),位于数量与交易费用后付之间 - 支持百分比模式(4位小数)与单位数量模式(2位小数)切换,默认百分比 - 填入基础费率后自动计算交易费用后付,手动修改后反算基础费率 - 平仓时根据 PosiFeeType 自动计算平仓交易费用,支持全部/部分平仓联动 - 收益结算(手动互换)不自动填充平仓交易费用 - 查看交易页面新增基础费率展示(百分比带%后缀4位,单位数量2位) - swap_position 表新增 PosiFeeType 字段标识费率模式(0=百分比 1=单位数量) - 切换模式时基础费率和交易费用归零,避免精度冲突 - 修复 TradeView.cshtml 引用了不存在字段 category_tag 的编译错误
This commit is contained in:
@@ -291,6 +291,11 @@ namespace YLErp.Modules.SwapModule
|
||||
floatEvent.UnderlyingInstrumentType = position.UnderlyingInstrumentType;
|
||||
floatEvent.CloseFee = 0;
|
||||
floatEvent.BeforeCloseFee = oriPosition.PosiTradingFeePending;
|
||||
//自动计算平仓交易费用
|
||||
floatEvent.TradingFee = CalcInitTradingFee(oriPosition, unwindData);
|
||||
//向前端传递单位交易费用和模式标记(NotMapped,不存库)
|
||||
floatEvent.PosiTradingFeeUnit = oriPosition.PosiTradingFeeUnit;
|
||||
floatEvent.PosiFeeType = oriPosition.PosiFeeType;
|
||||
floatEvent.MarkClosePnl = 0;
|
||||
floatEvent.PayDirection = position.PosiDirection;
|
||||
floatEvent.PosiGrossPrice = position.PosiGrossPrice;
|
||||
@@ -314,6 +319,22 @@ namespace YLErp.Modules.SwapModule
|
||||
return unwindData;
|
||||
}
|
||||
/// <summary>
|
||||
/// 计算初始平仓交易费用
|
||||
/// </summary>
|
||||
private decimal CalcInitTradingFee(swap_position oriPosition, UnwindData unwindData)
|
||||
{
|
||||
if (oriPosition.PosiFeeType == 0)
|
||||
{
|
||||
//百分比模式:费率%/100 × 平仓名义本金
|
||||
return Math.Round(oriPosition.PosiTradingFeeUnit / 100m * (decimal)unwindData.CloseNotionalValue, 2, MidpointRounding.AwayFromZero);
|
||||
}
|
||||
else
|
||||
{
|
||||
//单位数量模式:单位费率 × 平仓数量
|
||||
return Math.Round(oriPosition.PosiTradingFeeUnit * (decimal)unwindData.CloseQty, 2, MidpointRounding.AwayFromZero);
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// 校验上日是否收盘
|
||||
/// </summary>
|
||||
/// <param name="tradeId"></param>
|
||||
|
||||
Reference in New Issue
Block a user