从山证v2.3.0拷贝

This commit is contained in:
吴方海
2024-05-09 14:06:26 +08:00
parent 566ff33259
commit f9d8a256a6
4471 changed files with 1203456 additions and 9 deletions
@@ -0,0 +1,236 @@
namespace YLErp.Modules.ManagerAPI.EodModule
{
/// <summary>
/// 日终持仓风险查询
/// </summary>
public class EodPositionRiskItem
{
/// <summary>
/// 交易编号
/// </summary>
public string TradeNumber { get; set; }
/// <summary>
/// 确认书编号
/// </summary>
public string ContractCode { get; set; }
/// <summary>
/// 期权代码
/// </summary>
public string ExchangeOptionCode { get; set; }
/// <summary>
/// 多腿编号
/// </summary>
public string ChildLeg { get; set; }
/// <summary>
/// 浮动盈亏
/// </summary>
public double? PositionPnl { get; set; }
/// <summary>
/// 实现盈亏
/// </summary>
public double? RealizedPnl { get; set; }
/// <summary>
/// 当前波动率
/// </summary>
public double? CurVolValue { get; set; }
/// <summary>
/// Delta
/// </summary>
public double? Delta { get; set; }
/// <summary>
/// Delta手数
/// </summary>
public double? DeltaLots { get; set; }
/// <summary>
/// Gamma
/// </summary>
public double? Gamma { get; set; }
/// <summary>
/// Gamma手数
/// </summary>
public double? GammaLots { get; set; }
/// <summary>
/// Theta
/// </summary>
public double? Theta { get; set; }
/// <summary>
/// Rho
/// </summary>
public double? Rho { get; set; }
/// <summary>
/// Vega
/// </summary>
public double? Vega { get; set; }
/// <summary>
/// 到期日期
/// </summary>
public string ExerciseDate { get; set; }
/// <summary>
/// 行权方式
/// </summary>
public string ExerciseMode { get; set; }
/// <summary>
/// 结构类型
/// </summary>
public string TradeType { get; set; }
/// <summary>
/// 观察状态
/// </summary>
public string KnockInOutStatus { get; set; }
/// <summary>
/// 交易对手方
/// </summary>
public string ClientName { get; set; }
/// <summary>
/// 交易对手编号
/// </summary>
public string ClientNumber { get; set; }
/// <summary>
/// 簿记账户
/// </summary>
public string AssetBookName { get; set; }
/// <summary>
/// 成交日期
/// </summary>
public string TradeDate { get; set; }
/// <summary>
/// 看涨看跌
/// </summary>
public string OptionType { get; set; }
/// <summary>
/// 买卖方向
/// </summary>
public string TradeSide { get; set; }
/// <summary>
/// 标的代码
/// </summary>
public string UnderlyingCode { get; set; }
/// <summary>
/// 标的名称
/// </summary>
public string UnderlyingName { get; set; }
/// <summary>
/// 期初标的价格
/// </summary>
public double? InitialSpotPrice { get; set; }
/// <summary>
/// 执行价格
/// </summary>
public double? Strike { get; set; }
/// <summary>
/// 权利金(成交)
/// </summary>
public double? TradeSinglePrice { get; set; }
/// <summary>
/// 成交数量
/// </summary>
public double? TradeOriginalAmountV { get; set; }
/// <summary>
/// 有效成交数量
/// </summary>
public double? TradeOriginalAmount { get; set; }
/// <summary>
/// 成交金额
/// </summary>
public double? TradePrice { get; set; }
/// <summary>
/// 存续成本
/// </summary>
public double? EtcTradePrice { get; set; }
/// <summary>
/// 名义本金
/// </summary>
public double? StockEqvNotional { get; set; }
/// <summary>
/// 最新标的价格
/// </summary>
public double? UnderlyingPrice { get; set; }
/// <summary>
/// 无风险利率
/// </summary>
public double? RiskFreeRate { get; set; }
/// <summary>
/// 分红率
/// </summary>
public double? DividendRate { get; set; }
/// <summary>
/// 权利金(存续)
/// </summary>
public double? SinglePV { get; set; }
/// <summary>
/// 存续数量
/// </summary>
public double? TradeAmountV { get; set; }
/// <summary>
/// 有效存续数量
/// </summary>
public double? TradeAmount { get; set; }
/// <summary>
/// 存续市值
/// </summary>
public double? PositionPV { get; set; }
/// <summary>
/// 维持预付金
/// </summary>
public double? PositionMargin { get; set; }
/// <summary>
/// 信用风险敞口
/// </summary>
public double? CreditExposure { get; set; }
/// <summary>
/// 盈亏分解Delta
/// </summary>
public double? dPnLDelta { get; set; }
public double? dPnLGamma { get; set; }
public double? dPnLVega { get; set; }
public double? dPnLTheta { get; set; }
public double? dPnLPsi { get; set; }
}
}
@@ -0,0 +1,63 @@
namespace YLErp.Modules.ManagerAPI.EodModule
{
/// <summary>
/// 日终持仓风险查询
/// </summary>
public class EodPositionRisksQueryApiRequest
{
/// <summary>
/// 结算日期
/// </summary>
public DateTime ValueDate { get; set; }
/// <summary>
/// 标的价格类型
/// </summary>
public string SettlePriceMode { get; set; }
/// <summary>
/// 波动率类型
/// </summary>
public string VolType { get; set; }
/// <summary>
/// 分红率
/// </summary>
public string DividendRateType { get; set; }
/// <summary>
/// 是否只查询场外期权交易,组合交易按照主交易展示
/// </summary>
public bool IsParentTrade { get; set; }
////////////////////////////////////////////////
/// <summary>
/// 客户编号
/// </summary>
public IEnumerable<string> ClientNumbers { get; set; }
/// <summary>
/// 客户名称
/// </summary>
public IEnumerable<string> ClientNames { get; set; }
/// <summary>
/// 簿记账户组名称
/// </summary>
public IEnumerable<string> AssetGroupNames { get; set; }
/// <summary>
/// 簿记账户名称
/// </summary>
public IEnumerable<string> AssetBookNames { get; set; }
/// <summary>
/// 结构类型
/// </summary>
public IEnumerable<string> TradeTypes { get; set; }
/// <summary>
/// 标的代码
/// </summary>
public IEnumerable<string> UnderlyingCodes { get; set; }
}
}
@@ -0,0 +1,249 @@
using YLErp.Model;
using YLErp.Modules.CalculationModule;
using YLErp.Modules.EodModule;
namespace YLErp.Modules.ManagerAPI.EodModule
{
/// <summary>
/// 日终持仓风险查询API
/// </summary>
public class EodPositionRisksQueryApiService : YLBaseService
{
public EodPositionRisksQueryApiService(OptUserInfo userInfo) : base(userInfo)
{
}
/// <summary>
/// 日终持仓风险查询
/// </summary>
public IEnumerable<EodPositionRiskItem> QueryPositionRisks(EodPositionRisksQueryApiRequest req)
{
if (req.DividendRateType == "采集")
{
req.VolType = "分红率0";
}
var req2 = new EodPositionRisksReq
{
ValueDate = req.ValueDate,
VolType = req.VolType,
EodSettlePriceMode = req.SettlePriceMode,
rows = 999999,
page = 0
};
var clientNames = req.ClientNames;
var clientNumbers = req.ClientNumbers;
if (clientNames != null && clientNames.All(n => string.IsNullOrEmpty(n)))
{
clientNames = null;
}
if (clientNumbers != null && clientNumbers.All(n => string.IsNullOrEmpty(n)))
{
clientNumbers = null;
}
if (clientNames != null || clientNumbers != null)
{
req2.ClientIds = DataCacheProvider.GetClientDataSource().AsQueryable()
.Where(n => ((clientNames == null || clientNames.Contains(n.Name))
&& clientNumbers == null) || clientNumbers.Contains(n.Number))
.Select(n => n.id).ToList();
}
IEnumerable<int> assetGroupIds = null;
if (req.AssetGroupNames != null && req.AssetGroupNames.Any(n => !string.IsNullOrEmpty(n)))
{
assetGroupIds = DataCacheProvider.GetAssetUnitGroupDataSource().AsQueryable()
.Where(n => req.AssetGroupNames.Contains(n.Name)).Select(n => n.id).ToList();
}
var assetNames = req.AssetBookNames;
if (assetNames != null && assetNames.All(n => string.IsNullOrEmpty(n)))
{
assetNames = null;
}
if (assetGroupIds != null || assetNames != null)
{
req2.BookIds = DataCacheProvider.GetAssetUnitDataSource().AsQueryable()
.Where(n => (assetGroupIds == null || assetGroupIds.Contains(n.GroupId)) && (assetNames == null || assetNames.Contains(n.Name)))
.Select(n => n.id).ToList();
}
if (req.UnderlyingCodes != null && req.UnderlyingCodes.Any(n => !string.IsNullOrEmpty(n)))
{
req2.UnderlyingIds = DataCacheProvider.GetUnderlyingDataSource().AsQueryable()
.Where(n => req.UnderlyingCodes.Contains(n.UnderlyingCode)).Select(n => n.id).ToList();
}
req2.TradeTypes = req.TradeTypes;
var result = new EodPositionRisksQueryService(OptUser).SearchList(req2, false);
return result.rows.Select(n => new EodPositionRiskItem
{
AssetBookName = n.AssetBookName,
TradeSide = n.BuySell,
ChildLeg = n.ChildLeg,
ClientName = n.ClientName,
ClientNumber = n.ClientNumber,
ContractCode = n.ContractCode,
CreditExposure = n.Exposure,
CurVolValue = n.CurrentVolatility,
Delta = n.Delta,
DeltaLots = n.DeltaLots,
DividendRate = n.DividendRate,
dPnLDelta = n.PnLDelta,
dPnLGamma = n.PnLGamma,
dPnLPsi = n.PnLPsi,
dPnLTheta = n.PnLTheta,
dPnLVega = n.PnLVega,
EtcTradePrice = n.etcTradePrice,
ExchangeOptionCode = n.ExchangeOptionCode,
ExerciseDate = n.ExerciseDate.OtcFormatDate(),
ExerciseMode = n.ExerciseMode,
Gamma = n.Gamma,
GammaLots = n.GammaLots,
InitialSpotPrice = n.InitialSpotPrice,
KnockInOutStatus = n.KnockInOutStatus,
OptionType = n.OptionType,
PositionMargin = n.Margin,
PositionPnl = PS.Config.IsPVRounded ? n.RoundedPositionPnl : n.PositionPnl,
PositionPV = PS.Config.IsPVRounded ? n.RoundedPV : n.PV,
RealizedPnl = n.RealizedPnl,
Rho = n.Rho,
RiskFreeRate = n.RiskFreeRate,
SinglePV = n.SinglePV,
StockEqvNotional = n.StockEqvNotionalToShow,
Strike = n.Strike,
Theta = n.Theta,
TradeAmount = n.TradeAmount,
TradeAmountV = n.trade == null ? n.TradeAmount : TradeCalcHelper.GetTradeAmountV(n.trade, n.TradeAmount ?? 0, 1),
TradeDate = n.TradeDate.OtcFormatDate(),
TradeNumber = n.TradeNumber,
TradeOriginalAmount = n.TradeOriginalAmount,
TradeOriginalAmountV = n.trade == null ? n.TradeAmount : TradeCalcHelper.GetTradeAmountV(n.trade, n.TradeOriginalAmount ?? 0, 1),
TradePrice = n.TradePrice,
TradeSinglePrice = n.TradeSinglePrice,
TradeType = n.TradeType,
UnderlyingCode = n.UnderlyingCode,
UnderlyingName = n.UnderlyingAssetName,
UnderlyingPrice = n.UnderlyingPrice,
Vega = n.Vega
});
}
/// <summary>
/// 日终持仓风险查询_互换
/// </summary>
public IEnumerable<EodSwapPositionRiskItem> QuerySwapPositionRisks(EodSwapPositionRisksQueryApiRequest req)
{
var req2 = new EodPositionRisksReq
{
ValueDate = req.ValueDate,
EodSettlePriceMode = req.SettlePriceMode,
rows = 999999,
page = 0
};
var clientNames = req.ClientNames;
var clientNumbers = req.ClientNumbers;
if (clientNames != null && clientNames.All(n => string.IsNullOrEmpty(n)))
{
clientNames = null;
}
if (clientNumbers != null && clientNumbers.All(n => string.IsNullOrEmpty(n)))
{
clientNumbers = null;
}
if (clientNames != null || clientNumbers != null)
{
req2.ClientIds = DataCacheProvider.GetClientDataSource().AsQueryable()
.Where(n => ((clientNames == null || clientNames.Contains(n.Name))
&& clientNumbers == null) || clientNumbers.Contains(n.Number))
.Select(n => n.id).ToList();
}
IEnumerable<int> assetGroupIds = null;
if (req.AssetGroupNames != null && req.AssetGroupNames.Any(n => !string.IsNullOrEmpty(n)))
{
assetGroupIds = DataCacheProvider.GetAssetUnitGroupDataSource().AsQueryable()
.Where(n => req.AssetGroupNames.Contains(n.Name)).Select(n => n.id).ToList();
}
var assetNames = req.AssetBookNames;
if (assetNames != null && assetNames.All(n => string.IsNullOrEmpty(n)))
{
assetNames = null;
}
if (assetGroupIds != null || assetNames != null)
{
req2.BookIds = DataCacheProvider.GetAssetUnitDataSource().AsQueryable()
.Where(n => (assetGroupIds == null || assetGroupIds.Contains(n.GroupId)) && (assetNames == null || assetNames.Contains(n.Name)))
.Select(n => n.id).ToList();
}
if (req.UnderlyingCodes != null && req.UnderlyingCodes.Any(n => !string.IsNullOrEmpty(n)))
{
req2.UnderlyingIds = DataCacheProvider.GetUnderlyingDataSource().AsQueryable()
.Where(n => req.UnderlyingCodes.Contains(n.UnderlyingCode)).Select(n => n.id).ToList();
}
var result = new EodPositionRisksQueryService(OptUser).SearchList(req2, true);
var umProvider = DataCacheProvider.GetUnderlyingDataSource();
return result.rows.Select(n =>
{
var swap = n.trade.trade_swap;
n.trade.MetaDic.TryGetValue("GetUnderlyingName", out var GetUnderlyingName);
n.trade.MetaDic.TryGetValue("PayUnderlyingName", out var PayUnderlyingName);
return new EodSwapPositionRiskItem
{
AssetBookName = n.AssetBookName,
ClientName = n.ClientName,
ClientNumber = n.ClientNumber,
ContractCode = n.ContractCode,
Delta = n.Delta,
DeltaLots = n.DeltaLots,
ExerciseDate = n.ExerciseDate.OtcFormatDate(),
PositionPnl = PS.Config.IsPVRounded ? n.RoundedPositionPnl : n.PositionPnl,
PositionPV = PS.Config.IsPVRounded ? n.RoundedPV : n.PV,
RealizedPnl = n.RealizedPnl,
StockEqvNotional = n.StockEqvNotionalToShow,
TradeDate = n.TradeDate.OtcFormatDate(),
TradeNumber = n.ParentTradeNumber,
TradeType = n.TradeType,
GetLongShort = swap.GetLongShort,
GetMarginRate = swap.GetMarginRate,
GetSpotPrice = swap.GetSpotPrice,
GetSwapTimeAndRate = swap.GetSwapTimeAndRate,
GetTradeAmount = swap.GetTradeAmount,
GetTradePrice = swap.GetTradePrice,
GetUnderlyingCode = swap.GetUnderlyingCode,
GetUnderlyingName = GetUnderlyingName.TrimToNull() ?? (umProvider.GetData(swap.GetUnderlyingCode)?.UnderlyingName),
IsGetFloatingProfit = swap.IsGetFloatingProfit,
IsPayFloatingProfit = swap.IsPayFloatingProfit,
PayLongShort = swap.PayLongShort,
PayMarginRate = swap.PayMarginRate,
PaySpotPrice = swap.PaySpotPrice,
PaySwapTimeAndRate = swap.PaySwapTimeAndRate,
PayTradeAmount = swap.PayTradeAmount,
PayTradePrice = swap.PayTradePrice,
PayUnderlyingCode = swap.PayUnderlyingCode,
PayUnderlyingName = PayUnderlyingName.TrimToNull() ?? (umProvider.GetData(swap.PayUnderlyingCode)?.UnderlyingName)
};
});
}
}
}
@@ -0,0 +1,167 @@
namespace YLErp.Modules.ManagerAPI.EodModule
{
/// <summary>
/// 日终持仓风险查询_互换
/// </summary>
public class EodSwapPositionRiskItem
{
/// <summary>
/// 交易编号
/// </summary>
public string TradeNumber { get; set; }
/// <summary>
/// 确认书编号
/// </summary>
public string ContractCode { get; set; }
/// <summary>
/// 交易对手方
/// </summary>
public string ClientName { get; set; }
/// <summary>
/// 交易对手编号
/// </summary>
public string ClientNumber { get; set; }
/// <summary>
/// 簿记账户
/// </summary>
public string AssetBookName { get; set; }
/// <summary>
/// 成交日期
/// </summary>
public string TradeDate { get; set; }
/// <summary>
/// 到期日期
/// </summary>
public string ExerciseDate { get; set; }
/// <summary>
/// 结构类型
/// </summary>
public string TradeType { get; set; }
/// <summary>
/// 名义本金
/// </summary>
public double? StockEqvNotional { get; set; }
/// <summary>
/// 存续市值
/// </summary>
public double? PositionPV { get; set; }
/// <summary>
/// 浮动盈亏
/// </summary>
public double? PositionPnl { get; set; }
/// <summary>
/// 实现盈亏
/// </summary>
public double? RealizedPnl { get; set; }
/// <summary>
/// Delta
/// </summary>
public double? Delta { get; set; }
/// <summary>
/// Delta手数
/// </summary>
public double? DeltaLots { get; set; }
/// <summary>
/// [收取] 浮动收益
/// </summary>
public bool IsGetFloatingProfit { get; set; }
/// <summary>
/// [收取] 标的代码
/// </summary>
public string GetUnderlyingCode { get; set; }
/// <summary>
/// [收取] 标的名称
/// </summary>
public string GetUnderlyingName { get; set; }
/// <summary>
/// [收取] 多头空头
/// </summary>
public string GetLongShort { get; set; }
/// <summary>
/// [收取] 标的期初价格
/// </summary>
public double? GetSpotPrice { get; set; }
/// <summary>
/// [收取] 交易数量
/// </summary>
public double? GetTradeAmount { get; set; }
/// <summary>
/// [收取] 交易费用
/// </summary>
public double? GetTradePrice { get; set; }
/// <summary>
/// [收取] 初始预付金率
/// </summary>
public double? GetMarginRate { get; set; }
/// <summary>
/// [收取] 互换利率(年化)
/// </summary>
public string GetSwapTimeAndRate { get; set; }
/// <summary>
/// [支付] 浮动收益
/// </summary>
public bool IsPayFloatingProfit { get; set; }
/// <summary>
/// [支付] 标的代码
/// </summary>
public string PayUnderlyingCode { get; set; }
/// <summary>
/// [支付] 标的名称
/// </summary>
public string PayUnderlyingName { get; set; }
/// <summary>
/// [支付] 多头空头
/// </summary>
public string PayLongShort { get; set; }
/// <summary>
/// [支付] 标的期初价格
/// </summary>
public double? PaySpotPrice { get; set; }
/// <summary>
/// [支付] 交易数量
/// </summary>
public double? PayTradeAmount { get; set; }
/// <summary>
/// [支付] 交易费用
/// </summary>
public double? PayTradePrice { get; set; }
/// <summary>
/// [支付] 互换利率(年化)
/// </summary>
public string PaySwapTimeAndRate { get; set; }
/// <summary>
/// [支付] 初始预付金率
/// </summary>
public double? PayMarginRate { get; set; }
}
}
@@ -0,0 +1,45 @@
namespace YLErp.Modules.ManagerAPI.EodModule
{
/// <summary>
/// 日终持仓风险查询_互换
/// </summary>
public class EodSwapPositionRisksQueryApiRequest
{
/// <summary>
/// 结算日期
/// </summary>
public DateTime ValueDate { get; set; }
/// <summary>
/// 标的价格类型
/// </summary>
public string SettlePriceMode { get; set; }
////////////////////////////////////////////////
/// <summary>
/// 客户编号
/// </summary>
public IEnumerable<string> ClientNumbers { get; set; }
/// <summary>
/// 客户名称
/// </summary>
public IEnumerable<string> ClientNames { get; set; }
/// <summary>
/// 簿记账户组名称
/// </summary>
public IEnumerable<string> AssetGroupNames { get; set; }
/// <summary>
/// 簿记账户名称
/// </summary>
public IEnumerable<string> AssetBookNames { get; set; }
/// <summary>
/// 标的代码
/// </summary>
public IEnumerable<string> UnderlyingCodes { get; set; }
}
}