feat: 完善互换平仓交易费用自动计算 - 支持百分比和单位数量模式自动计算平仓交易费用 - 支持全部平仓和部分平仓联动重算 - 保持手动互换不自动填充平仓交易费用 - 补充前后端相关单测
296 lines
8.7 KiB
C#
296 lines
8.7 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;
|
|
using Qdp.Pricing.Base.Interfaces;
|
|
|
|
namespace YLErp.DBModels
|
|
{
|
|
/// <summary>
|
|
/// 互换合约持仓表
|
|
/// </summary>
|
|
[Table("swap_position")]
|
|
public class swap_position : DBModelBaseV2
|
|
{
|
|
/// <summary>
|
|
/// 期初持仓id
|
|
/// </summary>
|
|
[DisplayName("期初持仓id")]
|
|
[DataChange]
|
|
public long PositionId { get; set; }
|
|
/// <summary>
|
|
/// 交易id
|
|
/// </summary>
|
|
[DisplayName("交易id")]
|
|
[DataChange]
|
|
public int SwapTradeId { get; set; }
|
|
/// <summary>
|
|
/// 收支方向 1:收取,2:支付
|
|
/// </summary>
|
|
[DisplayName("收支方向")]
|
|
[DataChange]
|
|
public int PosiDirection { get; set; }
|
|
/// <summary>
|
|
/// 多空方向 1:多头,2:空头
|
|
/// </summary>
|
|
[DisplayName("多空方向")]
|
|
[DataChange]
|
|
public int PositionType { get; set; }
|
|
/// <summary>
|
|
/// 标的代码
|
|
/// </summary>
|
|
[DisplayName("标的代码")]
|
|
[DataChange]
|
|
public string UnderlyingCode { get; set; }
|
|
|
|
[NotMapped]
|
|
public underlying_manager underlying { get; set; }
|
|
/// <summary>
|
|
/// 乘积因子 元/1吨
|
|
/// </summary>
|
|
[DisplayName("乘积因子")]
|
|
[DataChange]
|
|
public decimal CountRatio { get; set; } = 1;
|
|
/// <summary>
|
|
/// 合约乘数 20吨/1手
|
|
/// </summary>
|
|
[DisplayName("合约乘数")]
|
|
[DataChange]
|
|
public decimal ContractSize { get; set; } = 1;
|
|
/// <summary>
|
|
/// 期初标的价格
|
|
/// </summary>
|
|
[DisplayName("期初标的价格")]
|
|
[DataChange]
|
|
public decimal PosiNetPrice { get; set; }
|
|
/// <summary>
|
|
/// 期初标的价格不含费
|
|
/// </summary>
|
|
[DisplayName("期初标的价格-不含费")]
|
|
[DataChange]
|
|
public decimal PosiGrossPrice{get;set;}
|
|
/// <summary>
|
|
/// 成交净价含费
|
|
/// </summary>
|
|
[DisplayName("成交净价含费")]
|
|
[DataChange]
|
|
public decimal? PosiNetFeePrice { get; set; }
|
|
/// <summary>
|
|
/// 成交净价不含费
|
|
/// </summary>
|
|
[DisplayName("成交净价不含费")]
|
|
[DataChange]
|
|
public decimal? PosiNetNoFeePrice { get; set; }
|
|
/// <summary>
|
|
/// 期初名义本金
|
|
/// </summary>
|
|
[DisplayName("期初名义本金")]
|
|
[DataChange]
|
|
public decimal PosiNotionalValue { get; set; }
|
|
/// <summary>
|
|
/// 交易数量
|
|
/// </summary>
|
|
[DisplayName("交易数量")]
|
|
[DataChange]
|
|
public decimal PosiQuantity { get; set; }
|
|
|
|
/// <summary>
|
|
/// 交易费用
|
|
/// </summary>
|
|
[DisplayName("交易费用")]
|
|
[DataChange]
|
|
public decimal PosiTradingFee { get; set; }
|
|
|
|
/// <summary>
|
|
/// 单位交易费用
|
|
/// </summary>
|
|
[DataChange]
|
|
public decimal PosiTradingFeeUnit { get; set; }
|
|
/// <summary>
|
|
/// 单位交易费用模式 0=百分比 1=单位数量
|
|
/// </summary>
|
|
[DataChange]
|
|
public int PosiFeeType { 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 PosiDividendIncome { get; set; }
|
|
/// <summary>
|
|
/// 交易费用(待结算) 实时持仓用 累计
|
|
/// </summary>
|
|
[DisplayName("交易费用(待结算)")]
|
|
[DataChange]
|
|
public decimal PosiTradingFeePending { get; set; }
|
|
/// <summary>
|
|
/// 收支方向 1:收取,2:支付
|
|
/// </summary>
|
|
[DisplayName("收支方向")]
|
|
[DataChange]
|
|
public int InterestDirection { get; set; }
|
|
/// <summary>
|
|
/// 计息利率(年化)
|
|
/// </summary>
|
|
[DisplayName("计息利率(年化)")]
|
|
[DataChange]
|
|
public decimal InterestRateDefault { get; set; }
|
|
|
|
/// <summary>
|
|
/// 浮动利率
|
|
/// </summary>
|
|
public decimal FloatRate { get; set; }
|
|
/// <summary>
|
|
/// 浮动利率标的
|
|
/// </summary>
|
|
public string FloatRateUnderlyingCode { get; set; }
|
|
/// <summary>
|
|
/// 计息基本类型 1:固定值,2:合约名义本金规模,3:持仓名义本金,4:持仓市值,5:初始预付金,6:追加预付金
|
|
/// </summary>
|
|
[DisplayName("计息基本类型")]
|
|
[DataChange]
|
|
public int InterestMode { get; set; }
|
|
|
|
[NotMapped]
|
|
public string InterestModeStr
|
|
{
|
|
get
|
|
{
|
|
return ((InterestModeEnum)InterestMode).ToString();
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// 计息方式 0:单利,1:复利
|
|
/// </summary>
|
|
public int InterestType { get; set; }
|
|
/// <summary>
|
|
/// 计息基数(固定值时适用)
|
|
/// </summary>
|
|
[DisplayName("计息基数")]
|
|
[DataChange]
|
|
public decimal InterestPrincipalFix { 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 InterestAmount { get; set; }
|
|
/// <summary>
|
|
/// 是否期初
|
|
/// </summary>
|
|
[DisplayName("是否期初")]
|
|
[DataChange]
|
|
public bool IsInitial { 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 PosiNumber { get; set; }
|
|
|
|
/// <summary>
|
|
/// 标的资产类型
|
|
/// </summary>
|
|
public string UnderlyingInstrumentType { get; set; }
|
|
/// <summary>
|
|
/// 期初收益率
|
|
/// </summary>
|
|
public decimal? InitYtm { get; set; }
|
|
/// <summary>
|
|
/// 是否无效
|
|
/// </summary>
|
|
public bool Invalid { get; set; }
|
|
/// <summary>
|
|
/// 重置频率(天)
|
|
/// </summary>
|
|
public int? interest_rest_days { get; set; }
|
|
/// <summary>
|
|
/// 利率准则(-1前一营业日,0当前营业日)
|
|
/// </summary>
|
|
public int? interest_rule { get; set; }
|
|
/// <summary>
|
|
/// 利息端类别
|
|
/// </summary>
|
|
public string category_tag { 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 TradeObervation Obervation { get; set; }
|
|
/// <summary>
|
|
/// 持仓编码
|
|
/// </summary>
|
|
[NotMapped]
|
|
public string PositionIdPadding
|
|
{
|
|
get
|
|
{
|
|
return PositionId.ToString().PadLeft(8, '0');
|
|
}
|
|
}
|
|
public swap_position Clone()
|
|
{
|
|
return (swap_position)MemberwiseClone();
|
|
}
|
|
}
|
|
|
|
}
|