1258 lines
31 KiB
C#
1258 lines
31 KiB
C#
using Qdp.Foundation.Implementations;
|
|
using Qdp.Pricing.Base.Enums;
|
|
using Qdp.Pricing.Base.Implementations;
|
|
using YLErp.Enums;
|
|
using YLErp.QdpModule;
|
|
using YLErp.ThirdParty.CaculatePrice.DongZheng.Dto;
|
|
|
|
namespace YLErp.Modules.CalculationModule
|
|
{
|
|
#region----基类----
|
|
|
|
/// <summary>
|
|
/// 期权交易要素
|
|
/// </summary>
|
|
public abstract class OptionTradeParamBase
|
|
{
|
|
/// <summary>
|
|
/// 交易类型
|
|
/// </summary>
|
|
public abstract string tradeType { get; }
|
|
|
|
/// <summary>
|
|
/// 标的代码
|
|
/// </summary>
|
|
public string[] underlyingTickers { get; set; }
|
|
|
|
/// <summary>
|
|
/// 行权价
|
|
/// </summary>
|
|
public double strike { get; set; }
|
|
|
|
/// <summary>
|
|
/// 开始日期
|
|
/// </summary>
|
|
public Date startDate { get; set; }
|
|
|
|
Date _tradeDate;
|
|
|
|
/// <summary>
|
|
/// tradeDate(未赋值时返回startDate)
|
|
/// </summary>
|
|
public Date tradeDate
|
|
{
|
|
get => _tradeDate ?? startDate;
|
|
set => _tradeDate = value;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 标的到期日
|
|
/// endDate必须有值否则QDP会报错
|
|
/// </summary>
|
|
public Date endDate { get; set; }
|
|
|
|
/// <summary>
|
|
/// 行权期日
|
|
/// </summary>
|
|
public Date exerciseDate { get; set; }
|
|
|
|
/// <summary>
|
|
/// 行权期日(原始值)
|
|
/// </summary>
|
|
public Date originalExerciseDate
|
|
{
|
|
get => _originalExerciseDate ?? exerciseDate;
|
|
set => _originalExerciseDate = value;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 结算日期
|
|
/// </summary>
|
|
public Date settlementDate { get; set; }
|
|
|
|
/// <summary>
|
|
/// 行权类型(European|American)
|
|
/// </summary>
|
|
public virtual string exerciseType { get; set; }
|
|
|
|
private string _buySell = "Buy";
|
|
|
|
/// <summary>
|
|
/// trade.BuySell的转换处理
|
|
/// </summary>
|
|
public string buysell
|
|
{
|
|
get => _buySell;
|
|
set => _buySell = value == "Buy" || value == "买入" || string.IsNullOrWhiteSpace(value) ? "Buy" : "Sell";
|
|
}
|
|
|
|
/// <summary>
|
|
/// 无风险利率
|
|
/// </summary>
|
|
public double riskFreeRate { get; set; }
|
|
|
|
/// <summary>
|
|
/// 分红率
|
|
/// </summary>
|
|
public double dividendRate { get; set; }
|
|
|
|
string _underlyingInstrumentType;
|
|
private Date _originalExerciseDate;
|
|
|
|
/// <summary>
|
|
/// 标的资产类型
|
|
/// </summary>
|
|
public string underlyingInstrumentType
|
|
{
|
|
get => _underlyingInstrumentType;
|
|
set => _underlyingInstrumentType = ConsGlobal.InstrumentType.ConvertCalcType(value,true);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 看涨看跌(Call|Put)
|
|
/// </summary>
|
|
public virtual OptionType optionType { get; set; }
|
|
|
|
/// <summary>
|
|
/// 看涨看跌(Call|Put)
|
|
/// optionType的别名
|
|
/// </summary>
|
|
public OptionType callput
|
|
{
|
|
get => optionType;
|
|
set => optionType = value;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 份额
|
|
/// </summary>
|
|
public double notional { get; set; }
|
|
|
|
/// <summary>
|
|
/// 行权价是否百分比格式(有可能trade上是true但这个值取false,比如处理累计期权就固定取了false)
|
|
/// </summary>
|
|
public bool isMoneynessOption { get; set; }
|
|
|
|
/// <summary>
|
|
/// 行权价是否百分比格式()
|
|
/// </summary>
|
|
internal bool isMoneynessOptionOrigianl { get; set; }
|
|
|
|
/// <summary>
|
|
/// 期初标的价格
|
|
/// </summary>
|
|
public double initialSpotPrice { get; set; }
|
|
|
|
/// <summary>
|
|
/// 是否有夜盘
|
|
/// </summary>
|
|
public bool hasNightMarket { get; set; }
|
|
|
|
/// <summary>
|
|
/// 参与率
|
|
/// </summary>
|
|
public double participationRate { get; set; } = 1.0;
|
|
|
|
/// <summary>
|
|
/// 保底收益率
|
|
/// </summary>
|
|
public double principalRate { get; set; }
|
|
|
|
/// <summary>
|
|
/// 是否期权年化
|
|
/// </summary>
|
|
public virtual bool isAnnualized { get; set; }
|
|
|
|
/// <summary>
|
|
/// 期权年化系数
|
|
/// </summary>
|
|
public double annualizedFactor { get; set; } = 1.0;
|
|
|
|
/// <summary>
|
|
/// 是否使用精确时间模式
|
|
/// </summary>
|
|
public bool preciseTimeMode { get; set; }
|
|
|
|
/// <summary>
|
|
/// 交易ID
|
|
/// </summary>
|
|
public string tradeId { get; set; }
|
|
|
|
/// <summary>
|
|
/// 交易编号
|
|
/// </summary>
|
|
public string tradeNumber { get; set; }
|
|
|
|
/// <summary>
|
|
/// ttmDays
|
|
/// </summary>
|
|
public double timeToMaturityDays { get; set; } = double.NaN;
|
|
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public Dictionary<Date, double> dividends { get; set; }
|
|
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public string[] volSurfaceNames { get; set; }
|
|
|
|
/// <summary>
|
|
/// 是否合成远期交易(除香草和合成价差外其他都应该是false)
|
|
/// </summary>
|
|
public bool isForwardTrade { get; set; }
|
|
|
|
public override string ToString()
|
|
{
|
|
return tradeType;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 对象克隆
|
|
/// </summary>
|
|
public OptionTradeParamBase Clone()
|
|
{
|
|
return (OptionTradeParamBase)MemberwiseClone();
|
|
}
|
|
|
|
/// <summary>
|
|
/// 获取绝对行权价
|
|
/// </summary>
|
|
public double GetAbsStrike()
|
|
{
|
|
return isMoneynessOption ? strike * initialSpotPrice : strike;
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region----香草期权----
|
|
|
|
/// <summary>
|
|
/// 香草期权
|
|
/// </summary>
|
|
public class VanillaOptionTradeParam : OptionTradeParamBase
|
|
{
|
|
public override string tradeType => "香草期权";
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region----合成价差期权----
|
|
|
|
/// <summary>
|
|
/// 合成价差期权
|
|
/// </summary>
|
|
public class SSpreadOptionTradeParam : OptionTradeParamBase
|
|
{
|
|
public override string tradeType => "合成价差期权";
|
|
|
|
/// <summary>
|
|
/// 合约系数
|
|
/// </summary>
|
|
public double[] coefficients { get; set; }
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region----彩虹期权----
|
|
|
|
/// <summary>
|
|
/// 彩虹期权
|
|
/// </summary>
|
|
public class RainbowOptionTradeParam : OptionTradeParamBase
|
|
{
|
|
public override string tradeType => "彩虹期权";
|
|
|
|
public double[] strikes { get; set; }
|
|
|
|
public string rainbowType { get; set; }
|
|
|
|
public double cashAmount { get; set; }
|
|
|
|
public double correlation { get; set; }
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region----亚式期权----
|
|
|
|
/// <summary>
|
|
/// 亚式期权
|
|
/// </summary>
|
|
public class AsianOptionTradeParam : OptionTradeParamBase
|
|
{
|
|
public override string tradeType => "亚式期权";
|
|
|
|
/// <summary>
|
|
/// 亚式期权类型
|
|
/// </summary>
|
|
public string payoffType { get; set; }
|
|
|
|
/// <summary>
|
|
/// 结算类型
|
|
/// </summary>
|
|
public string settleMode { get; set; }
|
|
|
|
/// <summary>
|
|
/// 行权价类型
|
|
/// </summary>
|
|
public string strikeStyle { get; set; }
|
|
|
|
/// <summary>
|
|
/// 杠杆率
|
|
/// </summary>
|
|
public double strikeGearingFactor { get; set; } = 1;
|
|
|
|
/// <summary>
|
|
/// fixing
|
|
/// </summary>
|
|
public string fixings { get; set; }
|
|
|
|
/// <summary>
|
|
/// 起算日
|
|
/// </summary>
|
|
public Date averagingPeriodStartDate { get; set; }
|
|
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public string observationDateStr { get; set; }
|
|
|
|
/// <summary>
|
|
/// 增强价格
|
|
/// </summary>
|
|
public double enhancedPrice { get; set; }
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region----障碍期权----
|
|
|
|
/// <summary>
|
|
/// 障碍期权
|
|
/// </summary>
|
|
public class BarrierOptionTradeParam : OptionTradeParamBase
|
|
{
|
|
public override string tradeType => "障碍期权";
|
|
|
|
/// <summary>
|
|
/// 障碍类型
|
|
/// </summary>
|
|
public string barrierType { get; set; }
|
|
|
|
/// <summary>
|
|
/// 障碍价格
|
|
/// </summary>
|
|
public double barrierPrice { get; set; }
|
|
|
|
/// <summary>
|
|
/// 高障碍价格
|
|
/// </summary>
|
|
public double upperBarrierPrice { get; set; }
|
|
|
|
/// <summary>
|
|
/// 是否离散观察
|
|
/// </summary>
|
|
public bool isDiscrete { get; set; }
|
|
|
|
/// <summary>
|
|
/// 敲入观察频率
|
|
/// </summary>
|
|
public string observationDateStr { get; set; }
|
|
|
|
/// <summary>
|
|
/// 补偿金额
|
|
/// </summary>
|
|
public double rebate { get; set; }
|
|
|
|
/// <summary>
|
|
/// 高障碍补偿金额
|
|
/// </summary>
|
|
public double rebateHigh { get; set; }
|
|
|
|
/// <summary>
|
|
/// 补偿支付类型
|
|
/// </summary>
|
|
public string rebateType { get; set; } = string.Empty;
|
|
|
|
/// <summary>
|
|
/// 障碍偏移
|
|
/// </summary>
|
|
public double barrierShift { get; set; }
|
|
|
|
/// <summary>
|
|
/// 敲入状态
|
|
/// </summary>
|
|
public string barrierStatus { get; set; } = "Monitoring";
|
|
|
|
/// <summary>
|
|
/// 补偿按敲出日年化
|
|
/// </summary>
|
|
public bool rebateAnnualizedAtKO { get; set; }
|
|
|
|
/// <summary>
|
|
/// 补偿计息规则
|
|
/// </summary>
|
|
public string rebateDayCount { get; set; }
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region----二元期权----
|
|
|
|
/// <summary>
|
|
/// 二元期权
|
|
/// </summary>
|
|
public class BinaryOptionTradeParam : OptionTradeParamBase
|
|
{
|
|
public override string tradeType => "二元期权";
|
|
|
|
/// <summary>
|
|
/// 看涨看跌
|
|
/// </summary>
|
|
public override OptionType optionType
|
|
{
|
|
get => ConsGlobal.ExerciseMode.IsAmerican(exerciseType) ? OptionType.Call : base.optionType;
|
|
set => base.optionType = value;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 二元类型
|
|
/// </summary>
|
|
public string payoffType { get; set; }
|
|
|
|
/// <summary>
|
|
/// 高障碍价格
|
|
/// </summary>
|
|
public double upperBarrier { get; set; } = double.NaN;
|
|
|
|
/// <summary>
|
|
/// 补偿金额
|
|
/// </summary>
|
|
public double cashOrNothingAmount { get; set; }
|
|
|
|
/// <summary>
|
|
/// 高障碍补偿金额
|
|
/// </summary>
|
|
public double cashOrNothingAmountHigh { get; set; } = double.NaN;
|
|
|
|
/// <summary>
|
|
/// 是否离散观察
|
|
/// </summary>
|
|
public bool isDiscreteMonitored { get; set; }
|
|
/// <summary>
|
|
/// 敲入观察频率
|
|
/// </summary>
|
|
public string observationDateStr { get; set; }
|
|
|
|
/// <summary>
|
|
/// 补偿支付
|
|
/// </summary>
|
|
public string binaryRebateType { get; set; } = "AtEnd";
|
|
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public string binaryOptionReplicationStrategy { get; set; } = "None";
|
|
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public double replicationShiftSize { get; set; }
|
|
|
|
/// <summary>
|
|
/// 补偿按敲出日年化
|
|
/// </summary>
|
|
public bool rebateAnnualizedAtKO { get; set; }
|
|
|
|
/// <summary>
|
|
/// 补偿计息规则
|
|
/// </summary>
|
|
public string rebateDayCount { get; set; }
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region----价差期权----
|
|
|
|
/// <summary>
|
|
/// 价差期权
|
|
/// </summary>
|
|
public class SpreadOptionTradeParam : OptionTradeParamBase
|
|
{
|
|
public override string tradeType => "价差期权";
|
|
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public double[] weights { get; set; }
|
|
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public SpreadType spreadType { get; set; }
|
|
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public double[] correlations { get; set; }
|
|
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public double[] dividendRates { get; set; }
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region----双鲨期权----
|
|
|
|
/// <summary>
|
|
/// 双鲨期权
|
|
/// </summary>
|
|
public class DoubleSharkFinOptionTradeParam : OptionTradeParamBase
|
|
{
|
|
public override string tradeType => "双鲨期权";
|
|
|
|
/// <summary>
|
|
/// 低行权价
|
|
/// </summary>
|
|
public double strikeLow { get; set; }
|
|
|
|
/// <summary>
|
|
/// 高行权价
|
|
/// </summary>
|
|
public double strikeHigh { get; set; }
|
|
|
|
/// <summary>
|
|
/// 高障碍价格
|
|
/// </summary>
|
|
public double barrierHigh { get; set; }
|
|
|
|
/// <summary>
|
|
/// 低障碍价格
|
|
/// </summary>
|
|
public double barrierLow { get; set; }
|
|
|
|
/// <summary>
|
|
/// 高参与率
|
|
/// </summary>
|
|
public double callParticipationRate { get; set; }
|
|
|
|
/// <summary>
|
|
/// 低参与率
|
|
/// </summary>
|
|
public double putParticipationRate { get; set; }
|
|
|
|
/// <summary>
|
|
/// 补偿金额
|
|
/// </summary>
|
|
public double rebate { get; set; }
|
|
|
|
/// <summary>
|
|
/// 高补偿金额
|
|
/// </summary>
|
|
public double rebateHigh { get; set; } = double.NaN;
|
|
|
|
/// <summary>
|
|
/// 补偿支付方式
|
|
/// </summary>
|
|
public string rebateType { get; set; } = string.Empty;
|
|
|
|
/// <summary>
|
|
/// 是否离散观察
|
|
/// </summary>
|
|
public bool isDiscrete { get; set; }
|
|
|
|
/// <summary>
|
|
/// 敲入观察频率
|
|
/// </summary>
|
|
public string observationDateStr { get; set; }
|
|
|
|
/// <summary>
|
|
/// 敲入敲出状态
|
|
/// </summary>
|
|
public string barrierStatus { get; set; } = "Monitoring";
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region----凤凰期权----
|
|
|
|
/// <summary>
|
|
/// 凤凰期权
|
|
/// </summary>
|
|
public class AutocallOptionTradeParam : OptionTradeParamBase
|
|
{
|
|
public override string tradeType => "凤凰期权";
|
|
|
|
/// <summary>
|
|
/// 行权类型(European|American)
|
|
/// </summary>
|
|
public override string exerciseType
|
|
{
|
|
get => "European";
|
|
set { }
|
|
}
|
|
|
|
/// <summary>
|
|
/// 票息
|
|
/// </summary>
|
|
public double coupon { get; set; }
|
|
|
|
/// <summary>
|
|
/// 票息年化
|
|
/// </summary>
|
|
public bool isFixedCoupon { get; set; }
|
|
|
|
/// <summary>
|
|
/// 票息日历规则
|
|
/// </summary>
|
|
public string couponDayCount { get; set; }
|
|
|
|
/// <summary>
|
|
/// 票息障碍价格
|
|
/// </summary>
|
|
public double couponBarrier { get; set; }
|
|
|
|
/// <summary>
|
|
/// 票息当期支付
|
|
/// </summary>
|
|
public bool couponPayAtMaturity { get; set; }
|
|
|
|
/// <summary>
|
|
/// 敲出障碍价格
|
|
/// </summary>
|
|
public double koBarrier { get; set; }
|
|
|
|
/// <summary>
|
|
/// 敲出观察频率
|
|
/// </summary>
|
|
public string koObservationDateStr { get; set; }
|
|
|
|
/// <summary>
|
|
/// 敲入障碍价格
|
|
/// </summary>
|
|
public double kiBarrier { get; set; }
|
|
|
|
/// <summary>
|
|
/// 敲入观察频率
|
|
/// </summary>
|
|
public string observationDateStr { get; set; }
|
|
|
|
/// <summary>
|
|
/// 敲入未敲出仍支付票息
|
|
/// </summary>
|
|
public bool includeCouponAfterKI { get; set; }
|
|
|
|
/// <summary>
|
|
/// 敲入期权行权价2
|
|
/// </summary>
|
|
public double spreadStrike { get; set; }
|
|
|
|
/// <summary>
|
|
/// 敲入期权类型(默认:Put)
|
|
/// </summary>
|
|
public string kiOptionType { get; set; } = "Put";
|
|
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public string barrierStatus { get; set; } = "Monitoring";
|
|
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public List<autocall_observation> happenedObservations { get; set; }
|
|
|
|
/// <summary>
|
|
/// 期权年化
|
|
/// </summary>
|
|
public override bool isAnnualized
|
|
{
|
|
get => annualizedOptionPayoff;
|
|
set => annualizedOptionPayoff = value;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 期权年化
|
|
/// </summary>
|
|
public bool annualizedOptionPayoff { get; set; }
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region----雪球期权----
|
|
|
|
/// <summary>
|
|
/// 雪球期权
|
|
/// </summary>
|
|
public class SnowballOptionTradeParam : OptionTradeParamBase
|
|
{
|
|
public override string tradeType => "雪球期权";
|
|
|
|
/// <summary>
|
|
/// 行权类型(European|American)
|
|
/// </summary>
|
|
public override string exerciseType
|
|
{
|
|
get => "European";
|
|
set { }
|
|
}
|
|
|
|
#region 敲出设置
|
|
|
|
/// <summary>
|
|
/// 敲出障碍价格
|
|
/// </summary>
|
|
public double koBarrier { get; set; }
|
|
|
|
/// <summary>
|
|
/// 敲出观察日期
|
|
/// </summary>
|
|
public string koObservationDateStr { get; set; }
|
|
|
|
/// <summary>
|
|
/// 票息支付日期
|
|
/// </summary>
|
|
public string couponPaymentDateStr { get; set; }
|
|
|
|
/// <summary>
|
|
/// 敲出票息率
|
|
/// </summary>
|
|
public double koRebate { get; set; }
|
|
|
|
/// <summary>
|
|
/// 票息日历规则
|
|
/// </summary>
|
|
public string couponDayCount { get; set; }
|
|
|
|
/// <summary>
|
|
/// 是否固定票息
|
|
/// </summary>
|
|
public bool isFixedCoupon { get; set; }
|
|
|
|
/// <summary>
|
|
/// 是否敲出转期权
|
|
/// </summary>
|
|
public bool useOptionPayoffAtKO { get; set; }
|
|
|
|
/// <summary>
|
|
/// 敲出转期权类型(默认:Call)
|
|
/// </summary>
|
|
public OptionType koOptionType { get; set; } = OptionType.Call;
|
|
|
|
/// <summary>
|
|
/// 敲出期权行权价1(敲出转期权时使用)
|
|
/// </summary>
|
|
public double koStrike { get; set; } = double.NaN;
|
|
|
|
/// <summary>
|
|
/// 敲出期权行权价2(敲出装价差期权时使用)
|
|
/// </summary>
|
|
public double spreadStrikeAtKO { get; set; }
|
|
|
|
/// <summary>
|
|
/// 已经被废弃(界面已经没有可输入的地方)
|
|
/// </summary>
|
|
public double koBarrierAdjustStep { get; set; }
|
|
|
|
#endregion
|
|
|
|
#region 敲入设置
|
|
|
|
/// <summary>
|
|
/// 敲入转期权类型(默认:Put)
|
|
/// </summary>
|
|
public OptionType kiOptionType { get; set; } = OptionType.Put;
|
|
|
|
/// <summary>
|
|
/// 敲入障碍价格
|
|
/// </summary>
|
|
public double kiBarrier { get; set; }
|
|
|
|
/// <summary>
|
|
/// 敲入观察频率
|
|
/// </summary>
|
|
public string observationDateStr { get; set; }
|
|
|
|
/// <summary>
|
|
/// 未敲出转期权
|
|
/// </summary>
|
|
public bool useOptionPayoffAtMaturity { get; set; }
|
|
|
|
/// <summary>
|
|
/// 敲入期权行权价2
|
|
/// </summary>
|
|
public double spreadStrikeAtMaturity { get; set; }
|
|
|
|
#endregion
|
|
|
|
/// <summary>
|
|
/// 红利票息
|
|
/// </summary>
|
|
public double coupon { get; set; }
|
|
|
|
/// <summary>
|
|
/// 年化期权费率(用于年化权利金模式的保本雪球)
|
|
/// </summary>
|
|
public double? annualizedPremiumRate { get; set; }
|
|
|
|
/// <summary>
|
|
/// 敲入敲出状态
|
|
/// </summary>
|
|
public string barrierStatus { get; set; } = "Monitoring";
|
|
|
|
/// <summary>
|
|
/// 期权年化
|
|
/// </summary>
|
|
public override bool isAnnualized
|
|
{
|
|
get => annualizedOptionPayoff;
|
|
set => annualizedOptionPayoff = value;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 期权年化
|
|
/// </summary>
|
|
public bool annualizedOptionPayoff { get; set; }
|
|
}
|
|
|
|
/// <summary>
|
|
/// 专业版雪球
|
|
/// </summary>
|
|
public class SnowballSpecialistOptionTradeParam : SnowballOptionTradeParam
|
|
{
|
|
public override string tradeType => "专业雪球期权";
|
|
|
|
/// <summary>
|
|
/// 行权类型(European|American)
|
|
/// </summary>
|
|
public override string exerciseType
|
|
{
|
|
get => "European";
|
|
set { }
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// 预付金是否参与定价
|
|
/// </summary>
|
|
public bool PrepaymentUsed { get; set; }
|
|
/// <summary>
|
|
/// 预付金比例
|
|
/// </summary>
|
|
public double PrepaymentRatio { get; set; }
|
|
/// <summary>
|
|
/// 预付金返息率
|
|
/// </summary>
|
|
public double PrepaymentInterestRate { get; set; }
|
|
|
|
/// <summary>
|
|
/// 预付金折现率
|
|
/// </summary>
|
|
public double? PrepaymentConvertCashRate { get; set; }
|
|
|
|
/// <summary>
|
|
/// 终日是否计息
|
|
/// </summary>
|
|
public bool CouponIncludeEndDate { get; set; }
|
|
/// <summary>
|
|
/// 增强参与率
|
|
/// </summary>
|
|
public double EnhancedParticipationRate { get; set; }
|
|
/// <summary>
|
|
/// 敲入参与率
|
|
/// </summary>
|
|
public double KIParticipationRate { get; set; }
|
|
/// <summary>
|
|
/// 保本比率
|
|
/// </summary>
|
|
public double PrincipalProtectionRate { get; set; }
|
|
/// <summary>
|
|
/// 敲入观察设置,0:手动,1:每日观察,2:仅到期日观察
|
|
/// </summary>
|
|
public KIObservationType KIObservationType { get; set; }
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region---气囊结构----
|
|
|
|
/// <summary>
|
|
/// 气囊结构
|
|
/// </summary>
|
|
public class AirBagOptionTradeParam : OptionTradeParamBase
|
|
{
|
|
public override string tradeType => "气囊结构";
|
|
|
|
/// <summary>
|
|
/// 障碍价格
|
|
/// </summary>
|
|
public double barrier { get; set; }
|
|
|
|
/// <summary>
|
|
/// 高行权价
|
|
/// </summary>
|
|
public double highStrike { get; set; }
|
|
|
|
/// <summary>
|
|
/// 敲入参与率
|
|
/// </summary>
|
|
public double kiParticipationRate { get; set; }
|
|
|
|
/// <summary>
|
|
/// 是否收益封顶
|
|
/// </summary>
|
|
public bool hasPayoffLimit { get; set; }
|
|
|
|
/// <summary>
|
|
/// 是否离散观察
|
|
/// </summary>
|
|
public bool isDiscrete { get; set; }
|
|
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public string observationDateStr { get; set; }
|
|
|
|
/// <summary>
|
|
/// 敲入敲出状态
|
|
/// </summary>
|
|
public string barrierStatus { get; set; } = "Monitoring";
|
|
|
|
/// <summary>
|
|
/// 看涨看跌
|
|
/// </summary>
|
|
public override OptionType optionType
|
|
{
|
|
get => OptionType.Call;
|
|
set { }
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region----收益增强结构----
|
|
|
|
/// <summary>
|
|
/// 收益增强结构
|
|
/// </summary>
|
|
public class UnderlyingEnhanceTradeParam : OptionTradeParamBase
|
|
{
|
|
public override string tradeType => "收益增强结构";
|
|
|
|
/// <summary>
|
|
/// 看涨看跌
|
|
/// </summary>
|
|
public override OptionType optionType
|
|
{
|
|
get => OptionType.Call;
|
|
set { }
|
|
}
|
|
|
|
public double annualizedEnhanceRate { get; set; }
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region----区间累积----
|
|
|
|
/// <summary>
|
|
/// 区间累积结构
|
|
/// </summary>
|
|
public class RangeAccrualTradeParam : OptionTradeParamBase
|
|
{
|
|
public override string tradeType => "区间累积期权";
|
|
|
|
/// <summary>
|
|
/// 行权类型(European|American)
|
|
/// </summary>
|
|
public override string exerciseType
|
|
{
|
|
get => "European";
|
|
set { }
|
|
}
|
|
|
|
/// <summary>
|
|
/// 看涨看跌
|
|
/// </summary>
|
|
public override OptionType optionType
|
|
{
|
|
get => OptionType.Call;
|
|
set { }
|
|
}
|
|
|
|
public double lowerRange { get; set; }
|
|
|
|
public double upperRange { get; set; }
|
|
|
|
public double bonusRate { get; set; }
|
|
|
|
public string observationDateStr { get; set; }
|
|
|
|
public string fixings { get; set; }
|
|
|
|
public List<autocall_observation> happenedObservations { get; set; }
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region----累计期权----
|
|
|
|
/// <summary>
|
|
/// 标准累计期权
|
|
/// </summary>
|
|
public class AccumulatorOptionTradeParam : OptionTradeParamBase
|
|
{
|
|
public override string tradeType => "累计期权";
|
|
|
|
/// <summary>
|
|
/// 看涨乘数
|
|
/// </summary>
|
|
public double CallMultiplier { get; set; }
|
|
|
|
/// <summary>
|
|
/// 看跌乘数
|
|
/// </summary>
|
|
public double PutMultiplier { get; set; }
|
|
|
|
/// <summary>
|
|
/// 敲出是否终止
|
|
/// </summary>
|
|
public bool EarlyTerminate { get; set; }
|
|
|
|
/// <summary>
|
|
/// 是否支付票息
|
|
/// </summary>
|
|
public bool PayCoupon { get; set; }
|
|
|
|
/// <summary>
|
|
/// 票息支付日期
|
|
/// </summary>
|
|
public string couponPaymentDateStr { get; set; }
|
|
|
|
/// <summary>
|
|
/// 票息日历规则
|
|
/// </summary>
|
|
public string couponDayCount { get; set; }
|
|
|
|
/// <summary>
|
|
/// 是否固定票息
|
|
/// </summary>
|
|
public bool isFixedCoupon { get; set; }
|
|
|
|
/// <summary>
|
|
/// 是否首日计息
|
|
/// </summary>
|
|
public bool includeStartDateCoupon { get; set; }
|
|
|
|
/// <summary>
|
|
/// 累计类型
|
|
/// </summary>
|
|
public string AccumuType { get; set; }
|
|
|
|
/// <summary>
|
|
/// 结算方式(现金当日/现金期末/实物交割)
|
|
/// </summary>
|
|
public string SettlementMode { get; set; }
|
|
|
|
/// <summary>
|
|
/// 障碍价格
|
|
/// </summary>
|
|
public double Barrier { get; set; }
|
|
|
|
/// <summary>
|
|
/// 票息金额
|
|
/// </summary>
|
|
public double Coupon { get; set; }
|
|
|
|
/// <summary>
|
|
/// 观察日列表
|
|
/// </summary>
|
|
public string KOObservationDates { get; set; }
|
|
|
|
/// <summary>
|
|
/// 上下限价格模式:等于上下限价格时敲出或买方赔付
|
|
/// </summary>
|
|
public bool updownPriceMode { get; set; }
|
|
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public List<autocall_observation> happenedObservations { get; set; }
|
|
}
|
|
|
|
/// <summary>
|
|
/// 三段式累计期权
|
|
/// </summary>
|
|
public class SegmentedAccumulatorOptionTradeParam : AccumulatorOptionTradeParam
|
|
{
|
|
public override string tradeType => "三段式累计期权";
|
|
|
|
private new double CallMultiplier { get; set; }
|
|
|
|
private new double PutMultiplier { get; set; }
|
|
|
|
/// <summary>
|
|
/// (20221008)票息金额2
|
|
/// <para>三段式有效</para>
|
|
/// </summary>
|
|
public double Coupon2 { get; set; }
|
|
|
|
/// <summary>
|
|
/// 乘数1
|
|
/// <pare>标准累购:put</pare>
|
|
/// <pare>标准累沽:put</pare>
|
|
/// <pare>三段式累购:put</pare>
|
|
/// <pare>三段式累沽:put 1</pare>
|
|
/// </summary>
|
|
public double Multiplier1 { get; set; }
|
|
|
|
/// <summary>
|
|
/// 乘数2
|
|
/// <para>标准累购:call</para>
|
|
/// <para>标准累沽:call</para>
|
|
/// <para>三段式累购:call 1</para>
|
|
/// <para>三段式累沽:put 2</para>
|
|
/// </summary>
|
|
public double Multiplier2 { get; set; }
|
|
/// <summary>
|
|
/// (20221008)乘数3
|
|
/// <para>三段式有效</para>
|
|
/// <para>三段累购:call 2</para>
|
|
/// <para>三段累沽:call</para>
|
|
/// </summary>
|
|
public double Multiplier3 { get; set; }
|
|
|
|
/// <summary>
|
|
/// (20221008)结算方式2(现金当日/现金期末/实物交割)
|
|
/// <para>三段式不支持现金期末</para>
|
|
/// </summary>
|
|
public string SettleMode2 { get; set; }
|
|
|
|
/// <summary>
|
|
/// (20221008)结算方式3(现金当日/现金期末/实物交割)
|
|
/// <para>三段式不支持现金期末</para>
|
|
/// </summary>
|
|
public string SettleMode3 { get; set; }
|
|
|
|
/// <summary>
|
|
/// (20221008)行权价2
|
|
/// </summary>
|
|
public double Strike2 { get; set; }
|
|
|
|
/// <summary>
|
|
/// (20221008)行权价3
|
|
/// <para>三段式有效</para>
|
|
/// </summary>
|
|
public double Strike3 { get; set; }
|
|
}
|
|
#endregion
|
|
|
|
#region----现金流交易----
|
|
|
|
public class CashFlowTradeParam : OptionTradeParamBase
|
|
{
|
|
public override string tradeType => "现金流交易";
|
|
|
|
/// <summary>
|
|
/// 利率
|
|
/// </summary>
|
|
public double ProfitRate { get; set; }
|
|
|
|
/// <summary>
|
|
/// 利率类型
|
|
/// </summary>
|
|
public CashFlowRateTypeEnum RateType { get; set; }
|
|
/// <summary>
|
|
/// 资金类型
|
|
/// </summary>
|
|
public CashflowDepositTypeEnum DepositType { get; set; }
|
|
|
|
/// <summary>
|
|
/// 预付比例
|
|
/// </summary>
|
|
public double PrepayRatio { get; set; }
|
|
|
|
/// <summary>
|
|
/// 计息日历规则
|
|
/// </summary>
|
|
public string ProfitDayCount { get; set; }
|
|
}
|
|
|
|
#endregion
|
|
|
|
|
|
#region ----结构化产品
|
|
public class StructProductTradeParam
|
|
{
|
|
public StructureRequest Request { get; set; }
|
|
|
|
public VolSurface VolSurface { get; set; }
|
|
}
|
|
|
|
public class ExpireDto
|
|
{
|
|
public double Days { get; set; }
|
|
|
|
public string DayStr { get; set; }
|
|
}
|
|
#endregion
|
|
|
|
/// <summary>
|
|
/// 期权计算参数
|
|
/// </summary>
|
|
public class OptionCalcParam<T> where T : OptionTradeParamBase
|
|
{
|
|
public OptionCalcParam(T tradeParam)
|
|
{
|
|
TradeParam = tradeParam ?? throw new ArgumentNullException(nameof(tradeParam));
|
|
}
|
|
|
|
public T TradeParam { get; }
|
|
|
|
/// <summary>
|
|
/// [非必需]期权计算场景
|
|
/// </summary>
|
|
public CalcScenarioEnum calcScenario { get; set; }
|
|
|
|
/// <summary>
|
|
/// [必需]标的价格
|
|
/// </summary>
|
|
public double[] spotPrices { get; set; }
|
|
|
|
/// <summary>
|
|
/// [非必需]引擎名称
|
|
/// </summary>
|
|
public string engineName { get; set; }
|
|
|
|
/// <summary>
|
|
/// 计算枚举,默认:BASIC_GREEKS
|
|
/// </summary>
|
|
public PricingRequest pricingRequest { get; set; } = QdpPricingRequest.BASIC_GREEKS;
|
|
|
|
/// <summary>
|
|
/// 急速模式??
|
|
/// </summary>
|
|
public bool quadratureFastMode { get; set; }
|
|
|
|
/// <summary>
|
|
/// 是否计算T+1日的Delta
|
|
/// </summary>
|
|
public bool CalcDeltaT1 { get; set; }
|
|
|
|
/// <summary>
|
|
/// [只读]标的集合
|
|
/// </summary>
|
|
public string[] underlyingTickers => TradeParam.underlyingTickers;
|
|
|
|
/// <summary>
|
|
/// [只读]波动率曲面名称
|
|
/// </summary>
|
|
public string[] volSurfaceNames => TradeParam.volSurfaceNames;
|
|
}
|
|
}
|