Files
zszq-trs/Framework/YLErp.Core/DBModels/EodTradePosition.cs
T
2024-05-09 14:06:26 +08:00

249 lines
6.1 KiB
C#

using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace YLErp.DBModels
{
[Table("eod_trade_position")]
public class eod_trade_position : EodTradePosition
{
}
[Table("eod_trade_position_hedgevol")]
public class eod_trade_position_hedgevol : EodTradePosition
{
}
[Table("eod_trade_position_extend")]
public class eod_trade_position_extend : EodTradePosition
{
}
[Table("eod_trade_position_extend_s")]
public class eod_trade_position_extend_s : EodTradePosition
{
}
[Table("eod_trade_position_openvol")]
public class eod_trade_position_openvol : EodTradePosition
{
}
[Table("eod_trade_position_s")]
public class eod_trade_position_s : EodTradePosition
{
}
[Table("eod_trade_position_hedgevol_s")]
public class eod_trade_position_hedgevol_s : EodTradePosition
{
}
[Table("eod_trade_position_openvol_s")]
public class eod_trade_position_openvol_s : EodTradePosition
{
}
public class TradePositionBase : DBModelWithOperator
{
private double _cost;
/// <summary>
/// 记录估值日期
/// </summary>
public DateTime ValueDate { get; set; }
/// <summary>
/// 对冲唯一编码
/// </summary>
public string HedgeUniqueCode { get; set; }
/// <summary>
/// 场内期权合约编号
/// </summary>
public string ExchangeOptionCode { get; set; }
/// <summary>
/// 交易类型
/// </summary>
[Required]
public string TradeType { get; set; }
/// <summary>
/// 持仓类型
/// </summary>
public string PositionType { get; set; }
/// <summary>
/// 簿记账户信息Id
/// </summary>
[Required]
public int BookId { get; set; }
/// <summary>
/// 标的代码Id
/// </summary>
public int UnderlyingId { get; set; }
/// <summary>
/// 标的代码
/// </summary>
// 与数据库结构不一致,先注释掉 [Required]
public string UnderlyingCode { get; set; }
/// <summary>
/// 交易类型(买入、卖出、多头开仓、多头平仓、空头开仓、空头平仓)
/// </summary>
public string BuySell { get; set; }
/// <summary>
/// 持仓数量
/// </summary>
public double Amount { get; set; }
/// <summary>
/// 持仓成本
/// </summary>
public double Cost { get => _cost; set => _cost = NumberHelper.Normalize(value); }
/// <summary>
/// 手续费
/// </summary>
public double Commission { get; set; }
}
public class EodTradePosition : TradePositionBase
{
/// <summary>
/// 客户ID
/// </summary>
public int ClientId { get; set; }
/// <summary>
/// 交易信息
/// </summary>
public int TradeId { get; set; }
/// <summary>
/// 昨日价值
/// </summary>
public double LastPv { get; set; }
/// <summary>
/// Pv
/// </summary>
public double Pv { get; set; }
/// <summary>
/// 四舍五入处理后的持仓市值
/// </summary>
public double RoundedPv { get; set; }
/// <summary>
/// 当日盈亏
/// </summary>
public double DailyPnL { get; set; }
/// <summary>
/// 持仓盈亏
/// </summary>
public double PositionPnL { get; set; }
/// <summary>
/// 平仓盈亏
/// </summary>
public double ClosedPnL { get; set; }
/// <summary>
/// 实现盈亏
/// </summary>
[NotMapped]
public double RealizedPnL { get => ClosedPnL; set => ClosedPnL = value; }
/// <summary>
/// 四舍五入处理后的持仓盈亏
/// </summary>
public double RoundedPositionPnL { get; set; }
/// <summary>
/// 总盈亏
/// </summary>
[DisplayName("总盈亏")]
public double TotalPnL { get; set; }
/// <summary>
/// 预付金
/// </summary>
public double Margin { get; set; }
/// <summary>
/// 持仓实现金额(目前指持仓时的票息和互换金额)
/// </summary>
[DisplayName("持仓实现盈亏")]
public double PositionRelizedAmount { get; set; }
/// <summary>
/// 主交易ID(准备使用eodtrade表)
/// </summary>
public int ParentTradeId { get; set; }
/// <summary>
/// 期权结构类型(准备使用eodtrade表)
/// </summary>
public string StructureType { get; set; }
/// <summary>
/// 标的价格
/// </summary>
public double? UnderlyingPrice { get; set; }
/// <summary>
/// 收益互换初始预付金
/// </summary>
[DisplayName("收益互换初始预付金")]
public double SwapInitMargin { get; set; }
/// <summary>
/// 收益互换交易盈亏
/// </summary>
[DisplayName("收益互换交易盈亏")]
public double SwapWinLoss { get; set; }
/// <summary>
/// 收益互换预付金容忍金额
/// </summary>
[DisplayName("收益互换预付金容忍金额")]
public double SwapUnMargin { get; set; }
public override string ToString()
{
return $"tradeid:{TradeId}--{UnderlyingCode}--bookid:{BookId}--clientid:{ClientId}";
}
public EodTradePosition Clone()
{
return (EodTradePosition)MemberwiseClone();
}
}
public class EodTradePositionAndRisk
{
public EodTradePositionAndRisk(EodTradePosition position, EodTradeRisk risk)
{
Risk = risk;
Position = position ?? throw new ArgumentNullException(nameof(position));
}
public EodTradePosition Position { get; }
public EodTradeRisk Risk { get; }
}
}