Files
zszq-trs/Framework/YLErp.Core/DBModels/EodSwapPosition.cs
T
hjhan 70550af29a refactor(funding-leg): 清理CalcNotional死参数posiLong/posiShort+修正过时InterestMode注释
- 删除 IFundingLegStrategy.CalcNotional 的 posiLong/posiShort 死参数(多空存续腿界面已禁用,三个实现均不读取),同步三个实现签名、SwapDealService 唯一调用点、FundingLegStrategyTest 7 处调用
- 修正 SwapPosition/SwapFlowEvent/EodSwapPosition 的 InterestMode 字段注释(去掉已删的 3/4,补全 5/6/9)
- 重写 SwapUnwindFloatingLegDiagnosticTdd 过时类注释

零行为变化;编译 0 错误;FundingLegStrategyTest 11/11 通过。
2026-08-13 08:51:21 +08:00

479 lines
16 KiB
C#

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using YLErp.Helpers;
namespace YLErp.DBModels
{
/// <summary>
/// 互换合约日终持仓归档表
/// </summary>
[Table("eod_swap_position")]
public class eod_swap_position: DBModelBaseV2
{
/// <summary>
/// 持仓日期
/// </summary>
[DisplayName("持仓日期")]
[DataChange]
public DateTime ValueDate { get; set; }
/// <summary>
/// 客户编码
/// </summary>
[DisplayName("客户编码id")]
[DataChange]
public int ClientId { get; set; }
/// <summary>
/// 互换交易编码
/// </summary>
[DisplayName("互换交易编码id")]
[DataChange]
public int SwapTradeId { get; set; }
/// <summary>
/// 互换交易腿ID
/// </summary>
[DisplayName("互换交易腿ID")]
[DataChange]
public long PositionId { get; set; }
/// <summary>
///浮动端 收取方向 1:收取,2:支付
/// </summary>
[DisplayName("收取方向")]
[DataChange]
public int PosiDirection { get; set; }
[NotMapped]
public string PosiDirectionStr
{
get
{
if (PosiDirection == 1)
{
return "收取";
}
else if (PosiDirection == 2)
{
return "支付";
}
else return "";
}
}
/// <summary>
/// 多空方向 1:多头,2:空头
/// </summary>
[DisplayName("多空方向")]
[DataChange]
public int PositionType { get; set; }
[NotMapped]
public string PositionTypeStr
{
get
{
if (PositionType == 1)
{
return "B";
}
else if (PositionType == 2)
{
return "S";
}
else return "";
}
}
/// <summary>
/// 标的代码
/// </summary>
[DisplayName("标的代码")]
[DataChange]
public string UnderlyingCode { get; set; }
/// <summary>
/// 标的名称
/// </summary>
[NotMapped]
public string UnderlyingName { get; set; }
/// <summary>
/// 合约乘数
/// </summary>
[DisplayName("合约乘数")]
[DataChange]
public decimal ContractSize { get; set; }
/// <summary>
/// 合约乘积因子
/// </summary>
[DisplayName("合约乘积因子")]
[DataChange]
public decimal CountRatio { get; set; }
/// <summary>
/// 期初标的价格
/// </summary>
[DisplayName("期初标的价格")]
[DataChange]
public decimal PosiNetPrice { get; set; }
/// <summary>
/// 期初标的价格-不含费
/// </summary>
[DisplayName("期初标的价格-不含费")]
[DataChange]
public decimal PosiGrossPrice { get; set; }
/// 收益率
/// <summary>
/// 剩余持仓数量
/// </summary>
[DisplayName("剩余持仓数量")]
[DataChange]
public decimal PosiQuantity { get; set; }
/// <summary>
/// 当前剩余的名义本金
/// </summary>
[DisplayName("当前剩余的名义本金")]
[DataChange]
public decimal PosiNotionalValue { get; set; }
/// <summary>
/// 开仓佣金交易费用
/// </summary>
[DisplayName("开仓佣金交易费用")]
[DataChange]
public decimal PosiTradingFee { get; set; }
/// <summary>
/// 开仓起始日-首次开仓日
/// </summary>
[DisplayName("开仓起始日")]
[DataChange]
public DateTime PosiStartDate { get; set; }
/// <summary>
/// 开仓到期日
/// </summary>
[DisplayName("开仓到期日")]
[DataChange]
public DateTime? PosiMatuirityDate { get; set; }
/// <summary>
/// 标的盯市价格
/// </summary>
[DisplayName("标的盯市价格")]
[DataChange]
public decimal UnderlyingPrice { get; set; }
/// <summary>
/// 标的市值,空头持仓为负数,挂钩标的价格*持仓数量*合约乘数*(多空方向)
/// </summary>
[DisplayName("标的市值")]
[DataChange]
public decimal UnderlyingMarketValue { get; set; }
/// <summary>
/// 当日浮动端分红,当日事件流水中“分红收益”的加总* 收支方向
/// </summary>
[DisplayName("当日浮动端分红")]
[DataChange]
public decimal TdPosiDividend { get; set; }
/// <summary>
/// 浮动端盯市未实现,因标的价格变化导致的收益(盯市、未实现)
/// </summary>
[DisplayName("浮动端平仓盈亏·盯市未实现")]
[DataChange]
public decimal PosiMtmPnL { get; set; }
/// <summary>
/// 浮动端盯市未实现,因分红导致的分红收益(未实现),日初的本字段值+当日浮动端分红-浮动端平仓盈亏·分红(当日实现)
/// </summary>
[DisplayName("浮动端平仓盈亏·分红未实现")]
[DataChange]
public decimal PosiDividendSum { get; set; }
/// <summary>
/// 后付的费用(未实现)
/// </summary>
[DisplayName("后付的费用(未实现)")]
[DataChange]
public decimal PosiFeePending { get; set; }
/// <summary>
/// 浮动端的所有待实现收益(当前浮动腿的价值),浮动端待实现收益盯市+浮动端待实现收益分红
/// </summary>
[DisplayName("浮动端的所有待实现收益")]
[DataChange]
public decimal PosiProfitSum { get; set; }
/// <summary>
///利息端 收取方向 1:收取,2:支付
/// </summary>
[DisplayName("收取方向")]
[DataChange]
public int InterestDirection { get; set; }
/// <summary>
/// 计息基本类型 1:固定值,2:合约名义本金规模,5:初始预付金,6:追加预付金,9:标的期初全价
/// </summary>
[DisplayName("计息基本类型")]
[DataChange]
public int InterestMode { get; set; }
/// <summary>
/// 计息方式 0:单利,1:复利
/// </summary>
public int InterestType { get; set; }
/// <summary>
/// 计息基数固定值
/// </summary>
[DisplayName("计息基数固定值")]
[DataChange]
public decimal InterestPrincipalFix { get; set; }
/// <summary>
/// 互换利率(年化)
/// </summary>
[DisplayName("互换利率(年化)")]
[DataChange]
public decimal InterestRateDefault { get; set; }
/// <summary>
/// 互换间隔
/// </summary>
[DisplayName("互换间隔")]
[DataChange]
public string InterestSwapInterval { get; set; }
/// <summary>
/// 待结算其他费用
/// </summary>
[DisplayName("待结算其他费用")]
[DataChange]
public decimal InterestFeePending { get; set; }
/// <summary>
/// 当前交易日适用的具体计息基准值
/// </summary>
[DisplayName("当前交易日适用的具体计息基准值")]
[DataChange]
public decimal TdInterestPrincipal { get; set; }
/// <summary>
/// 当前交易日适用的具体利率值
/// </summary>
[DisplayName("当前交易日适用的具体利率值")]
[DataChange]
public decimal TdInterestRate { get; set; }
/// <summary>
/// 当日利率端新计利息
/// </summary>
[DisplayName("当日利率端新计利息")]
[DataChange]
public decimal TdInterestIncome { get; set; }
/// <summary>
/// 当日利率端新增费用
/// </summary>
[DisplayName("当日利率端新增费用")]
[DataChange]
public decimal TdInterestFee { get; set; }
/// <summary>
/// 利率端待实现收益-利息
/// </summary>
[DisplayName("利率端待实现收益-利息")]
[DataChange]
public decimal InterestIncomeSum { get; set; }
/// <summary>
/// 利率端待实现收益-其他费用
/// </summary>
[DisplayName("利率端待实现收益-其他费用")]
[DataChange]
public decimal InterestFeeSum { get; set; }
/// <summary>
/// 利率端待实现收益
/// </summary>
[DisplayName("利率端待实现收益")]
[DataChange]
public decimal InterestProfitSum { get; set; }
/// <summary>
/// 浮动腿与利息腿的价值之和
/// </summary>
[DisplayName("互换持仓价值")]
[DataChange]
public decimal SwapPositionValue { get; set; }
/// <summary>
/// 当日平仓数量
/// </summary>
[DisplayName("当日平仓数量")]
[DataChange]
public decimal TdCloseQty { get; set; }
/// <summary>
/// 当日公司行为数量,因当日公司行为事件导致的数量变化
/// </summary>
[DisplayName("当日公司行为数量")]
[DataChange]
public decimal TdChangedQty { get; set; }
/// <summary>
/// 当日浮动端平仓盈亏·盯市
/// </summary>
[DisplayName("当日浮动端平仓盈亏·盯市")]
[DataChange]
public decimal TdCloseMtmPnl { get; set; }
/// <summary>
/// 当日浮动端平仓盈亏·分红
/// </summary>
[DisplayName("当日浮动端平仓盈亏·分红")]
[DataChange]
public decimal TdCloseDividend { get; set; }
/// <summary>
/// 当日浮动端平仓盈亏·费用
/// </summary>
[DisplayName("当日浮动端平仓盈亏·费用")]
[DataChange]
public decimal TdCloseFee { get; set; }
/// <summary>
/// 当日利率端平仓盈亏·利息
/// </summary>
[DisplayName("当日利率端平仓盈亏·利息")]
[DataChange]
public decimal TdCloseInterest { get; set; }
/// <summary>
/// 当日利率端平仓盈亏·其他费用
/// </summary>
[DisplayName("当日利率端平仓盈亏·其他费用")]
[DataChange]
public decimal TdCloseInterestFee { get; set; }
/// <summary>
/// 浮动端累计已实现盈亏·盯市
/// </summary>
[DisplayName("浮动端累计已实现盈亏·盯市")]
[DataChange]
public decimal RealizedMtmPnL { get; set; }
/// <summary>
/// 浮动端累计已实现盈亏·分红
/// </summary>
[DisplayName("浮动端累计已实现盈亏·分红")]
[DataChange]
public decimal RealizedDividend { get; set; }
/// <summary>
/// 浮动端累计已实现盈亏·费用
/// </summary>
[DisplayName("浮动端累计已实现盈亏·费用")]
[DataChange]
public decimal RealizedFee { get; set; }
/// <summary>
/// 利率端累计已实现盈亏·利息
/// </summary>
[DisplayName("利率端累计已实现盈亏·利息")]
[DataChange]
public decimal RealizedInterest { get; set; }
/// <summary>
/// 利率端累计已实现盈亏·其他费用
/// </summary>
[DisplayName("利率端累计已实现盈亏·其他费用")]
[DataChange]
public decimal RealizedInterestFee { get; set; }
/// <summary>
/// 持仓累计已实现盈亏
/// </summary>
[DisplayName("持仓累计已实现盈亏")]
[DataChange]
public decimal RealizedPnl { get; set; }
/// <summary>
/// 当日适用汇率
/// </summary>
[DisplayName("当日适用汇率")]
[DataChange]
public decimal TdCurrency { get; set; }
/// <summary>
/// 持仓状态 正常0/已平1
/// </summary>
[DisplayName("持仓状态")]
[DataChange]
public int PosiStatus { get; set; }
/// <summary>
/// 是否无效 有效false/无效true
/// </summary>
[DisplayName("是否无效")]
[DataChange]
public bool Invalid { get; set; }
/// <summary>
/// 浮动利率
/// </summary>
public decimal FloatRate { get; set; }
/// <summary>
/// 浮动利率标的
/// </summary>
public string FloatRateUnderlyingCode { get; set; }
/// <summary>
/// 是否年化
/// </summary>
public bool IsAnnualized { get; set; }
/// <summary>
/// 发生日期 预付金腿用
/// </summary>
public DateTime? HappenDate { get; set; }
/// <summary>
/// 币种
/// </summary>
public string Currency { get; set; }
/// <summary>
/// 标的资产类型
/// </summary>
public string UnderlyingInstrumentType { get; set; }
/// <summary>
/// 成交净价含费
/// </summary>
public decimal? PosiNetFeePrice { get; set; }
/// <summary>
/// 成交净价不含费
/// </summary>
public decimal? PosiNetNoFeePrice { get; set; }
/// <summary>
/// 虚拟交易费用
/// </summary>
public decimal VTradingFee { get; set; }
/// <summary>
/// 重置频率(天)
/// </summary>
public int? interest_rest_days { get; set; }
/// <summary>
/// 利率准则(-1前一营业日,0当前营业日)
/// </summary>
public int? interest_rule { get; set; }
/// <summary>
/// 基点价值DV01
/// </summary>
[DataChange]
public decimal? dv01 { get; set; }
/// <summary>
/// 持仓编码
/// </summary>
[NotMapped]
public string PositionIdPadding
{
get
{
return PositionId.ToString().PadLeft(8, '0');
}
}
public eod_swap_position Clone()
{
return (eod_swap_position)MemberwiseClone();
}
}
/// <summary>
/// 合成持仓事件返回
/// </summary>
public class SwapPositionResponse
{
public eod_swap_position eodPosition { get; set; }
public swap_position position { get; set; }
public DateTime TradeDate { get; set; }
public string SwapTradeNo { get; set; }
public int ClientId { get; set; }
public string ClientNumber { get; set; }
public string ClientName { get; set; }
public string SwapTradeTypeStr { get; set; }
/// <summary>
/// 结构类型
/// </summary>
public string StructureType { get; set; }
/// <summary>
/// 权益收支方向
/// </summary>
public int InitialMarginDirection { get; set; }
}
}