using System.ComponentModel.DataAnnotations.Schema; using YLErp.DBModels.Enums; namespace YLErp.DBModels { /// /// 场内交易 /// [Table("exchange_trade")] public class ExchangeTrade : DBModelWithOperator, IDataTraceV2 { /// /// 成交日期 /// public DateTime TradeDate { get; set; } /// /// 交易编号 /// public string TradeNumber { get; set; } /// /// 交易类型 /// public string TradeType { get; set; } /// /// 标的代码 /// public string UnderlyingCode { get; set; } /// /// 标的代码 /// public int UnderlyingId { get; set; } /// /// 买卖方向 /// public string TradeSide { get; set; } /// /// 交易单份 /// public double TradeSinglePrice { get; set; } /// /// 交易份额(手数*合约乘数) /// 比如鸡蛋合约乘数是10,则1手为10份 /// public double Notional { get; set; } /// /// 交易数量(手数*合约乘数/乘积因子) /// 比如鸡蛋合约乘数是10,但交易单位为500kg每手,则1手为5吨的数量 /// public double TradeAmount { get; set; } /// /// 交易手数 /// public double TradeLots { get; set; } /// /// 簿记账户 /// public int AssetBookId { get; set; } /// /// 交易员 /// public int TraderId { get; set; } /// /// 交易员 /// public string TraderName { get; set; } /// /// 标的资产类型 /// public string InstrumentType { get; set; } /// /// 对冲账户 /// public int ExchangeAccountId { get; set; } /// /// 对冲账户 /// public string ExchangeAccountCode { get; set; } /// /// 手续费 /// public double Commission { get; set; } /// /// 手续费计算方式 /// public CommissionType CommissionType { get; set; } /// /// 标的或场内期权到期日 /// public DateTime? MaturityDate { get; set; } /// /// 期权代码 /// public string OptionCode { get; set; } /// /// 看涨看跌 /// public string OptionType { get; set; } /// /// 行权价 /// public double? OptionStrike { get; set; } /// /// 行权方式 /// public string ExerciseMode { get; set; } /// /// 是否有效 /// public bool IsValid { get; set; } = true; /// /// 交易来源 /// public string TradeSource { get; set; } /// /// 备注 /// public string Comments { get; set; } /// /// 创建时间 /// public DateTime CreateTime { get; set; } public override string ToString() { return $"{id},{UnderlyingCode},{TradeType}"; } public ExchangeTrade Clone() { return (ExchangeTrade)MemberwiseClone(); } public string GetDataTraceKeyId() { return id.ToString(); } public string GetDataTraceKeyInfo() { return $"场内交易:{TradeDate:yyyyMMdd}{OptionCode.TrimToNull() ?? UnderlyingCode}"; } } /// /// 标的交易Dto /// [NotMapped] public class ExchangeTradeDto : ExchangeTrade { /// /// 簿记账户名称 /// public string AssetBookName { get; set; } /// /// 标的代码 /// public string UnderlyingName { get; set; } public int CountRatio { get; set; } public decimal SheetAmount { get { if (ConsTrade.BondTypeList.Contains(TradeType)) { return ((decimal)this.TradeAmount / 100); } return (decimal)this.TradeAmount; } } public decimal TradeSinglePriceForBond { get { if (ConsTrade.BondTypeList.Contains(TradeType)) { return ((decimal)this.TradeSinglePrice * 100); } return (decimal)this.TradeSinglePrice; } } } /// /// 标的交易持仓记录Dto /// [NotMapped] public class ExchangeTradePositionDto : DBModelBase { //需要展示的字段 public int BookId { get; set; } public string TradeType { get; set; } public DateTime ValueDate { get; set; } public string UnderlyingCode { get; set; } public string UnderlyingName { get; set; } public string OptionCode { get; set; } public string AssetBookName { get; set; } //持仓手数,数量,名义本金,标的报价 public double Position { get; set; } public double PositionCount { get; set; } public string PositionType { get; set; } public double PositionCost { get; set; } public string UnderlyingPrice { get; set; } public int CountRatio { get; set; } public double SheetAmount { get { if (ConsTrade.BondTypeList.Contains(TradeType)) { return PositionCount / 100; } return PositionCount; } } } }