Files
zszq-trs/YLErpDAL/Modules/VolatilityModule/ApiModule/UnderlyingVolService.cs
2024-05-09 14:06:26 +08:00

73 lines
2.3 KiB
C#

using YLErp.BLL;
using YLErp.Models;
namespace YLErp.Modules.VolatilityModule.ApiModule
{
/// <summary>
/// 曲面波动率提供(用于API服务)
/// </summary>
public class UnderlyingVolService : YLBaseService
{
public UnderlyingVolService(OptUserInfo userInfo) : base(userInfo)
{
}
/// <summary>
/// API获取波动率
/// </summary>
public List<UnderlyingVol> GetUnderlyingVolSurfaces(BatchVolatilityRequest2 request)
{
request.TradeVolWithBidAsk = true;
var vols = new VolatilityQueryService(this).GetVolatilities(request, false);
if (request.VolType != "交易")
{
return vols.Select(x => new UnderlyingVol()
{
VolTable = x.VolTable,
UnderlyingCode = x.ContractCode
}).ToList();
}
return vols.ToLookup(n => n.ContractCode).Select(n => new UnderlyingVol
{
UnderlyingCode = n.Key,
VolTable = n.FirstOrDefault(y => y.VolType == "交易")?.VolTable,
VolTableBid = n.FirstOrDefault(y => y.VolType == "报价Bid")?.VolTable,
VolTableAsk = n.FirstOrDefault(y => y.VolType == "报价Ask")?.VolTable
}).ToList();
}
/// <summary>
/// API保存波动率
/// </summary>
public volatility SaveVolatility(volatility vol)
{
var targetUnderlying = underlying_managerBLL.GetByCode(vol.ContractCode);
if (targetUnderlying != null)
{
vol.UnderlyingId = targetUnderlying.id;
vol.ContractCode = targetUnderlying.UnderlyingCode;
}
if (string.IsNullOrEmpty(vol.Data))
{
throw new ServiceException("缺少VolTable");
}
var vols = new VolatilitySaveService(this).SaveVol(vol);
return vols.FirstOrDefault();
}
public class UnderlyingVol
{
public string UnderlyingCode { get; set; }
public List<SingleVol> VolTable { get; set; }
public List<SingleVol> VolTableBid { get; set; }
public List<SingleVol> VolTableAsk { get; set; }
}
}
}