using YLErp.Commons; namespace YLErp.Model { public class TradeSingleDetailReport { public TradeSingleDetailReport() { } public TradeSingleDetailReport(OtcTradeDetail tdDetail) { TdDetail = tdDetail; MetaDic = new ExpandoDictionary(TdDetail.MetaDic); } public OtcTradeDetail TdDetail { get; set; } public ExpandoDictionary MetaDic { get; } public string ClientName => TdDetail.ClientName; public string TradeNumber => TdDetail.TradeNumber; public string OriginalStockEqvNotional => TdDetail.OriginalStockEqvNotional.OtcFormatMoney(); public string AnnualizeFactor => TdDetail.AnnualizeFactor.OtcFormatUmPrice(); public string ParticipationRate => TdDetail.ParticipationRate.OtcFormatPercent(); public string PrincipalRate => TdDetail.PrincipalRate.OtcFormatPercent(); public string NoRiskRate => TdDetail.NoRiskRate.OtcFormatPercent(); public string BuySell => TdDetail.BuySell == "买入" ? "卖出" : "买入"; public string TradeDate => TdDetail.TradeDate?.ToString("yyyy-MM-dd"); public string ExerciseDate => TdDetail.ExerciseDate?.ToString("yyyy-MM-dd"); public string TradeMultipleType => TdDetail.TradeMultipleType; public string UnderlyingCode => TdDetail.UnderlyingCode; public string InitialSpotPrice_Calc => TdDetail.SpotPrice.OtcFormat(OtcFormatFlag.umprice); public double Strike => TdDetail.ActualStrike ?? 0; public string Lots => TdDetail.Lots.OtcFormatMoney(); public string StrikeString => TdDetail.GetStrikeString(); public double TradeSinglePrice => TdDetail.TradeSinglePrice ?? 0; public string TradeSinglePriceString => TdDetail.GetTradeSinglePriceString(); public string TradeOriginalAmount => TdDetail.TradeOriginalAmount.OtcFormatNotional(TdDetail.CountRatio,PS.Config.IsUseDisplayNotional); public double TradePrice => (TdDetail.TradePrice ?? 0) * ((TdDetail.BuySell == "买入" && TdDetail.TradeType!="远期") ? 1 : -1); public string UnwindType => TdDetail.TcAction == ClientCashInCashOut.系统操作_行权费 ? "美式行权" : TdDetail.TcExerciseWay == "敲出" ? "敲出" : "平仓"; public string ExerciseType { get { if (TdDetail.TradeStatus == ConsTrade.已到期 || TdDetail.TcFinalPrice < Strike && TdDetail.OptionType == "看涨" || TdDetail.TcFinalPrice > Strike && TdDetail.OptionType == "看跌") { return "虚值到期"; } return "实值行权"; } } public string UnwindDate => TdDetail.TcValueDate?.ToString("yyyy-MM-dd"); public string UnwindTradeAmount => TdDetail.TcAction == ClientCashInCashOut.系统操作_行权费 ? TdDetail.TcTradeAmount.OtcFormatNotional(TdDetail.CountRatio, PS.Config.IsUseDisplayNotional) : TdDetail.TcUnwindTradeAmount.OtcFormatNotional(TdDetail.CountRatio, PS.Config.IsUseDisplayNotional); public double SingleMinusAmount => Math.Abs(TdDetail.TcUnwindPrice ?? 0); public string SingleMinusAmountString { get { if (TdDetail.IsUsePremiumRate == true && TdDetail.TcAction != ClientCashInCashOut.系统操作_行权费) { return (Math.Abs(TdDetail.TcUnwindPricePercent ?? 0)).OtcFormat(OtcFormatFlag.premiumRateP); } else { return SingleMinusAmount.OtcFormatMoney(grouping: false); } } } public double MinusAmount => -TdDetail.TcAmount ?? 0; public double WinLoss => -TdDetail.WinLoss ?? 0; public string FinalPrice => TdDetail.TcFinalPrice.OtcFormatUmPrice(); public List Propertys => TdDetail.Propertys ?? new List(); } public class TradeDetailsModel { public double TradePriceSum { get; set; } public double MinusAmountSum { get; set; } public double WinLossSum { get; set; } public double VanillaTradePriceSum { get; set; } public double AsianTradePriceSum { get; set; } public double CustomTradePriceSum { get; set; } public double AutocallTradePriceSum { get; set; } public double BinaryTradePriceSum { get; set; } public double DbSharkTradePriceSum { get; set; } public double AirBagTradePriceSum { get; set; } public double RangeAccTradePriceSum { get; set; } public double BarrierTradePriceSum { get; set; } public double PayoffSwapTradePriceSum { get; set; } public double SSpreadTradePriceSum { get; set; } public double SnowballTradePriceSum { get; set; } public double CashflowTradePriceSum { get; set; } public double AccumulatorTradePriceSum { get; set; } public double RiskyTradePriceSum { get; set; } public double AccumulatorTradeSegmentedPriceSum { get; set; } public List TradeList { get; set; } /// /// 香草期权 /// public List Tradelist_Vanilla { get; set; } /// /// 远期交易 /// public List Tradelist_Forward { get; set; } /// /// 亚式期权 /// public List Tradelist_Asian { get; set; } /// /// 自定义期权 /// public List TradeList_Custom { get; set; } public List PropertyNames_Custom { get; set; } /// /// 凤凰期权 /// public List TradeList_Autocall { get; set; } /// /// 二元期权 /// public List TradeList_Binary { get; set; } /// /// 双鲨期权 /// public List TradeList_DbShark { get; set; } /// /// 气囊结构 /// public List TradeList_AirBag { get; set; } /// /// 区间累积 /// public List TradeList_RangeAcc { get; set; } /// /// 障碍期权 /// public List TradeList_Barrier { get; set; } /// /// 雪球期权 /// public List TradeList_Snowball { get; set; } /// /// 收益互换 /// public List TradeList_PayoffSwap { get; set; } /// /// 合成差价期权 /// public List TradeList_SSpread { get; set; } /// /// 收益增强结构 /// public List TradeList_Enhance { get; set; } /// /// 现金流交易 /// public List TradeList_Cashflow { get; set; } /// /// 累计期权 /// public List TradeList_Accumulator { get; set; } /// /// Risky交易 /// public List Tradelist_Risky { get; set; } /// /// 累计期权 三段式 /// public List TradeList_AccumulatorSegmented { get; set; } /// /// 其他组合交易 /// public List TradeList_Others { get; set; } } public class TradeDetailsReport { public YLErp.Configuration.IErpConfig Config => PS.Config.ErpElement; public string CompanyName { get; set; } public string ClientNumber { get; set; } public int? ClientId { get; set; } /// /// 有简称则用简称(应该是国君的需求) /// public string ClientName { get; set; } /// /// 客户全称 /// public string ClientFullName { get; set; } /// /// 客户简称 /// public string ClientAbbreviation { get; set; } public DateTime ReportStart { get; set; } public DateTime ReportEnd { get; set; } public DateTime ReportNow { get; set; } public string ReportDateRange { get { //var startDate = ReportStart == DateTime.MinValue && CreatedModel.TradeList?.Count > 0 // ? CreatedModel.TradeList.OrderBy(t => t.TradeDate).First().ContractGroup.trade.TradeDate.Value // : ReportStart; var startDate = ReportStart; if (startDate == DateTime.MinValue) { return $"{ReportEnd:yyyy/MM/dd}"; } return $"{startDate:yyyy/MM/dd}-{ReportEnd:yyyy/MM/dd}"; } } public string BiaoTou { get; set; } public string BiaoWei { get; set; } /// /// 用于Excel导出模板(交易明细) /// public IEnumerable BiaoTouLines { get; set; } /// /// 用于Excel导出模板(交易明细) /// public IEnumerable BiaoWeiLines { get; set; } public string LuoKuan { get; set; } public TradeDetailsModel CreatedModel { get; set; } public TradeDetailsModel FinishedModel { get; set; } public TradeDetailsModel MatureModel { get; set; } public string Today => DateTime.Now.ToString("yyyy年M月d日"); /// /// 导出文件输出文件夹路径 /// public string OutputFolder { get; set; } //---------------------------------------------- // 以下用在交易明细模板中 //---------------------------------------------- public List CreatedTradeList => CreatedModel.TradeList; public List CreatedTradeList_Barrier => CreatedModel.TradeList_Barrier; public List CreatedTradeList_Vanilla => CreatedModel.Tradelist_Vanilla; public List CreatedTradeList_Asian => CreatedModel.Tradelist_Asian; public List CreatedTradeList_Autocall => CreatedModel.TradeList_Autocall; public List CreatedTradeList_Binary => CreatedModel.TradeList_Binary; public List CreatedTradeList_Custom => CreatedModel.TradeList_Custom; public List CreatedTradeList_DbShark => CreatedModel.TradeList_DbShark; public List CreatedTradeList_PayoffSwap => CreatedModel.TradeList_PayoffSwap; public List CreatedTradeList_Snowball => CreatedModel.TradeList_Snowball; public List CreatedTradeList_RangeAcc => CreatedModel.TradeList_RangeAcc; public List CreatedTradeList_AirBag => CreatedModel.TradeList_AirBag; public List CreatedTradeList_SSpread => CreatedModel.TradeList_SSpread; public List CreatedTradeList_Enhance => CreatedModel.TradeList_Enhance; public List CreatedTradeList_Cashflow => CreatedModel.TradeList_Cashflow; public List CreatedTradeList_Accumulator => CreatedModel.TradeList_Accumulator; public List CreatedTradeList_Risky => CreatedModel.Tradelist_Risky; public List CreatedTradeList_AccumulatorSegmented => CreatedModel.TradeList_AccumulatorSegmented; public List CreatedTradeList_Others => CreatedModel.TradeList_Others; public List CreatedTradeList_Forward => CreatedModel.Tradelist_Forward; public List FinishedTradeList => FinishedModel.TradeList; public List MatureTradeList => MatureModel.TradeList; } }