Files
zszq-trs/Framework/SharedWebApi/ManagerApi/UtilsController.cs
T
2024-05-09 14:06:26 +08:00

149 lines
4.6 KiB
C#

using Microsoft.AspNetCore.Authorization;
using Qdp.Pricing.Base.Enums;
using YLErp.QdpModule;
namespace YLWebAPI.ApiModule.ManagerApi
{
/// <summary>
/// 工具类API
/// </summary>
[ManagerAuth]
public class UtilsController : BaseApiController
{
/// <summary>
/// 观察日计算
/// </summary>
[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")));
}
/// <summary>
/// 用于自定义交易外接API测试
/// </summary>
[HttpPost, AllowAnonymous]
[Route("api/v1/structure/calculate")]
public object CustomTradeCalculate([FromBody] Dictionary<string, object> 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<string, object> RequestData { get; set; }
}
}
}