Files
zszq-trs/YLErpDAL/Model/TradeDetailsReport.cs
T
2024-05-09 14:06:26 +08:00

316 lines
13 KiB
C#

using YLErp.Commons;
namespace YLErp.Model
{
public class TradeSingleDetailReport
{
public TradeSingleDetailReport()
{ }
public TradeSingleDetailReport(OtcTradeDetail tdDetail)
{
TdDetail = tdDetail;
MetaDic = new ExpandoDictionary<string, string>(TdDetail.MetaDic);
}
public OtcTradeDetail TdDetail { get; set; }
public ExpandoDictionary<string, string> 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<ExtendInfoModel> Propertys => TdDetail.Propertys ?? new List<ExtendInfoModel>();
}
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<TradeSingleDetailReport> TradeList { get; set; }
/// <summary>
/// 香草期权
/// </summary>
public List<TradeSingleDetailReport> Tradelist_Vanilla { get; set; }
/// <summary>
/// 远期交易
/// </summary>
public List<TradeSingleDetailReport> Tradelist_Forward { get; set; }
/// <summary>
/// 亚式期权
/// </summary>
public List<TradeSingleDetailReport> Tradelist_Asian { get; set; }
/// <summary>
/// 自定义期权
/// </summary>
public List<TradeSingleDetailReport> TradeList_Custom { get; set; }
public List<string> PropertyNames_Custom { get; set; }
/// <summary>
/// 凤凰期权
/// </summary>
public List<TradeSingleDetailReport> TradeList_Autocall { get; set; }
/// <summary>
/// 二元期权
/// </summary>
public List<TradeSingleDetailReport> TradeList_Binary { get; set; }
/// <summary>
/// 双鲨期权
/// </summary>
public List<TradeSingleDetailReport> TradeList_DbShark { get; set; }
/// <summary>
/// 气囊结构
/// </summary>
public List<TradeSingleDetailReport> TradeList_AirBag { get; set; }
/// <summary>
/// 区间累积
/// </summary>
public List<TradeSingleDetailReport> TradeList_RangeAcc { get; set; }
/// <summary>
/// 障碍期权
/// </summary>
public List<TradeSingleDetailReport> TradeList_Barrier { get; set; }
/// <summary>
/// 雪球期权
/// </summary>
public List<TradeSingleDetailReport> TradeList_Snowball { get; set; }
/// <summary>
/// 收益互换
/// </summary>
public List<TradeSingleDetailReport> TradeList_PayoffSwap { get; set; }
/// <summary>
/// 合成差价期权
/// </summary>
public List<TradeSingleDetailReport> TradeList_SSpread { get; set; }
/// <summary>
/// 收益增强结构
/// </summary>
public List<TradeSingleDetailReport> TradeList_Enhance { get; set; }
/// <summary>
/// 现金流交易
/// </summary>
public List<TradeSingleDetailReport> TradeList_Cashflow { get; set; }
/// <summary>
/// 累计期权
/// </summary>
public List<TradeSingleDetailReport> TradeList_Accumulator { get; set; }
/// <summary>
/// Risky交易
/// </summary>
public List<TradeSingleDetailReport> Tradelist_Risky { get; set; }
/// <summary>
/// 累计期权 三段式
/// </summary>
public List<TradeSingleDetailReport> TradeList_AccumulatorSegmented { get; set; }
/// <summary>
/// 其他组合交易
/// </summary>
public List<TradeSingleDetailReport> 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; }
/// <summary>
/// 有简称则用简称(应该是国君的需求)
/// </summary>
public string ClientName { get; set; }
/// <summary>
/// 客户全称
/// </summary>
public string ClientFullName { get; set; }
/// <summary>
/// 客户简称
/// </summary>
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; }
/// <summary>
/// 用于Excel导出模板(交易明细)
/// </summary>
public IEnumerable<string> BiaoTouLines { get; set; }
/// <summary>
/// 用于Excel导出模板(交易明细)
/// </summary>
public IEnumerable<string> 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日");
/// <summary>
/// 导出文件输出文件夹路径
/// </summary>
public string OutputFolder { get; set; }
//----------------------------------------------
// 以下用在交易明细模板中
//----------------------------------------------
public List<TradeSingleDetailReport> CreatedTradeList => CreatedModel.TradeList;
public List<TradeSingleDetailReport> CreatedTradeList_Barrier => CreatedModel.TradeList_Barrier;
public List<TradeSingleDetailReport> CreatedTradeList_Vanilla => CreatedModel.Tradelist_Vanilla;
public List<TradeSingleDetailReport> CreatedTradeList_Asian => CreatedModel.Tradelist_Asian;
public List<TradeSingleDetailReport> CreatedTradeList_Autocall => CreatedModel.TradeList_Autocall;
public List<TradeSingleDetailReport> CreatedTradeList_Binary => CreatedModel.TradeList_Binary;
public List<TradeSingleDetailReport> CreatedTradeList_Custom => CreatedModel.TradeList_Custom;
public List<TradeSingleDetailReport> CreatedTradeList_DbShark => CreatedModel.TradeList_DbShark;
public List<TradeSingleDetailReport> CreatedTradeList_PayoffSwap => CreatedModel.TradeList_PayoffSwap;
public List<TradeSingleDetailReport> CreatedTradeList_Snowball => CreatedModel.TradeList_Snowball;
public List<TradeSingleDetailReport> CreatedTradeList_RangeAcc => CreatedModel.TradeList_RangeAcc;
public List<TradeSingleDetailReport> CreatedTradeList_AirBag => CreatedModel.TradeList_AirBag;
public List<TradeSingleDetailReport> CreatedTradeList_SSpread => CreatedModel.TradeList_SSpread;
public List<TradeSingleDetailReport> CreatedTradeList_Enhance => CreatedModel.TradeList_Enhance;
public List<TradeSingleDetailReport> CreatedTradeList_Cashflow => CreatedModel.TradeList_Cashflow;
public List<TradeSingleDetailReport> CreatedTradeList_Accumulator => CreatedModel.TradeList_Accumulator;
public List<TradeSingleDetailReport> CreatedTradeList_Risky => CreatedModel.Tradelist_Risky;
public List<TradeSingleDetailReport> CreatedTradeList_AccumulatorSegmented => CreatedModel.TradeList_AccumulatorSegmented;
public List<TradeSingleDetailReport> CreatedTradeList_Others => CreatedModel.TradeList_Others;
public List<TradeSingleDetailReport> CreatedTradeList_Forward => CreatedModel.Tradelist_Forward;
public List<TradeSingleDetailReport> FinishedTradeList => FinishedModel.TradeList;
public List<TradeSingleDetailReport> MatureTradeList => MatureModel.TradeList;
}
}