Files
zszq-trs/YLErpWeb/Models/RiskHedgingViewModel.cs
T
2024-05-09 14:06:26 +08:00

185 lines
4.8 KiB
C#

using YLErp.Modules.SystemModule;
using YLErp.Modules.TradeRiskCalcModule;
namespace YLErp.Web.Models
{
/// <summary>
/// 风险对冲视图模型
/// </summary>
public class RiskHedgingViewModel : BasicViewModel
{
public RiskHedgingViewModel(UserInfo userInfo) : base(userInfo)
{
var index = 0;
VolTpes = new string[3];
if (AppHelper.IsSupportVolTypeOnRiskCalc("对冲"))
{
VolTpes[index++] = "对冲";
}
if (AppHelper.IsSupportVolTypeOnRiskCalc("持仓"))
{
VolTpes[index++] = "持仓";
}
if (AppHelper.IsSupportVolTypeOnRiskCalc("交易曲面"))
{
VolTpes[index++] = "交易曲面";
}
}
/// <summary>
/// 支持的波动率类型集合
/// </summary>
public string[] VolTpes { get; }
/// <summary>
/// 实时风险查询对象
/// </summary>
public TradingRiskReqModel ReqModel { get; set; }
/// <summary>
/// 未参与排序的品种
/// </summary>
public IEnumerable<Variety> UnsortVarieties { get; set; }
/// <summary>
/// 参与排序的品种
/// </summary>
public IEnumerable<Variety> SortVarieties { get; set; }
/// <summary>
/// 自动对冲规则
/// </summary>
public IEnumerable<TradeAutoRule> AutoRules { get; set; }
/// <summary>
/// 是否主视图
/// </summary>
public bool IsMainView { get; set; }
/// <summary>
/// 用户配置项
/// </summary>
public RiskHedgingUserConfig UserConfig { get; set; }
/// <summary>
/// 是否权益类页面
/// </summary>
public bool IsStock { get; set; }
/// <summary>
/// 上一个收盘日
/// </summary>
public DateTime PreSettleDate { get; set; }
/// <summary>
/// 上一个交易日
/// </summary>
public DateTime PreTradingDate { get; set; }
public List<UnderlyingPriceChangeLimition> OutRangedUms { get; set; }
/// <summary>
/// 标的价格阈值
/// </summary>
public IEnumerable<Modules.TradeRiskCalcModule.UnderlyingPriceChangeLimition> UnderlyingAlerts { get; set; }
/// <summary>
/// 获取波动率类型
/// </summary>
public string GetVolType()
{
return ReqModel?.VolType.TrimToNull() ?? VolTpes[0] ?? "无";
}
/// <summary>
/// 获取参与排序的品种代码
/// </summary>
public IEnumerable<string> GetSortVarietyCodes()
{
if (SortVarieties == null)
{
return Enumerable.Empty<string>();
}
return SortVarieties.Select(n => n.VarietyCode).ToArray();
}
}
public class UnderlyingPriceChangeLimition
{
public string UnderlyingCode { get; set; }
public double basePrice { get; set; }
public double nowPrice { get; set; }
public double priceIncreaseRate { get; set; }
public double priceDecreaseRate { get; set; }
}
/// <summary>
/// 委托下单
/// </summary>
public class RiskHedgingOrderModel
{
public string Sign { get; set; }
public string Token { get; set; }
public string UserId { get; set; }
//-------------------------------
// 以下来自请求
//-------------------------------
/// <summary>
/// 来自请求
/// </summary>
public string InstType { get; set; }
/// <summary>
/// 来自请求
/// </summary>
public IEnumerable<RiskHedgingOrderItem> Items { get; set; }
/// <summary>
/// 获取交易方向
/// </summary>
public string GetBuySell(bool deltaGreaterThanZero)
{
if (InstType.Equals("Stock", StringComparison.OrdinalIgnoreCase))
{
return deltaGreaterThanZero ? "卖出" : "买入";
}
return deltaGreaterThanZero ? "空头开仓" : "多头开仓";
}
public override string ToString()
{
return InstType;
}
}
/// <summary>
/// 委托下单项目
/// </summary>
public class RiskHedgingOrderItem
{
/// <summary>
/// 来自请求
/// </summary>
public string UnderlyingCode { get; set; }
/// <summary>
/// 来自请求
/// </summary>
public double DeltaInLots { get; set; }
public override string ToString()
{
return UnderlyingCode + "--" + DeltaInLots;
}
}
}