Files
zszq-trs/Framework/YLErp.Core/DBModels/ClientSpan.cs
T
2024-05-09 14:06:26 +08:00

496 lines
14 KiB
C#

using System.ComponentModel.DataAnnotations.Schema;
namespace YLErp.DBModels
{
/// <summary>
///
/// </summary>
[Table("client_span")]
public class ClientSpan : DBModelWithOperator
{
///日终
public const int SpanType_Eod = 0;
///实时
public const int SpanType_RealTime = 1;
/// <summary>
/// 客户ID
/// </summary>
[DisplayName("客户ID")]
public int ClientId { get; set; }
/// <summary>
/// 标的Id
/// </summary>
[NotMapped]
public int? UnderlyingId { get; set; }
[NotMapped]
public IEnumerable<ClientPVJson> PVJsonList { get; set; }
public string PVJsons { get; set; }
/// <summary>
/// 标的预付金率
/// </summary>
[NotMapped]
public double? MaxMarginRate { get; set; }
/// <summary>
/// 品种Id
/// </summary>
[NotMapped]
public int? VarietyId { get; set; }
/// <summary>
/// 份额
/// </summary>
[NotMapped]
public double? Notional { get; set; }
/// <summary>
/// 名义本金
/// </summary>
[NotMapped]
public double? StockEqvNotional { get; set; }
/// <summary>
///
/// </summary>
[DisplayName("ValueDate")]
public DateTime? ValueDate { get; set; }
private double? _spv1;
/// <summary>
/// 涨停波动率不变
/// 海通:价格涨 + 波动率变大
/// </summary>
[DisplayName("涨停波动率不变")]
public double? Spv1
{
set { _spv1 = (value == null || double.IsNaN(value.Value)) ? 0 : value; }
get => _spv1;
}
private double? _spv2;
/// <summary>
/// 涨停波动率变
/// 海通:价格涨 + 波动率不变
/// </summary>
[DisplayName("涨停波动率变")]
public double? Spv2
{
set { _spv2 = (value == null || double.IsNaN(value.Value)) ? 0 : value; }
get => _spv2;
}
private double? _spv3;
/// <summary>
/// 跌停波动率变
/// 海通:价格涨 + 波动率变小
/// </summary>
[DisplayName("跌停波动率变")]
public double? Spv3
{
set { _spv3 = (value == null || double.IsNaN(value.Value)) ? 0 : value; }
get => _spv3;
}
private double? _spv4;
/// <summary>
/// 跌停波动率不变
/// 海通:价格不变 + 波动率变大
/// </summary>
[DisplayName("跌停波动率不变")]
public double? Spv4
{
set { _spv4 = (value == null || double.IsNaN(value.Value)) ? 0 : value; }
get => _spv4;
}
private double? _spv5;
/// <summary>
/// 海通:价格不变 + 波动率变小
/// </summary>
public double? Spv5
{
set { _spv5 = (value == null || double.IsNaN(value.Value)) ? 0 : value; }
get => _spv5;
}
private double? _spv6;
/// <summary>
/// 海通:价格跌 + 波动率变大
/// </summary>
public double? Spv6
{
set { _spv6 = (value == null || double.IsNaN(value.Value)) ? 0 : value; }
get => _spv6;
}
private double? _spv7;
/// <summary>
/// 海通:价格跌 + 波动率不变
/// </summary>
public double? Spv7
{
set { _spv7 = (value == null || double.IsNaN(value.Value)) ? 0 : value; }
get => _spv7;
}
private double? _spv8;
/// <summary>
/// 海通:价格跌 + 波动率变小
/// </summary>
public double? Spv8
{
set { _spv8 = (value == null || double.IsNaN(value.Value)) ? 0 : value; }
get => _spv8;
}
private double? spv9;
private double? spv10;
private double? spv11;
private double? spv12;
private double? spv13;
private double? spv14;
public double? Spv9
{
get => spv9;
set => spv9 = (value == null || double.IsNaN(value.Value)) ? 0 : value;
}
public double? Spv10
{
get => spv10;
set => spv10 = (value == null || double.IsNaN(value.Value)) ? 0 : value;
}
public double? Spv11
{
get => spv11;
set => spv11 = (value == null || double.IsNaN(value.Value)) ? 0 : value;
}
public double? Spv12
{
get => spv12;
set => spv12 = (value == null || double.IsNaN(value.Value)) ? 0 : value;
}
public double? Spv13
{
get => spv13;
set => spv13 = (value == null || double.IsNaN(value.Value)) ? 0 : value;
}
public double? Spv14
{
get => spv14;
set => spv14 = (value == null || double.IsNaN(value.Value)) ? 0 : value;
}
public double? Spv15
{
get => spv15;
set => spv15 = (value == null || double.IsNaN(value.Value)) ? 0 : value;
}
public double? Spv16
{
get => spv16;
set => spv16 = (value == null || double.IsNaN(value.Value)) ? 0 : value;
}
public double? Spv17
{
get => spv17;
set => spv17 = (value == null || double.IsNaN(value.Value)) ? 0 : value;
}
private double? _worstCastClientPayable;
/// <summary>
/// 最新概念:负数代表客户应缴预付金,正数代表客户应收预付金
/// </summary>
[DisplayName("WorstCastClientPayable")]
public double? WorstCastClientPayable
{
set { _worstCastClientPayable = (value == null || double.IsNaN(value.Value)) ? 0 : value; }
get => _worstCastClientPayable;
}
private double? _swapWorstCastClientPayable;
/// <summary>
/// 最新概念:负数代表客户应缴预付金,正数代表客户应收预付金
/// </summary>
[DisplayName("SwapWorstCastClientPayable")]
public double? SwapWorstCastClientPayable
{
set { _swapWorstCastClientPayable = (value == null || double.IsNaN(value.Value)) ? 0 : value; }
get => _swapWorstCastClientPayable;
}
private double? _swapInitMargin;
/// <summary>
/// 互换初始预付金
/// </summary>
[DisplayName("SwapInitMargin")]
public double? SwapInitMargin
{
set { _swapInitMargin = (value == null || double.IsNaN(value.Value)) ? 0 : value; }
get => _swapInitMargin;
}
private double? _swapWinLoss;
/// <summary>
/// 互换盈亏
/// </summary>
[DisplayName("SwapWinLoss")]
public double? SwapWinLoss
{
set { _swapWinLoss = (value == null || double.IsNaN(value.Value)) ? 0 : value; }
get => _swapWinLoss;
}
private double? _swapUnMargin;
/// <summary>
/// 互换无需追保部分(容忍额度)
/// </summary>
[DisplayName("SwapUnMargin")]
public double? SwapUnMargin
{
set { _swapUnMargin = (value == null || double.IsNaN(value.Value)) ? 0 : value; }
get => _swapUnMargin;
}
[NotMapped]
public double? MaxSpotPrice { get; set; }
/// <summary>
/// 品种级别
/// DeltaSell为客户角度卖出,且为客户角度看Delta
/// </summary>
[NotMapped]
public double? DeltaSell { get; set; }
/// <summary>
/// 品种级别
/// 客户方向买入正的delta之和
/// </summary>
[NotMapped]
public double? DeltaBuy { get; set; }
/// <summary>
/// 品种级别
/// 客户方向买入负的delta之和
/// </summary>
[NotMapped]
public double? DeltaBuyMinus { get; set; }
/// <summary>
/// 品种级别Delta预付金
/// 最终客户级别Delta预付金
/// 负数代表客户应缴预付金(瑞达目前只有客户缴纳预付金这种方式)
/// 国君也有deltamargin
/// </summary>
public double? DeltaMargin { get; set; }
/// <summary>
/// Delta Margin最终需要加上所有的Pv
/// </summary>
[NotMapped]
public double? PvForDelta { get; set; }
/// <summary>
/// 浮盈浮亏
/// </summary>
[NotMapped]
public double? PositionWinLoss { get; set; }
private double? _twoSideMargin;
/// <summary>
/// 双向预付金(暂时只有国君用到了该字段)
/// </summary>
public double? TwoSideMargin
{
set { _twoSideMargin = (value == null || double.IsNaN(value.Value)) ? 0 : value; }
get => _twoSideMargin;
}
private double? _mySideMargin;
/// <summary>
/// 本方角度预付金
/// </summary>
public double? MySideMargin
{
set { _mySideMargin = (value == null || double.IsNaN(value.Value)) ? 0 : value; }
get => _mySideMargin;
}
private double? _otherSideMargin;
/// <summary>
/// 客户角度看的预付金
/// </summary>
public double? OtherSideMargin
{
set { _otherSideMargin = (value == null || double.IsNaN(value.Value)) ? 0 : value; }
get => _otherSideMargin;
}
private double? _additionalWorstCastClientPayable;
/// <summary>
/// 额外追保
/// </summary>
[DisplayName("额外追保")]
public double? AdditionalWorstCastClientPayable
{
set { _additionalWorstCastClientPayable = (value == null || double.IsNaN(value.Value)) ? 0 : value; }
get => _additionalWorstCastClientPayable;
}
private double? _variationMargin;
private double? spv15;
private double? spv16;
private double? spv17;
/// <summary>
///
/// </summary>
[DisplayName("VariationMargin")]
public double? VariationMargin
{
set { _variationMargin = (value == null || double.IsNaN(value.Value)) ? 0 : value; }
get => _variationMargin;
}
/// <summary>
///
/// </summary>
public int SpanType { get; set; }
/// <summary>
/// 风险敞口(假设公司当天行权,客户需要支付的payoff)
/// </summary>
public double? RiskExposure { get; set; }
/// <summary>
/// 中金:IM
/// </summary>
public double? IM { get; set; }
/// <summary>
/// 中金:PFE
/// </summary>
public double? PFE { get; set; }
/// <summary>
/// 中金:VM
/// </summary>
public double? VM { get; set; }
/// <summary>
/// 中金:手续费
/// </summary>
public double? Commission { get; set; }
/// <summary>
/// 中金:抵扣额度
/// </summary>
public double? Deduct { get; set; }
/// <summary>
/// 中金:已占用PFE授信
/// </summary>
public double? PFEUsed { get; set; }
/// <summary>
/// 是否从人工修改过
/// </summary>
public bool ModifiedFlag { get; set; }
/// <summary>
/// 初始预付金 * 额外系数
/// </summary>
[NotMapped]
public double? InitialMargin { get; set; }
public void SetWorstCastClientPayableMin()
{
var worst = Spv1 ?? 0;
if (Spv2.HasValue && worst > Spv2.Value)
{
worst = Spv2.Value;
}
if (Spv3.HasValue && worst > Spv3.Value)
{
worst = Spv3.Value;
}
if (Spv4.HasValue && worst > Spv4.Value)
{
worst = Spv4.Value;
}
if (Spv5.HasValue && worst > Spv5.Value)
{
worst = Spv5.Value;
}
if (Spv6.HasValue && worst > Spv6.Value)
{
worst = Spv6.Value;
}
if (Spv7.HasValue && worst > Spv7.Value)
{
worst = Spv7.Value;
}
if (Spv8.HasValue && worst > Spv8.Value)
{
worst = Spv8.Value;
}
if (Spv9.HasValue && worst > Spv9.Value)
{
worst = Spv9.Value;
}
if (Spv10.HasValue && worst > Spv10.Value)
{
worst = Spv10.Value;
}
if (Spv11.HasValue && worst > Spv11.Value)
{
worst = Spv11.Value;
}
if (Spv12.HasValue && worst > Spv12.Value)
{
worst = Spv12.Value;
}
if (Spv13.HasValue && worst > Spv13.Value)
{
worst = Spv13.Value;
}
if (Spv14.HasValue && worst > Spv14.Value)
{
worst = Spv14.Value;
}
if (Spv15.HasValue && worst > Spv15.Value)
{
worst = Spv15.Value;
}
if (Spv16.HasValue && worst > Spv16.Value)
{
worst = Spv16.Value;
}
if (Spv17.HasValue && worst > Spv17.Value)
{
worst = Spv17.Value;
}
WorstCastClientPayable = worst;
}
}
}