418 lines
12 KiB
C#
418 lines
12 KiB
C#
using System;
|
||
using System.Collections.Generic;
|
||
using System.Linq;
|
||
using System.Text;
|
||
using System.Threading.Tasks;
|
||
using System.ComponentModel;
|
||
using System.ComponentModel.DataAnnotations.Schema;
|
||
using YLErp.Helpers;
|
||
using Newtonsoft.Json;
|
||
using YLErp.Models;
|
||
|
||
namespace YLErp.DBModels
|
||
{
|
||
[Table("swap_flow_event")]
|
||
public class swap_flow_event: DBModelBaseV2
|
||
{
|
||
/// <summary>
|
||
/// 事件日期
|
||
/// </summary>
|
||
[DisplayName("事件日期")]
|
||
[DataChange]
|
||
public DateTime EventDate { get; set; }
|
||
/// <summary>
|
||
/// 互换交易id
|
||
/// </summary>
|
||
[DisplayName("互换交易id")]
|
||
[DataChange]
|
||
public int SwapTradeId { get; set; }
|
||
/// <summary>
|
||
/// 互换交易编码
|
||
/// </summary>
|
||
[DisplayName("互换交易编码")]
|
||
[DataChange]
|
||
public string SwapTradeNo { get; set; }
|
||
/// <summary>
|
||
/// 持仓编码
|
||
/// </summary>
|
||
[NotMapped]
|
||
public string SwapPositionIdPadding
|
||
{
|
||
get
|
||
{
|
||
return PositionId.ToString().PadLeft(8, '0');
|
||
}
|
||
}
|
||
/// <summary>
|
||
/// 平仓事件 1:开仓,2:平仓,3:互换,4:自动互换
|
||
/// </summary>
|
||
[DisplayName("平仓事件")]
|
||
[DataChange]
|
||
public int EventType { get; set; }
|
||
[NotMapped]
|
||
public string EventTypeStr
|
||
{
|
||
get
|
||
{
|
||
switch (EventType)
|
||
{
|
||
case 1:return "开仓";
|
||
case 2: return "平仓";
|
||
case 3: return "互换";
|
||
case 4: return "自动互换";
|
||
default:return "";
|
||
}
|
||
}
|
||
}
|
||
/// <summary>
|
||
/// 事件原因
|
||
/// </summary>
|
||
[DisplayName("事件原因")]
|
||
[DataChange]
|
||
public string EventReason { get; set; }
|
||
/// <summary>
|
||
/// 浮动端收支方向 1:收取,2:支付
|
||
/// </summary>
|
||
[DisplayName("浮动端收支方向")]
|
||
[DataChange]
|
||
public int PayDirection { get; set; }
|
||
|
||
[NotMapped]
|
||
public string PayDirectionStr
|
||
{
|
||
get
|
||
{
|
||
if (PayDirection == 1)
|
||
{
|
||
return "收取";
|
||
}
|
||
else if (PayDirection == 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>
|
||
[DisplayName("到期日")]
|
||
[DataChange]
|
||
public DateTime? MatuirityDate { get; set; }
|
||
|
||
/// <summary>
|
||
/// 成交数量
|
||
/// </summary>
|
||
[DisplayName("成交数量")]
|
||
[DataChange]
|
||
public decimal Quantity { get; set; }
|
||
|
||
/// <summary>
|
||
/// 剩余持仓数量
|
||
/// </summary>
|
||
public decimal? PositionQty { get; set; }
|
||
/// <summary>
|
||
/// 乘积因子
|
||
/// </summary>
|
||
[DisplayName("乘积因子")]
|
||
[DataChange]
|
||
public decimal CountRatio { get; set; }
|
||
/// <summary>
|
||
/// 合约乘数
|
||
/// </summary>
|
||
[DisplayName("合约乘数")]
|
||
[DataChange]
|
||
public decimal ContractSize { get; set; }
|
||
|
||
/// <summary>
|
||
/// 期初标的价格
|
||
/// </summary>
|
||
[NotMapped]
|
||
public decimal PosiNetPrice { get; set; }
|
||
|
||
/// <summary>
|
||
/// 期初标的价格不含费
|
||
/// </summary>
|
||
[NotMapped]
|
||
public decimal PosiGrossPrice { get; set; }
|
||
/// <summary>
|
||
/// 成交金额
|
||
/// </summary>
|
||
[DisplayName("成交金额")]
|
||
[DataChange]
|
||
public decimal TradingAmount { get; set; }
|
||
|
||
/// <summary>
|
||
/// 成交均价
|
||
/// </summary>
|
||
[DisplayName("成交均价")]
|
||
[DataChange]
|
||
public decimal TradingAmountAvg { get; set; }
|
||
/// <summary>
|
||
/// 含费均价
|
||
/// </summary>
|
||
[DisplayName("含费均价")]
|
||
[DataChange]
|
||
public decimal TradingAmountFeeAvg { get; set; }
|
||
/// <summary>
|
||
/// 交易费用佣金
|
||
/// </summary>
|
||
[DisplayName("交易费用佣金")]
|
||
[DataChange]
|
||
public decimal TradingFee { get; set; }
|
||
/// <summary>
|
||
/// 待结算后付交易费用佣金
|
||
/// </summary>
|
||
[DisplayName("待结算后付交易费用佣金")]
|
||
[DataChange]
|
||
public decimal TradingFeePending { get; set; }
|
||
|
||
/// <summary>
|
||
/// 待结算分红收益
|
||
/// </summary>
|
||
[DisplayName("待结算分红收益")]
|
||
[DataChange]
|
||
public decimal DividendPending { get; set; }
|
||
|
||
/// <summary>
|
||
/// 浮动端平仓盈亏·盯市
|
||
/// </summary>
|
||
[DisplayName("浮动端平仓盈亏·盯市")]
|
||
[DataChange]
|
||
public decimal MarkClosePnl { get; set; }
|
||
/// <summary>
|
||
/// 浮动端平仓盈亏·分红
|
||
/// </summary>
|
||
[DisplayName("浮动端平仓盈亏·分红")]
|
||
[DataChange]
|
||
public decimal DividendIn { get; set; }
|
||
/// <summary>
|
||
/// 浮动端平仓盈亏·费用
|
||
/// </summary>
|
||
[DisplayName("浮动端平仓盈亏·费用")]
|
||
[DataChange]
|
||
public decimal CloseFee { get; set; }
|
||
|
||
/// <summary>
|
||
/// 平仓前 交易佣金+后付费用
|
||
/// </summary>
|
||
[NotMapped]
|
||
public decimal BeforeCloseFee { get; set; }
|
||
/// <summary>
|
||
/// 基础费率(仅前端展示,不存库)
|
||
/// </summary>
|
||
[NotMapped]
|
||
public decimal PosiTradingFeeUnit { get; set; }
|
||
/// <summary>
|
||
/// 基础费率模式 0=百分比 1=单位数量(仅前端展示,不存库)
|
||
/// </summary>
|
||
[NotMapped]
|
||
public int PosiFeeType { get; set; }
|
||
/// <summary>
|
||
/// 持仓腿id
|
||
/// </summary>
|
||
[DisplayName("持仓腿id")]
|
||
[DataChange]
|
||
public long PositionId { get; set; }
|
||
|
||
/// <summary>
|
||
/// 数据状态 0:废弃,1:等待流水开平仓完成,100:完成
|
||
/// </summary>
|
||
[DisplayName("数据状态")]
|
||
[DataChange]
|
||
public int DataState { get; set; }
|
||
/// <summary>
|
||
/// 资金记录id
|
||
/// </summary>
|
||
[DisplayName("资金记录id")]
|
||
[DataChange]
|
||
public int ClientCashId { get; set; }
|
||
|
||
/// <summary>
|
||
/// 利息端收支方向
|
||
/// </summary>
|
||
[DisplayName("收支方向")]
|
||
[DataChange]
|
||
public int InterestDirection { get; set; }
|
||
[NotMapped]
|
||
public string InterestDirectionStr
|
||
{
|
||
get
|
||
{
|
||
if (InterestDirection == 1)
|
||
{
|
||
return "收取";
|
||
}
|
||
else if (InterestDirection == 2)
|
||
{
|
||
return "支付";
|
||
}
|
||
else return "";
|
||
}
|
||
}
|
||
/// <summary>
|
||
/// 计息方式 1:固定值,2:合约名义本金规模,5:初始预付金,6:追加预付金,9:标的期初全价
|
||
/// </summary>
|
||
[DisplayName("计息方式")]
|
||
[DataChange]
|
||
public int InterestMode { get; set; }
|
||
/// <summary>
|
||
/// 标的资产类型
|
||
/// </summary>
|
||
public string UnderlyingInstrumentType { get; set; }
|
||
[NotMapped]
|
||
public string InterestModeStr
|
||
{
|
||
get
|
||
{
|
||
if (InterestMode==0)
|
||
{
|
||
return string.Empty;
|
||
}
|
||
return ((InterestModeEnum)InterestMode).ToString();
|
||
}
|
||
}
|
||
/// <summary>
|
||
/// 利息端计息基准
|
||
/// </summary>
|
||
[DisplayName("计息基准")]
|
||
[DataChange]
|
||
public decimal InterestPrincipal { get; set; }
|
||
/// <summary>
|
||
/// 利息端计息利率
|
||
/// </summary>
|
||
[DisplayName("计息利率")]
|
||
[DataChange]
|
||
public decimal InterestRate { get; set; }
|
||
/// <summary>
|
||
/// 互换间隔
|
||
/// </summary>
|
||
[DisplayName("互换间隔")]
|
||
[DataChange]
|
||
public string InterestSwapInterval { get; set; }
|
||
/// <summary>
|
||
/// 利息端利息金额
|
||
/// </summary>
|
||
[DisplayName("利息金额")]
|
||
[DataChange]
|
||
public decimal InterestAmount { get; set; }
|
||
|
||
/// <summary>
|
||
/// 当日新计利息
|
||
/// </summary>
|
||
[NotMapped]
|
||
public decimal TdInterestAmount { get; set; }
|
||
/// <summary>
|
||
/// 利息端计息费用
|
||
/// </summary>
|
||
[DisplayName("计息费用")]
|
||
[DataChange]
|
||
public decimal InterestFee { get; set; }
|
||
/// <summary>
|
||
/// 利息端利息端平仓盈亏
|
||
/// </summary>
|
||
[DisplayName("利息端平仓盈亏")]
|
||
[DataChange]
|
||
public decimal InterestClosePnL { get; set; }
|
||
|
||
public long? EventId { get; set; }
|
||
public int? ClientId { get; set; }
|
||
public decimal? FloatRate { get; set; }
|
||
|
||
/// <summary>
|
||
/// 支付日
|
||
/// </summary>
|
||
public DateTime? PayDate { get; set; }
|
||
/// <summary>
|
||
/// 成交净价含费
|
||
/// </summary>
|
||
public decimal? TradingAmountNetFeeAvg { get; set; }
|
||
/// <summary>
|
||
/// 成交净价不含费
|
||
/// </summary>
|
||
public decimal? TradingAmountNetAvg { get; set; }
|
||
|
||
public DateTime? UnwindDate { get; set; }
|
||
/// <summary>
|
||
/// 操作记录
|
||
/// </summary>
|
||
public string OptLog { get; set; }
|
||
/// <summary>
|
||
/// 互换观察日集合
|
||
/// </summary>
|
||
[NotMapped]
|
||
public List<IntervalModel> SwapIntervalList
|
||
{
|
||
get
|
||
{
|
||
if (string.IsNullOrEmpty(InterestSwapInterval))
|
||
{
|
||
return new List<IntervalModel>();
|
||
}
|
||
|
||
return JsonConvert.DeserializeObject<List<IntervalModel>>(InterestSwapInterval);
|
||
}
|
||
}
|
||
/// <summary>
|
||
/// 浮动端平仓盈亏
|
||
/// </summary>
|
||
|
||
[NotMapped]
|
||
public decimal FloatPnlSum
|
||
{
|
||
get
|
||
{
|
||
return MarkClosePnl + TradingFee + TradingFeePending + DividendIn;
|
||
}
|
||
}
|
||
/// <summary>
|
||
/// 成交收益率
|
||
/// </summary>
|
||
[NotMapped]
|
||
public decimal? InitYtm { get; set; }
|
||
|
||
/// <summary>
|
||
/// 期末标的结算收益率(EQD-6953 平仓)。普通债券类收益互换平仓时由债券计算器按
|
||
/// 期末标的交割全价反算(估值日=平仓日 ValueDate),允许手工覆盖。
|
||
/// 命名遵循《互换价格字段命名规范决策文档》时点维度:平仓/了结用 Exit(勿用 End/Close/Final)。
|
||
/// [NotMapped]:不落 swap_flow_event 表列;仅随 UnwindData 序列化进 swap_event.EventData JSON,
|
||
/// 由平仓待复核回显(GetSwapEvent)与结算确认书 Excel(TradeSettleBillGenerator) 消费。
|
||
/// ⚠️ 存储口径为【展示态百分数】(如 6.3721 表示 6.3721%),与同页期末交割全价(展示态)一致,
|
||
/// 区别于录入页 trade.InitYtm 的存储态小数(0.063721)——两者载体不同、互不干扰,勿"顺手统一"。
|
||
/// 精度:确认书导出固定 4 位小数不去零(ToString("0.0000"));本字段保留 4 位(四舍五入)。
|
||
/// </summary>
|
||
[NotMapped]
|
||
public decimal? ExitYtm { get; set; }
|
||
|
||
}
|
||
}
|