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;
}
}
}
}