从山证v2.3.0拷贝
This commit is contained in:
@@ -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)
|
||||
};
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user