73 lines
2.3 KiB
C#
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; }
|
|
}
|
|
}
|
|
}
|