Files
zszq-trs/YLErpDAL/Modules/TradeRiskCalcModule/RequestService/TradingRiskReqModel.cs
T
2024-05-09 14:06:26 +08:00

246 lines
6.8 KiB
C#

using YLErp.Models;
namespace YLErp.Modules.TradeRiskCalcModule
{
public class TradingRiskReqModelBase
{
/// <summary>
/// 波动率类型
/// </summary>
public string VolType { get; set; }
/// <summary>
/// 分红率类型 交易、0 --国元特有,默认为交易
/// </summary>
public string DividendRateType { get; set; }
/// <summary>
/// 簿记账户过滤列表
/// </summary>
public List<int> BookIds { get; set; }
/// <summary>
/// 用户绑定的簿记账户
/// </summary>
public List<int> UserBookIds { get; set; }
/// <summary>
/// 簿记账户组过滤列表
/// </summary>
public IEnumerable<int> AssetIdGroupList { get; set; }
/// <summary>
/// 客户过滤列表
/// </summary>
public List<int> ClientIds { get; set; }
/// <summary>
/// 结构类型过滤列表
/// </summary>
public IEnumerable<string> AssetTypes { get; set; }
/// <summary>
/// 只显示当日有持仓的交易
/// </summary>
public bool OnlyPosition { get; set; }
/// <summary>
/// 反选项
/// </summary>
public string[] InvertSelects { get; set; }
/// <summary>
/// 是否反选项
/// </summary>
public bool IsInvertSelect(string input)
{
return InvertSelects != null && InvertSelects.Contains(input);
}
/// <summary>
/// 标准化模型数据
/// </summary>
public virtual void Normalize()
{
if (string.IsNullOrWhiteSpace(VolType))
{
VolType = "对冲";
}
if (BookIds != null && BookIds.All(n => n == 0))
{
BookIds = null;
}
if (AssetIdGroupList != null && AssetIdGroupList.All(n => n == 0))
{
AssetIdGroupList = null;
}
if (ClientIds != null && ClientIds.All(n => n == 0))
{
ClientIds = null;
}
if (AssetTypes != null && AssetTypes.Any(n => !string.IsNullOrEmpty(n)))
{
AssetTypes = AssetTypes.Where(n => !string.IsNullOrEmpty(n)).ToArray();
}
else
{
AssetTypes = null;
}
}
}
/// <summary>
/// 实时风险查询模型
/// </summary>
public class TradingRiskReqModel : TradingRiskReqModelBase
{
private string subListCode;
/// <summary>
/// 品种过滤列表(和标的过滤列表取并集)
/// </summary>
public IEnumerable<int> VarietyIds { get; set; }
/// <summary>
/// 品种分组过滤列表(和品种过滤列表取并集)
/// </summary>
public IEnumerable<string> VarietyGroups { get; set; }
/// <summary>
/// 标的过滤列表(和品种过滤列表取并集)
/// </summary>
public IEnumerable<int> UnderlyingIds { get; set; }
/// <summary>
/// 标的代码过滤(优先于VarietyIds和UnderlyingIds)
/// 在定价试算时会从前端页面传入
/// </summary>
public IEnumerable<string> UnderlyingCodes { get; set; }
/// <summary>
/// 品种代码或标的代码
/// </summary>
public string SubListCode
{
get => subListCode;
set
{
subListCode = value?.TrimEnd('\t');
IsMainList = string.IsNullOrEmpty(value);
}
}
/// <summary>
/// 是否主页面列表请求
/// </summary>
public bool IsMainList { get; private set; } = true;
public DateTime? ValueTime { get; set; }
/// <summary>
/// 是否权益类
/// </summary>
public bool Stock { get; set; }
/// <summary>
/// 是否包含权益类
/// </summary>
public bool IncludeStock { get; set; }
/// <summary>
/// 支持Delta风险敞口
/// </summary>
public bool CalcDeltaRisk { get; set; }
/// <summary>
/// 场内期权现价使用行情价(详情页使用,非光子并且SubListCode有值的情况下)
/// </summary>
public bool UseMarketForExOptions { get; set; }
/// <summary>
/// 请求来源(非系统内部调用暂定为'a1')
/// </summary>
public string RequestFrom { get; set; }
//----以下用于优化性能----
/// <summary>
/// 强制获取最新结果集
/// 前端页面需根据查询条件是否变化来判断请求输入值
/// </summary>
public bool ForceUpdate { get; set; } = true;
/// <summary>
/// 计算开始时间,ForceUpdate为false时适用
/// 由页面传入已加载数据的计算时间,用于判断是否和当前结果集相同
/// </summary>
public DateTime CalcStartTime { get; set; }
/// <summary>
/// 标准化模型数据
/// </summary>
public override void Normalize()
{
base.Normalize();
if (VarietyIds != null && VarietyIds.All(n => n < 1))
{
VarietyIds = null;
}
if (UnderlyingIds != null && UnderlyingIds.All(n => n < 1))
{
UnderlyingIds = null;
}
if (VarietyGroups != null && VarietyGroups.Any(n => !string.IsNullOrEmpty(n)))
{
VarietyGroups = VarietyGroups.Where(n => !string.IsNullOrEmpty(n)).ToArray();
}
else
{
VarietyGroups = null;
}
if (UnderlyingCodes != null && UnderlyingCodes.Any(n => !string.IsNullOrEmpty(n)))
{
UnderlyingCodes = UnderlyingCodes.Where(n => !string.IsNullOrEmpty(n)).ToArray();
}
else
{
UnderlyingCodes = null;
}
if (!string.IsNullOrWhiteSpace(SubListCode))
{
VarietyIds = null;
}
}
}
/// <summary>
/// 价格试算查询模型
/// </summary>
public class TradingRiskPriceCalcReqModel : TradingRiskReqModelBase
{
/// <summary>
/// [必需]标的价格
/// </summary>
public IEnumerable<TradingRiskPriceModel> Prices { get; set; }
}
public class TradingRiskPriceModel
{
public string Code { get; set; }
public double Price { get; set; }
public PriceModel ToPriceModel()
{
return new PriceModel { InstrumentCode = Code, Price = Price };
}
}
}