using YLErp.BLL;
using YLErp.Models;
namespace YLErp.Modules.VolatilityModule.ApiModule
{
///
/// 曲面波动率提供(用于API服务)
///
public class UnderlyingVolService : YLBaseService
{
public UnderlyingVolService(OptUserInfo userInfo) : base(userInfo)
{
}
///
/// API获取波动率
///
public List 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();
}
///
/// API保存波动率
///
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 VolTable { get; set; }
public List VolTableBid { get; set; }
public List VolTableAsk { get; set; }
}
}
}