可用资金计算修复
This commit is contained in:
@@ -797,41 +797,7 @@ namespace YLErp.Models
|
||||
/// <summary>
|
||||
/// 可取资金 (可用资金 - 持仓期权费净额)
|
||||
/// </summary>
|
||||
public double DesirableFund
|
||||
{
|
||||
get
|
||||
{
|
||||
if (PS.Config.Is申万 || PS.Config.Is宏源)
|
||||
{
|
||||
return Math.Max(AvailableAmount + FrozenRedeemFunds, 0);
|
||||
}
|
||||
else if (PS.Config.Is厦门象屿)
|
||||
{
|
||||
return Math.Max(AvailableAmount + FrozenRedeemFunds - Math.Max(FrozenBalance, 0) - Math.Max(-PositionPremiumNetCash, 0), 0);
|
||||
}
|
||||
else if (PS.Config.Is国投)
|
||||
{
|
||||
return Math.Max(AvailableAmount - TotalCredit, 0);
|
||||
}
|
||||
//伴兴 可用资金改为 可用资金=授信额度+期末结存-预付金占用 这里 -TotalCredit 是为了恢复系统默认算法
|
||||
else if (PS.Config.Is伴兴)
|
||||
{
|
||||
return Math.Max(AvailableAmount + FrozenRedeemFunds - Math.Max(-PositionPremiumNetCash, 0) - TotalCredit, 0);
|
||||
}
|
||||
else if (PS.Config.Is湘财)
|
||||
{
|
||||
return Math.Max(AvailableAmount + FrozenRedeemFunds - TotalCredit, 0);
|
||||
}
|
||||
else if (PS.Config.Is东吴)
|
||||
{
|
||||
return Math.Max(AmountFund + PayableMargin * DesirableRate, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
return Math.Max(AvailableAmount + FrozenRedeemFunds - Math.Max(-PositionPremiumNetCash, 0), 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
public double DesirableFund { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 已了结部分可取资金 (期末结存_权利金后付)
|
||||
|
||||
@@ -228,7 +228,9 @@ namespace YLErp.BLL.EodSettlement
|
||||
}
|
||||
else
|
||||
{
|
||||
data.AvailableAmount = data.AmountFund + data.TotalCredit + data.PayableMargin + data.GuaranteesTotalAmount;
|
||||
//data.AvailableAmount = data.AmountFund + data.TotalCredit + data.PayableMargin + data.GuaranteesTotalAmount;
|
||||
var AvailableMoney = data.AmountFund + data.TotalCredit + data.PayableMargin + data.GuaranteesTotalAmount;
|
||||
data.AvailableAmount = AvailableMoney - data.FrozenMarginMoney;
|
||||
data.MinusPayableMarginTotal = data.MinusPayableMargin;
|
||||
data.MarginByPayableMarginTotal = data.MarginByPayableMargin;
|
||||
}
|
||||
|
||||
@@ -238,15 +238,7 @@ namespace YLErp.BLL.Eod
|
||||
#endregion
|
||||
|
||||
item.ValueDate = calcDate;
|
||||
if (clientFrozenFunds.TryGetValue(item.ClientId, out var clientFrozenFund))
|
||||
{
|
||||
item.FreezePremium = clientFrozenFund.FrozenPayableOptionMoney;
|
||||
item.ReceivablesPremium = clientFrozenFund.FrozenReceivableOptionMoney;
|
||||
item.FrozenOutFund = clientFrozenFund.OutFunds;
|
||||
item.FrozenRedeemFunds = clientFrozenFund.RedeemFunds;
|
||||
//冻结预付金
|
||||
item.FrozenMarginMoney = clientFrozenFund.FrozenMarginMoney;
|
||||
}
|
||||
|
||||
item.NetFund = item.InFund - item.OutFund;
|
||||
item.OtherFund = item.InFundOther + item.OutFundOther;
|
||||
//上日资金余额
|
||||
@@ -256,68 +248,16 @@ namespace YLErp.BLL.Eod
|
||||
//当前账号资金
|
||||
item.AmountFund = item.AmountFund + item.NetFund + item.OtherFund + item.Coupon + item.OptionPremium + item.OptionPremiumSwap + item.SwapBalance + item.SettlementBalance;
|
||||
|
||||
//当日可用资金 账户总资金 - 应付冻结权利金 - 冻结出金 - 冻结抵押品赎回 + 应收冻结权利金 - 应付预付金 - 冻结预付金
|
||||
item.AvailableAmount = item.AmountFund - item.FreezePremium - item.FrozenOutFund - item.FrozenRedeemFunds +
|
||||
item.ReceivablesPremium + item.PayableMargin - item.FrozenMarginMoney;
|
||||
item.AvailableAmount = item.AmountFund + item.TotalCredit + item.PayableMargin + item.GuaranteesTotalAmount + item.RoundedPositionPnl - item.FrozenMarginMoney;
|
||||
item.DesirableFund = item.AvailableAmount;
|
||||
//预付金余额
|
||||
item.MarginBalance = item.AmountFund - item.FreezePremium - item.FrozenOutFund - item.FrozenRedeemFunds +
|
||||
item.ReceivablesPremium + item.GuaranteesTotalAmount;
|
||||
|
||||
//判断潜在行权盈余是否计入预付金余额
|
||||
if (_systemDate.IsPotentialSurplusUseMargin == 1)
|
||||
{
|
||||
item.MarginBalance += item.PotentialSurpluses;
|
||||
item.AvailableAmount += item.PotentialSurpluses;
|
||||
}
|
||||
|
||||
//互换最大可用资金
|
||||
var marginBalanceSurplus = 0d;
|
||||
|
||||
item.CreditCanApplySwap = clientDic.ContainsKey(clientId) ? clientDic[clientId].creditCanApplySwap : false;
|
||||
|
||||
//计算追保金额
|
||||
//是否期权费授信
|
||||
if (item.IsTradeCredit)
|
||||
{
|
||||
//授信是否可用于互换
|
||||
if (item.CreditCanApplySwap)
|
||||
{
|
||||
//期权费授信可以支付权利金 则预付金余额未0时 资金从 互换剔除互换容忍金额
|
||||
item.Margin = Math.Min(item.MarginBalance + item.TotalCredit + (item.PayableMargin - item.SwapUnMargin), 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
//互换最大可用资金
|
||||
marginBalanceSurplus = Math.Max(Math.Min(Math.Max(item.MarginBalance - item.OptionPremiumSwap + item.TotalCredit + (item.PayableMargin - item.SwapPayableMargin), 0), Math.Max(item.MarginBalance - item.OptionPremiumSwap, 0)), 0);
|
||||
|
||||
//收益互换追保金额 剩余可支付互换资金 - (互换占用预付金 - 互换容忍预付金额度)
|
||||
var SwapMargin = Math.Min(marginBalanceSurplus + item.OptionPremiumSwap + (item.SwapPayableMargin - item.SwapUnMargin), 0);
|
||||
|
||||
//计算期权追保
|
||||
item.Margin = Math.Min(item.MarginBalance - item.OptionPremiumSwap + item.TotalCredit + (item.PayableMargin - item.SwapPayableMargin), 0) + SwapMargin;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
//授信是否可用于互换
|
||||
if (item.CreditCanApplySwap)
|
||||
{
|
||||
//期权费授信不可以支付权力金时
|
||||
item.Margin = Math.Min(Math.Max(item.MarginBalance, 0) + item.TotalCredit + (item.PayableMargin - item.SwapUnMargin), 0) + Math.Min(item.MarginBalance, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
//互换最大可用资金
|
||||
marginBalanceSurplus = Math.Max(Math.Min(Math.Max(Math.Max(item.MarginBalance - item.OptionPremiumSwap, 0) + item.TotalCredit + (item.PayableMargin - item.SwapUnMargin), 0), Math.Max(item.MarginBalance - item.OptionPremiumSwap, 0)), 0);
|
||||
|
||||
//收益互换追保金额 剩余可支付互换资金 - (互换占用预付金 - 互换容忍预付金额度)
|
||||
var SwapMargin = Math.Min(marginBalanceSurplus + item.OptionPremiumSwap + (item.SwapPayableMargin - item.SwapUnMargin), 0) + Math.Min(marginBalanceSurplus + item.OptionPremiumSwap, 0);
|
||||
|
||||
//计算期权追保
|
||||
item.Margin = Math.Min(Math.Max(item.MarginBalance - item.OptionPremiumSwap, 0) + item.TotalCredit + (item.PayableMargin - item.SwapUnMargin), 0) + Math.Min(item.MarginBalance - item.OptionPremiumSwap, 0) + SwapMargin;
|
||||
}
|
||||
}
|
||||
|
||||
//可取预付金为预付金余额 - 应缴预付金(上浮 + 0.02)
|
||||
item.AdvisableMargin = Math.Max(item.MarginBalance + item.PayableMargin * marginMaxRation / marginRation, 0);
|
||||
|
||||
@@ -1485,12 +1425,12 @@ namespace YLErp.BLL.Eod
|
||||
foreach (var itemGroup in flowGroup)
|
||||
{
|
||||
var balance = clientBalanceDic[itemGroup.Key.ClientId ?? 0];
|
||||
string marginType = balance.ClientType == 1 ? "多空组合" : "品种";
|
||||
//string marginType = balance.ClientType == 1 ? "多空组合" : "品种";
|
||||
// 获取客户预付金比例设置
|
||||
var clientMarginTemplate = clientMarginTemplates.FirstOrDefault(x => x.ClientId == itemGroup.Key.ClientId && x.Type == marginType);
|
||||
var clientMarginTemplate = clientMarginTemplates.FirstOrDefault(x => x.ClientId == itemGroup.Key.ClientId );
|
||||
if (clientMarginTemplate == null)
|
||||
{
|
||||
clientMarginTemplate = clientMarginTemplates.FirstOrDefault(x => x.ClientId == 0 && x.Type == marginType);
|
||||
clientMarginTemplate = clientMarginTemplates.FirstOrDefault(x => x.ClientId == 0 );
|
||||
}
|
||||
// 没有设置预付金比例则跳过
|
||||
if (clientMarginTemplate == null)
|
||||
|
||||
@@ -62,7 +62,7 @@ namespace RealTimeCalcPositionService
|
||||
var clientSettles = new RealTimeClientBanlanceService(new OptUserInfo(0, "实时客户资金服务", OptUserFrom.Service)).GetBalances();
|
||||
foreach (var cb in clientSettles)
|
||||
{
|
||||
cb.AvailableAmount = cb.AmountFund + cb.TotalCredit + cb.PayableMargin + cb.GuaranteesTotalAmount;
|
||||
var AvailableMoney = cb.AvailableAmount + cb.FrozenMarginMoney;
|
||||
Result result = new Result();
|
||||
try
|
||||
{
|
||||
@@ -75,7 +75,8 @@ namespace RealTimeCalcPositionService
|
||||
DaliyPnl = Math.Round(cb.DaliyPnl, 2),
|
||||
ClientId = cb.ClientId,
|
||||
ClientType = cb.ClientType,
|
||||
Credit = cb.TotalCredit
|
||||
Credit = cb.TotalCredit,
|
||||
AvailableMoney = AvailableMoney
|
||||
};
|
||||
result.success = true;
|
||||
result.obj = obj;
|
||||
|
||||
Reference in New Issue
Block a user