using Microsoft.AspNetCore.Authorization; using Qdp.Pricing.Base.Enums; using YLErp.QdpModule; namespace YLWebAPI.ApiModule.ManagerApi { /// /// 工具类API /// [ManagerAuth] public class UtilsController : BaseApiController { /// /// 观察日计算 /// [HttpPost] [Route("api/v1/utils/observationDates")] public ApiResponseModel GetObservationDateList([FromBody] ObservationDatesRequest req) { if (req is null) { return JsonError("缺少必要的请求参数"); } //观察日间隔 if (string.IsNullOrEmpty(req.Interval)) { req.Interval = "1D"; } //节假日调整,可选值:None 不调整、Previous 向前调整、Following 向后调整,默认:向后调整 var bdc = BusinessDayConvention.Following; if (!string.IsNullOrWhiteSpace(req.HolidayAdjustment)) { switch (req.HolidayAdjustment) { case "Following": case "向后调整": bdc = BusinessDayConvention.Following; break; case "None": case "不调整": bdc = BusinessDayConvention.None; break; case "Previous": case "向前调整": bdc = BusinessDayConvention.Previous; break; default: return JsonError("请求参数'HolidayAdjustment'的值不符合要求"); } } //对齐规则,可选值:EndDate 向到期日对齐、StartDate 向开始日对齐,默认:向到期日对齐 var alignEnd = true; if (!string.IsNullOrEmpty(req.Alignment)) { switch (req.Alignment) { case "EndDate": case "向到期日对齐": alignEnd = true; break; case "StartDate": case "向开始日对齐": alignEnd = false; break; default: return JsonError("请求参数'Alignment'的值不符合要求"); } } if (!string.IsNullOrEmpty(req.CalcMode)) { switch (req.CalcMode) { case "00": case "01": case "10": case "11": break; default: return JsonError("请求参数'CalcMode'的值不符合要求"); } } else { req.CalcMode = "01"; } var list = QdpObservationHelper.GetDatesWithFixedTerm(req.StartDate, req.EndDate, req.Interval, bdc, alignEnd, req.CalcMode); return JsonSuccess(list.Select(n => n.ToString("yyyy-MM-dd"))); } /// /// 用于自定义交易外接API测试 /// [HttpPost, AllowAnonymous] [Route("api/v1/structure/calculate")] public object CustomTradeCalculate([FromBody] Dictionary req) { if (req is null) { return JsonError("缺少必要的请求参数"); } req.TryGetValue("CalcId", out var CalcId); req.TryGetValue("Volatility", out var VolatilityObj); double.TryParse(VolatilityObj?.ToString(), out var Volatility); var result = new TempValueResult { RequestData = req, CalcId = CalcId?.ToString(), Pv = 100, Vega = 100, Delta = 100, Gamma = 100, Rho = 100, Theta = 100, Margin = 100, Volatility = Volatility }; return result; } class TempValueResult { public int errcode { get; set; } public string errmsg { get; set; } public string CalcId { get; set; } public double Pv { get; set; } public double Vega { get; set; } public double Delta { get; set; } public double Gamma { get; set; } public double Rho { get; set; } public double Theta { get; set; } public double Margin { get; set; } public double Volatility { get; set; } public Dictionary RequestData { get; set; } } } }