- 删除 IFundingLegStrategy.CalcNotional 的 posiLong/posiShort 死参数(多空存续腿界面已禁用,三个实现均不读取),同步三个实现签名、SwapDealService 唯一调用点、FundingLegStrategyTest 7 处调用 - 修正 SwapPosition/SwapFlowEvent/EodSwapPosition 的 InterestMode 字段注释(去掉已删的 3/4,补全 5/6/9) - 重写 SwapUnwindFloatingLegDiagnosticTdd 过时类注释 零行为变化;编译 0 错误;FundingLegStrategyTest 11/11 通过。
405 lines
11 KiB
C#
405 lines
11 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; }
|
|
|
|
}
|
|
}
|