149 lines
4.6 KiB
C#
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; }
|
|
}
|
|
}
|
|
}
|