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