316 lines
13 KiB
C#
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;
|
|
}
|
|
}
|