using Newtonsoft.Json; using YLErp.Models.Tag; namespace YLErp.DBModels { /// /// 包含所有期权交易要素的Model /// 属性字段的转换在前端处理或者使用方法 /// public class OtcOptionTradeFull : OtcTradeDto { /// /// 定价计算时的映射数据 /// public double? TTMDays { get; set; } /// /// 是否为系统自动的TTM /// public bool IsTTMSystem { get; set; } /// /// 目前东证专有 “Weekdays”——工作日,“Trading Days”——交易日, “Public Holidays”——公共假日 /// public int? Weekdays { get; set; } public int? TradingDays { get; set; } public int? PublicHolidays { get; set; } /// /// 计算ID(用于定价计算V2) /// public string CalcId { get; set; } /// /// 定价日期 /// public DateTime? ValueDate { get; set; } /// /// 定价模型名称 /// public string EngineName { get; set; } = ""; /// /// 交易对手方编号 /// public string ClientNumber { get; set; } #region----跨期权字段--- /// /// 观察方式(障碍期权(Discrete)+双鲨期权(Discrete)+二元期权) /// public string MonitorType { get; set; } /// /// 障碍价格(障碍期权BarrierPrice+气囊结构Barrier+双鲨期权低障碍价格) /// public double BarrierLow { get; set; } /// /// 高障碍价格(障碍期权UpperBarrierPrice+双鲨期权) /// public double? BarrierHigh { get; set; } #endregion #region---障碍期权--- //Discrete映射自MonitorType /// /// 障碍类型(障碍期权) /// public string BarrierType { get; set; } /// /// 障碍价格(障碍期权)(BarrierLow) /// [JsonIgnore] public double? BarrierPrice => BarrierLow; /// /// 高障碍价格(障碍期权)(BarrierHigh) /// [JsonIgnore] public double? UpperBarrierPrice => BarrierHigh; /// /// 障碍偏移(障碍期权) /// public double? BarrierShift { get; set; } /// /// 补偿按敲出日年化 /// public bool RebateAnnualizedAtKO { get; set; } /// /// 补偿计息规则 /// public string RebateDayCount { get; set; } #endregion #region----障碍期权+双鲨期权---- /// /// 补偿支付(障碍期权+双鲨期权) /// public string RebateType { get; set; } /// /// 补偿金额(障碍期权+双鲨期权) /// public double? Rebate { get; set; } /// /// 补偿金额(障碍期权+双鲨期权) /// public double? RebateRate { get; set; } #endregion #region----双鲨期权---- /// /// 高行权价(双鲨期权) /// public double? StrikeHigh { get; set; } /// /// 高障碍补偿金额(双鲨期权) /// public double? RebateHigh { get; set; } /// /// 高障碍补偿金额(双鲨期权) /// public double? RebateHighRate { get; set; } /// /// 高参与率 /// public double? CallParticipationRate { get; set; } /// /// 低参与率 /// public double? PutParticipationRate { get; set; } #endregion #region----二元期权+亚式期权+累计期权---- /// /// (二元期权)二元类型(亚式期权)均价计算 /// (累计期权)上端收益类型(浮动/固定(票息)) /// public string PayoffType { get; set; } #endregion #region----二元期权---- //MonitorType + RebateType /// /// 高障碍价格(二元期权)(统一BarrierHigh) /// [JsonIgnore] public double? UpperBarrier => BarrierHigh; /// /// 补偿金额(二元期权) /// public double? CashOrNothingAmount { get; set; } /// /// 高障碍补偿金额(二元期权) /// public double? CashOrNothingAmountHigh { get; set; } /// /// 补偿金额(二元期权) /// public double? CashOrNothingAmountRate { get; set; } /// /// 高障碍补偿金额(二元期权) /// public double? CashOrNothingAmountHighRate { get; set; } #endregion #region----亚式期权---- /// /// (亚式期权)行权价类型 /// public string StrikeType { get; set; } /// /// (亚式期权)结算类型 /// public string SettleMode { get; set; } /// /// (亚式期权)杠杆率 /// (累购累沽)(国君)杠杆倍数,(其他)看涨/看跌乘数 /// public double? StrikeGearingFactor { get; set; } = 1.0; /// /// (亚式期权)均价起算日 /// public DateTime? AveragingPeriodStartDate { get; set; } /// /// (亚式期权)增强价格 /// public double EnhancedPrice { get; set; } #endregion #region----区间累积期权---- /// /// 区间下限(区间累积期权) /// public double LowerRange { get; set; } /// /// 区间上限(区间累积期权) /// public double UpperRange { get; set; } /// /// 区间收益率(区间累积期权) /// public double BonusRate { get; set; } #endregion #region----凤凰期权+雪球期权---- /// /// 票息日历规则 /// public string CouponDayCount { get; set; } /// /// (凤凰期权+雪球期权)敲出价格 /// public double? KOBarrier { get; set; } /// ///(凤凰期权+雪球期权)期权敲入价格 /// public double KIBarrier { get; set; } /// /// 敲入期权行权价1(凤凰期权+雪球期权SpreadStrikeAtMaturity) /// public double? SpreadStrike1 { get; set; } /// /// 敲入期权行权价2(凤凰期权+雪球期权SpreadStrikeAtMaturity) /// public double? SpreadStrike { get; set; } /// /// (凤凰期权:票息)+(雪球期权:红利票息) /// public double Coupon { get; set; } /// /// (凤凰期权+雪球期权)票息是否年化(false:是,true:否) /// public bool IsFixedCoupon { get; set; } /// /// (凤凰期权+雪球期权)敲入到期支付类别 /// public KIPayoffTypeEnum KIPayoffType { get; set; } /// /// (凤凰期权+雪球期权)是否为期权年化,默认false /// public bool IsAnnualized2 { get; set; } /// /// (凤凰期权+雪球期权)年化系数 /// public double? AnnualizeFactor2 { get; set; } /// /// (凤凰期权+雪球期权)是否首日计息 /// public bool? CouponIncludeStartDate { get; set; } /// /// (凤凰期权+雪球期权)是否使用支付日期计息 /// public bool? CouponUsePaymentDate { get; set; } #endregion #region----凤凰期权---- /// /// (凤凰期权)派息障碍价格 /// public double CouponBarrier { get; set; } /// /// (凤凰期权)票息结算方式 -- 现金流交易, /// public CouponPayTypeEnum CouponPayType { get; set; } /// /// (凤凰期权)敲入未敲出仍支付票息 /// public bool IncludeCouponAfterKI { get; set; } #endregion #region----雪球期权---- /// /// (雪球期权)敲出赔付类别 /// public KOPayoffTypeEnum KOPayoffType { get; set; } /// /// (雪球期权)年化期权费率 /// public double? AnnualizedPremiumRate { get; set; } /// /// (雪球期权)票息 /// public double KORebate { get; set; } /// /// (雪球期权)敲出支付方式 /// public RebateTypeEnum KORebateType { get; set; } /// /// (雪球期权)敲出期权行权价1 /// public double? SpreadStrikeAtKO1 { get; set; } /// /// (雪球期权)敲出期权行权价2 /// public double? SpreadStrikeAtKO { get; set; } /// /// (雪球期权)[SpreadStrike]敲入期权行权价2 /// [JsonIgnore] public double? SpreadStrikeAtMaturity => SpreadStrike; /// /// (雪球期权)[SpreadStrike]敲入期权行权价1 /// [JsonIgnore] public double? SpreadStrikeAtMaturity1 => SpreadStrike1; /// /// 初始预付金率 /// public double? InitialAdvance { get; set; } /// /// 期间预付金率 /// public double? PeriodAdvance { get; set; } /// /// 前端收益费率 /// public double? FontEarning { get; set; } /// /// 追保线 /// public double? ConfirmedLine { get; set; } /// /// 追保比例下限 /// public double? ConfirmedFloor { get; set; } /// /// 是否初始敲入 /// public bool IsInitialKnockedIn { get; set; } //SpreadStrikeAtMaturity映射自SpreadStrike //SpreadStrikeAtMaturity1映射自SpreadStrike1 #endregion #region----专业雪球期权---- /// /// 预付金是否参与定价 /// public bool PrepaymentUsed { get; set; } /// /// 预付金比例 /// public double? PrepaymentRatio { get; set; } /// /// 预付金返息率 /// public double? PrepaymentInterestRate { get; set; } /// /// 预付金折现率 /// public double? PrepaymentConvertCashRate { get; set; } /// /// 终日是否计息 /// public bool CouponIncludeEndDate { get; set; } /// /// 增强参与率 /// public double EnhancedParticipationRate { get; set; } ///// ///// 敲入参与率 ///// //public double KiParticipationRate { get; set; } /// /// 保本比率 /// public double PrincipalProtectionRate { get; set; } /// /// 敲入观察设置,0:手动,1:每日观察,2:仅到期日观察 /// public KIObservationType KIObservationType { get; set; } = KIObservationType.EveryDay; #endregion #region----气囊结构---- /// /// 障碍价格(气囊结构)(BarrierLow) /// [JsonIgnore] public double Barrier => BarrierLow; /// /// 敲入后参与率(气囊结构) /// public double KIParticipationRate { get; set; } /// /// 收益封顶价(气囊结构) /// public double? HighStrike { get; set; } /// /// 是否收益封顶(气囊结构) /// public bool HasPayoffLimit { get; set; } /// /// 是否离散观察(气囊结构) /// public bool IsDiscreteMonitored { get; set; } public double? NotKIParticipationRate { get; set; } #endregion #region---收益增强结构---- /// /// 年化增强利率(收益增强结构) /// public double? AnnualizedEnhanceRate { get; set; } #endregion #region----现金流交易---- public double ProfitRate { get; set; } public CashFlowRateTypeEnum RateType { get; set; } public CashflowDepositTypeEnum DepositType { get; set; } /// /// 预付比例 /// public double PrepayRatio { get; set; } #endregion #region----累计期权---- /// /// 看涨乘数 /// public double CallMultiplier { get; set; } = 1; /// /// 看跌乘数 /// public double PutMultiplier { get; set; } = 1; /// /// 累计三段式 乘数1 /// public double Multiplier { get; set; } = 1; /// /// 累计三段式 乘数2 /// public double Multiplier2 { get; set; } = 1; /// /// 累计三段式 乘数3 /// public double Multiplier3 { get; set; } = 1; /// /// 结算方式(现金当日/现金期末/实物交割) /// public string SettlementMode { get; set; } /// /// 累计三段式 结算方式2 /// public string SettlementMode2 { get; set; } /// /// 累计三段式 结算方式3 /// public string SettlementMode3 { get; set; } /// /// 敲出是否终止 /// public bool EarlyTerminate { get; set; } /// /// 票息是否百分比格式 /// public bool CouponPercent { get; set; } = true; /// /// 累计类型(子弹)) /// public string AccumuType { get; set; } /// /// 累计类型 /// 标准 /// 三段式 /// public AccumulatorStructureTypeEnum AccumulatorStructureType { get; set; } /// /// 沽购数量 /// public double AccumuTradeAmount { get; set; } = 1.0; public double OriginalAccumuTradeAmount { get; set; } = 1.0; /// /// 远期到期日类型 /// 标的到期日 /// 期权到期日 /// 标的交割月前一交易日 /// public string ForwardDateType { get; set; } /// /// 累计三段式 远期到期日类型2 /// public string ForwardDateType2 { get; set; } /// /// 累计三段式 远期到期日类型3 /// public string ForwardDateType3 { get; set; } /// /// 远期期初价类型 /// 期权期初价格 /// 期权行权价格 /// public string ForwardPriceType { get; set; } /// /// 累计三段式 远期期初价类型2 /// public string ForwardPriceType2 { get; set; } /// /// 累计三段式 远期期初价类型3 /// public string ForwardPriceType3 { get; set; } /// /// 累计三段式 票息2 /// public double Coupon2 { get; set; } #endregion #region----自定义观察日---- /// /// 敲入观察日列表,一个或多个日期字符串,日期之间以逗号分隔 /// 例如:2019-07-16,2019-08-16 /// public string ObservationDates { get; set; } /// /// 敲出观察日 /// public string KOObservationDates { get; set; } /// /// 票息支付日期 /// public string KOObservationSettleDates { get; set; } #endregion #region---Risky期权--- /// /// 执行价格1 /// public double? Strike1 { get; set; } /// /// 执行价格2 /// public double? Strike2 { get; set; } /// /// 执行价格3 /// public double? Strike3 { get; set; } /// /// 参与率1 /// public double? ParticipationRate1 { get; set; } /// /// 参与率2 /// public double? ParticipationRate2 { get; set; } /// /// 参与率3 /// public double? ParticipationRate3 { get; set; } #endregion /// /// 敲入敲出状态 /// public string KnockInOutStatus { get; set; } /// /// 敲入敲出日期 /// public DateTime? KnockInOutDate { get; set; } public OtcOptionTradeFull Clone() { return (OtcOptionTradeFull)MemberwiseClone(); } /// /// 检查并尽可能修复此对象的数据 /// public void CheckAndRepairValues() { //交易日期 if (!TradeDate.HasValue || TradeDate.Value == default) { TradeDate = StartDate.HasValue && StartDate.Value != default ? StartDate : throw new ServiceException("缺少交易日期"); } else if (!StartDate.HasValue || StartDate.Value == default) { StartDate = TradeDate; } //交易方向 switch (BuySell?.ToLowerInvariant()) { case "买入": case "卖出": break; case "buy": BuySell = "买入"; break; case "sell": BuySell = "卖出"; break; default: if (string.IsNullOrWhiteSpace(BuySell)) { BuySell = "买入"; } else { throw new ServiceException("交易方向不支持:" + BuySell); } break; } //看涨看跌 switch (OptionType?.ToLowerInvariant()) { case "看涨": case "看跌": break; case "call": OptionType = "看涨"; break; case "put": OptionType = "看跌"; break; default: if (string.IsNullOrWhiteSpace(OptionType)) { OptionType = "看涨"; } else { throw new ServiceException("看涨看跌不支持:" + OptionType); } break; } //行权方式 switch (ExerciseMode?.ToLowerInvariant()) { case "european": case "american": break; case "欧式": ExerciseMode = "European"; break; case "美式": ExerciseMode = "American"; break; default: if (string.IsNullOrWhiteSpace(ExerciseMode)) { ExerciseMode = "European"; } else { throw new ServiceException("行权方式不支持:" + ExerciseMode); } break; } //亚式期权特定处理 if (TradeType == "亚式期权") { if (AveragingPeriodStartDate != null && AveragingPeriodStartDate.Value == default) { AveragingPeriodStartDate = null; } if (string.IsNullOrEmpty(PayoffType)) { PayoffType = "ArithmeticAverage"; //算术平均 } if (PayoffType == "EnhancedArithmeticAverage" && string.IsNullOrWhiteSpace(SettleMode)) { SettleMode = "AtHit"; } if (string.IsNullOrEmpty(StrikeType)) { StrikeType = "Fixed"; //固定行权价 } } else if (TradeType == "二元期权") { if (string.IsNullOrEmpty(MonitorType)) { MonitorType = "离散"; } } } /// /// 交易标签 /// public List Tags { get; set; } } }