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

263 lines
6.3 KiB
C#

using System.ComponentModel.DataAnnotations.Schema;
using YLErp.DBModels.Enums;
namespace YLErp.DBModels
{
/// <summary>
/// 场内交易
/// </summary>
[Table("exchange_trade")]
public class ExchangeTrade : DBModelWithOperator, IDataTraceV2
{
/// <summary>
/// 成交日期
/// </summary>
public DateTime TradeDate { get; set; }
/// <summary>
/// 交易编号
/// </summary>
public string TradeNumber { get; set; }
/// <summary>
/// 交易类型
/// </summary>
public string TradeType { get; set; }
/// <summary>
/// 标的代码
/// </summary>
public string UnderlyingCode { get; set; }
/// <summary>
/// 标的代码
/// </summary>
public int UnderlyingId { get; set; }
/// <summary>
/// 买卖方向
/// </summary>
public string TradeSide { get; set; }
/// <summary>
/// 交易单份
/// </summary>
public double TradeSinglePrice { get; set; }
/// <summary>
/// 交易份额(手数*合约乘数)
/// 比如鸡蛋合约乘数是10,则1手为10份
/// </summary>
public double Notional { get; set; }
/// <summary>
/// 交易数量(手数*合约乘数/乘积因子)
/// 比如鸡蛋合约乘数是10,但交易单位为500kg每手,则1手为5吨的数量
/// </summary>
public double TradeAmount { get; set; }
/// <summary>
/// 交易手数
/// </summary>
public double TradeLots { get; set; }
/// <summary>
/// 簿记账户
/// </summary>
public int AssetBookId { get; set; }
/// <summary>
/// 交易员
/// </summary>
public int TraderId { get; set; }
/// <summary>
/// 交易员
/// </summary>
public string TraderName { get; set; }
/// <summary>
/// 标的资产类型
/// </summary>
public string InstrumentType { get; set; }
/// <summary>
/// 对冲账户
/// </summary>
public int ExchangeAccountId { get; set; }
/// <summary>
/// 对冲账户
/// </summary>
public string ExchangeAccountCode { get; set; }
/// <summary>
/// 手续费
/// </summary>
public double Commission { get; set; }
/// <summary>
/// 手续费计算方式
/// </summary>
public CommissionType CommissionType { get; set; }
/// <summary>
/// 标的或场内期权到期日
/// </summary>
public DateTime? MaturityDate { get; set; }
/// <summary>
/// 期权代码
/// </summary>
public string OptionCode { get; set; }
/// <summary>
/// 看涨看跌
/// </summary>
public string OptionType { get; set; }
/// <summary>
/// 行权价
/// </summary>
public double? OptionStrike { get; set; }
/// <summary>
/// 行权方式
/// </summary>
public string ExerciseMode { get; set; }
/// <summary>
/// 是否有效
/// </summary>
public bool IsValid { get; set; } = true;
/// <summary>
/// 交易来源
/// </summary>
public string TradeSource { get; set; }
/// <summary>
/// 备注
/// </summary>
public string Comments { get; set; }
/// <summary>
/// 创建时间
/// </summary>
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}";
}
}
/// <summary>
/// 标的交易Dto
/// </summary>
[NotMapped]
public class ExchangeTradeDto : ExchangeTrade
{
/// <summary>
/// 簿记账户名称
/// </summary>
public string AssetBookName { get; set; }
/// <summary>
/// 标的代码
/// </summary>
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;
}
}
}
/// <summary>
/// 标的交易持仓记录Dto
/// </summary>
[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;
}
}
}
}