Files
zszq-trs/YLErpDAL/Modules/TradeModule/ExoticOptionModule/SnowballObservationResult.cs
T
2024-05-09 14:06:26 +08:00

185 lines
4.4 KiB
C#

namespace YLErp.Modules.TradeModule.ExoticOptionModule
{
/// <summary>
/// 预付金雪球赔付
/// </summary>
public abstract class PrepaymentSnowballPayoff
{
/// <summary>
/// 利息金额(买方角度)
/// </summary>
public double InterestAmount { get; set; }
/// <summary>
/// 预付金金额(买方角度)
/// </summary>
public double PrepaymentAmount { get; set; }
/// <summary>
/// 倒置符号(将正值倒置为负值,负值倒置为正值)
/// </summary>
public virtual void InvertSign()
{
InterestAmount = -InterestAmount;
PrepaymentAmount = -PrepaymentAmount;
}
}
/// <summary>
/// 雪球敲出赔付
/// </summary>
public class PrepaymentSnowballKoPayoff : PrepaymentSnowballPayoff
{
/// <summary>
/// 票息金额(买方金额)
/// </summary>
public double CouponPaymentAmount { get; set; }
/// <summary>
/// 增强收益金额(买方金额)
/// </summary>
public double EnhancedPaymentAmount { get; set; }
/// <summary>
/// 敲出票息开始日
/// </summary>
public DateTime CouponStartDate { get; set; }
/// <summary>
/// 敲出票息结束日
/// </summary>
public DateTime CouponEndDate { get; set; }
/// <summary>
/// 票息率
/// </summary>
public double CouponRate { get; set; }
public double TotalAmount()
{
return CouponPaymentAmount + EnhancedPaymentAmount + InterestAmount;
}
public override void InvertSign()
{
base.InvertSign();
CouponPaymentAmount = -CouponPaymentAmount;
EnhancedPaymentAmount = -EnhancedPaymentAmount;
}
}
/// <summary>
/// 雪球到期日敲入赔付
/// </summary>
public class PrepaymentSnowballKiPayoff : PrepaymentSnowballPayoff
{
/// <summary>
/// 期权赔付金额(买方角度)
/// </summary>
public double OptionPaymentAmount { get; set; }
public double TotalAmount()
{
return OptionPaymentAmount + InterestAmount;
}
public override void InvertSign()
{
base.InvertSign();
OptionPaymentAmount = -OptionPaymentAmount;
}
}
/// <summary>
/// 雪球到期日未敲入赔付
/// </summary>
public class PrepaymentSnowballNkiPayoff : PrepaymentSnowballPayoff
{
/// <summary>
/// 红利票息赔付金额(买方角度)
/// </summary>
public double CouponPaymentAmount { get; set; }
public double TotalAmount()
{
return CouponPaymentAmount + InterestAmount;
}
public override void InvertSign()
{
base.InvertSign();
CouponPaymentAmount = -CouponPaymentAmount;
}
}
/// <summary>
/// 雪球观察结果类型
/// </summary>
public enum SnowballObservationResultType
{
/// <summary>
/// 非观察日
/// </summary>
NonObservationDay,
/// <summary>
/// 观察中
/// </summary>
Monitoring,
/// <summary>
/// 敲入状态
/// </summary>
KnockedIn,
/// <summary>
/// 敲出赔付
/// </summary>
KoPayoff,
/// <summary>
/// 到期日敲入赔付
/// </summary>
KiPayoffAtEndDate,
/// <summary>
/// 到期日非敲入赔付
/// </summary>
NkiPayoffAtEndDate
}
/// <summary>
/// 雪球观察结果
/// </summary>
public class SnowballObservationResult
{
/// <summary>
/// 观察结果类型
/// </summary>
public SnowballObservationResultType ResultType { get; set; }
/// <summary>
/// 支付日期
/// </summary>
public DateTime PaymentDate { get; set; }
/// <summary>
/// 支付总金额(买方角度)
/// </summary>
public double PaymentAmount { get; set; }
/// <summary>
/// 敲出障碍价格
/// </summary>
public double KoBarrier { get; set; }
/// <summary>
/// 赔付明细
/// </summary>
public PrepaymentSnowballPayoff Payoff { get; set; }
}
}