246 lines
6.8 KiB
C#
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 };
|
|
}
|
|
}
|
|
}
|