Files
zszq-trs/Framework/YLErp.Core/DBModels/Clientbalancedaily.cs
T

643 lines
20 KiB
C#

using System.ComponentModel.DataAnnotations.Schema;
namespace YLErp.DBModels
{
/// <summary>
/// 客户结算统计
/// </summary>
[Table("clientbalancedaily")]
public class ClientBalanceDaily : DBModelWithOperator
{
[DisplayName("预付金")]
public double? CashDeposit { get; set; }
[DisplayName("授信额度")]
public double? Credit { get; set; }
/// <summary>
/// 追保金额(所有欠缺金额)
/// </summary>
[DisplayName("追保金额")]
public double? Margin { get; set; }
[NotMapped]
public double MarginAbs
{
get
{
return Math.Abs(Margin ?? 0);
}
}
/// <summary>
/// 客户信息
/// </summary>
[DisplayName("客户信息")]
public int ClientId { get; set; }
/// <summary>
/// 客户名称
/// </summary>
[DisplayName("客户名称")]
public string ClientName { get; set; }
/// <summary>
/// 客户编号
/// </summary>
[DisplayName("客户编号")]
public string ClientNumber { get; set; }
/// <summary>
/// 结算日期
/// </summary>
[DisplayName("结算日期")]
public DateTime? BalanceDate { get; set; }
/// <summary>
/// 上日资金余额
/// </summary>
[DisplayName("上日资金余额")]
public double? LastDayRemainFund { get; set; }
/// <summary>
/// 上日资金余额(包含抵押品价值)
/// </summary>
[NotMapped]
public double? LastDayRemainFundWithProduct
{
get
{
return LastDayRemainFund + TodayRemianFundProduct - CashInCashOutProductChange;
}
}
/// <summary>
/// 当日资金余额(不包含抵押品价值)
/// </summary>
[DisplayName("当日资金余额")]
public double? ToDayRemainFund { get; set; }
/// <summary>
/// 当日资金余额(包含抵押品价值)
/// </summary>
[NotMapped]
public double? ToDayRemainFundWithProduct
{
get
{
return ToDayRemainFund + TodayRemianFundProduct;
}
}
/// <summary>
/// 当日入金
/// </summary>
[DisplayName("当日入金")]
public double? InFund { get; set; }
/// <summary>
/// 当日出金
/// 为绝对值,不包含出金方向
/// </summary>
[DisplayName("当日出金")]
public double? OutFund { get; set; }
/// <summary>
/// 其他收入
/// </summary>
[DisplayName("其他收入")]
public double? InFundOther { get; set; }
/// <summary>
/// 其他支出
/// </summary>
[DisplayName("其他支出")]
public double? OutFundOther { get; set; }
/// <summary>
/// 当日损益
/// </summary>
private double? _DayGainLoss;
/// <summary>
/// 当日损益
/// </summary>
[DisplayName("当日损益")]
public double? DayGainLoss
{
set { _DayGainLoss = value; }
get { return _DayGainLoss == null ? _DayGainLoss : Round(_DayGainLoss.Value, 2); }
}
/// <summary>
/// 持仓盈亏
/// </summary>
private double? _PositionPnl;
/// <summary>
/// 持仓盈亏
/// </summary>
[DisplayName("持仓盈亏")]
public double? PositionPnl
{
set { _PositionPnl = value; }
get { return _PositionPnl == null ? _PositionPnl : Round(_PositionPnl.Value, 2); }
}
/// <summary>
/// 四舍五入处理后的持仓盈亏
/// </summary>
public double? RoundedPositionPnl { get; set; }
/// <summary>
/// 期权空头浮动盈利=∑max(期权空头持仓*(期权合约成本价-期权合约现价), 0) 从客户角度看的
/// </summary>
public double? ClientSellPositionPnl { get; set; }
/// <summary>
/// 总盈亏
/// </summary>
private double? _TotalPnl;
/// <summary>
/// 总盈亏
/// </summary>
[DisplayName("总盈亏")]
public double? TotalPnl
{
set { _TotalPnl = value; }
get { return _TotalPnl == null ? _TotalPnl : Round(_TotalPnl.Value, 2); }
}
//每日盈亏
[DisplayName("每日盈亏")]
public double? DailyPnl { get; set; }
[NotMapped]
public double? RoundedDailyPnl { get; set; }
/// <summary>
/// 状态
/// </summary>
[DisplayName("状态")]
public string State { get; set; }
///// <summary>
///// 确认人
///// </summary>
//[DisplayName("确认人")]
//public int? ConfirmerId { get; set; }
///// <summary>
///// 确认人
///// </summary>
//[DisplayName("确认人")]
//public string ConfirmerName { get; set; }
///// <summary>
///// 结算书
///// </summary>
//[DisplayName("结算书")]
//public string ConfirmBookHtml { get; set; }
[NotMapped]
public double? Amount { get; set; }
/// <summary>
/// 期权费收支
/// </summary>
[DisplayName("期权费收支")]
public double? OptionPremium { get; set; }
/// <summary>
/// 期权费收支(互换)
/// </summary>
[DisplayName("收益互换期权费")]
public double? OptionPremiumSwap { get; set; }
/// <summary>
/// 结算收支
/// </summary>
[DisplayName("结算收支")]
public double? SettlementBalance { get; set; }
/// <summary>
/// 当日平仓收益
/// </summary>
[DisplayName("当日平仓收益")]
public double? UnwindBalance { get; set; }
/// <summary>
/// 当日行权收益
/// </summary>
[DisplayName("当日行权收益")]
public double? ExerciseBalance { get; set; }
/// <summary>
/// 当日互换收益
/// </summary>
[DisplayName("当日互换收益")]
public double? SwapBalance { get; set; }
/// <summary>
/// 净资金流入
/// </summary>
[DisplayName("净资金流入")]
public double? NetFund { get; set; }
/// <summary>
/// 其他收支
/// </summary>
[DisplayName("其他收支")]
public double? OtherFund { get; set; }
/// <summary>
/// 票息
/// </summary>
[DisplayName("票息")]
public double? Coupon { get; set; }
/// <summary>
/// 预付金余额
/// </summary>
[DisplayName("预付金余额")]
public double? MarginBalance { get; set; }
/// <summary>
/// 冻结权利金
/// </summary>
[DisplayName("冻结权利金")]
public double? FrozenPremium { get; set; }
/// <summary>
/// 冻结出金
/// </summary>
[DisplayName("冻结出金")]
public double? FrozenOutFund { get; set; }
/// <summary>
/// 冻结抵押品赎回
/// </summary>
[DisplayName("冻结抵押品赎回")]
public double? FrozenRedeemFunds { get; set; }
/// <summary>
/// 冻结资金
/// </summary>
[DisplayName("冻结资金")]
public double? FrozenBalance { get; set; }
/// <summary>
/// 应付到期权利金
/// </summary>
[DisplayName("应付到期权利金")]
public double? CopeWithExpirePremium { get; set; }
/// <summary>
/// 应付存续权利金
/// </summary>
[DisplayName("应付存续权利金")]
public double? CopeWithLastPremium { get; set; }
/// <summary>
/// 了结交易权利金
/// </summary>
[DisplayName("了结权利金")]
public double? EndPremium { get; set; }
/// <summary>
/// 潜在行权盈余
/// </summary>
[DisplayName("潜在行权盈余")]
public double? Pv { get; set; }
/// <summary>
/// 四舍五入处理后的持仓市值
/// </summary>
public double? RoundedPv { get; set; }
/// <summary>
/// 空头持仓市值
/// </summary>
[DisplayName("空头持仓市值")]
public double? SellPv { get; set; }
/// <summary>
/// 当日该客户所有持仓的卖出期权权利金
/// </summary>
[DisplayName("权利金冻结")]
public double? SellTradePrice { get; set; }
/// <summary>
/// 客户权益(现金+持仓市值+抵押品总价值)
/// </summary>
[NotMapped]
public double? TotalAmount
{
get
{
return (ToDayRemainFund ?? 0) + (Pv ?? 0) + (TodayRemianFundProduct ?? 0) - (PrepaymentAmount ?? 0);
}
}
/// <summary>
/// 客户权益(现金+四舍五入处理后的持仓市值+抵押品总价值)
/// </summary>
[NotMapped]
public double? RoundedTotalAmount
{
get
{
return (ToDayRemainFund ?? 0) + (RoundedPv ?? 0) + (TodayRemianFundProduct ?? 0) - (PrepaymentAmount ?? 0);
}
}
/// <summary>
/// 未了结名义成交金额
/// </summary>
[DisplayName("未了结名义成交金额")]
public double? TotalNominal { get; set; }
/// <summary>
/// 应付预付金
/// 负数代表客户应缴预付金,正数代表客户应收预付金
/// </summary>
[DisplayName("应付预付金")]
public double? PayableMargin { get; set; }
/// <summary>
/// 互换应付预付金(要么为负,要么为零)
/// </summary>
[DisplayName("互换应付预付金")]
public double? SwapPayableMargin { get; set; }
/// <summary>
/// 互换预付金容忍
/// </summary>
[DisplayName("互换预付金容忍")]
public double? SwapUnPayableMargin { get; set; }
/// <summary>
/// Delta预付金
/// 负数代表客户应缴预付金,正数代表客户应收预付金
/// </summary>
public double? DeltaMargin { get; set; }
/// <summary>
/// 应付预付金(结算报告客户角度,正数代表他要付钱,负数代表应收)
/// </summary>
public double MinusPayableMargin
{
get
{
return -PayableMargin ?? 0;
}
}
/// <summary>
/// 双向预付金(暂时只有国君用到该字段)
/// </summary>
public double? TwoSideMargin { get; set; }
/// <summary>
/// 本方角度预付金
/// </summary>
public double? MySideMargin { get; set; }
/// <summary>
/// 客户角度预付金
/// </summary>
public double? OtherSideMargin { get; set; }
/// <summary>
/// 是否是手动修改过的预付金占用
/// </summary>
public bool? IsPayableMarginManual { get; set; }
/// <summary>
/// 冻结预付金(绝对值)
/// </summary>
[DisplayName("冻结预付金")]
public double? FrozenMarginMoney { get; set; }
/// <summary>
/// 可提取预付金
/// </summary>
[DisplayName("可提取预付金")]
public double? AdvisableMargin { get; set; }
/// <summary>
/// 抵押品变化
/// </summary>
[DisplayName("抵押品变化")]
public double? CashInCashOutProductChange { get; set; }
/// <summary>
/// 当日抵押品资金余额
/// </summary>
[DisplayName("当日抵押品资金余额")]
public double? TodayRemianFundProduct { get; set; }
//是否期权费授信
[DisplayName("是否期权费授信")]
public bool? IsTradeCredit
{
get; set;
}
/// <summary>
/// 潜在行权盈余
/// </summary>
[DisplayName("潜在行权盈余")]
public double? PotentialSurpluses { get; set; }
/// <summary>
/// 持仓期权费净额
/// </summary>
[DisplayName("持仓期权费净额")]
public double? PositionPremiumNetCash { get; set; }
/// <summary>
/// 期初持仓交易净额
/// </summary>
[DisplayName("期初持仓交易净额")]
public double? LastDayPositionPremiumNetCash { get; set; }
/// <summary>
/// 实现盈亏
/// </summary>
[DisplayName("实现盈亏")]
public double? WinLoss { get; set; }
/// <summary>
/// 额外追保
/// </summary>
[DisplayName("额外追保")]
public double? AdditionalMargin
{
get; set;
}
/// <summary>
/// 可用名义本金规模
/// </summary>
public double? AvailableStockEqvNotional { get; set; }
/// <summary>
/// 潜在风险暴露
/// </summary>
public double? PFE { get; set; }
/// <summary>
/// 违约风险暴露
/// </summary>
public double? EAD { get; set; }
//---------------------------------------
// 总和
//---------------------------------------
/// <summary>
/// 净资金流入总和
/// </summary>
public double? NetFundSum { get; set; }
/// <summary>
/// 入金总和
/// </summary>
public double? InFundSum { get; set; }
/// <summary>
/// 出金总和
/// </summary>
public double? OutFundSum { get; set; }
/// <summary>
/// 其他收支总和
/// </summary>
public double? OtherFundSum { get; set; }
/// <summary>
/// 期权费收支(权利金收支)总和
/// </summary>
public double? OptionPremiumSum { get; set; }
/// <summary>
/// 期权费收支(权利金收支)总和 -- 互换
/// </summary>
public double? OptionPremiumSwapSum { get; set; }
/// <summary>
/// 结算费支出(客户平仓行权收益)总和
/// </summary>
public double? SettlementBalanceSum { get; set; }
/// <summary>
/// 结算费支出(客户平仓收益)总和
/// </summary>
public double? UnwindBalanceSum { get; set; }
/// <summary>
/// 结算费支出(客户行权收益)总和
/// </summary>
public double? ExerciseBalanceSum { get; set; }
public double? SwapBalanceSum { get; set; }
/// <summary>
/// 抵押品变化总和
/// </summary>
public double? CashInCashOutProductChangeSum { get; set; }
/// <summary>
/// 实现盈亏总和
/// </summary>
public double? WinLossSum { get; set; }
/// <summary>
/// 了结权利金总和
/// </summary>
public double? EndPremiumSum { get; set; }
/// <summary>
/// 票息总和
/// </summary>
public double? CouponSum { get; set; }
public string FundJson { get; set; }
/// <summary>
/// 客户持仓交易预付金总和,客户买入为正,客户卖出为负
/// </summary>
public double? PrepaymentAmount { get; set; }
/// <summary>
/// 维保线
/// </summary>
public double? MaintenanceLine { get; set; }
/// <summary>
/// 追保入金
/// </summary>
public double? vm_in_fund { get; set; }
/// <summary>
/// 追保 入金累计
/// </summary>
public double? vm_in_fund_sum { get; set; }
/// <summary>
/// 追保 出金
/// </summary>
public double? vm_out_fund { get; set; }
/// <summary>
/// 追保 出金累计
/// </summary>
public double? vm_out_fund_sum { get; set; }
/// <summary>
/// 交易费用
/// </summary>
public double? trade_fee { get; set; }
public double? trade_fee_sum { get; set; }
/// <summary>
/// 利息盈亏
/// </summary>
public double? interest_pnl { get; set; }
public double? interest_pnl_sum { get; set; }
[NotMapped]
public FundObject FundObject { get; set; }
private static double Round(double value, int digit)
{
var num = Convert.ToDouble("1e-" + digit);
return Math.Round(value / num, 0, MidpointRounding.AwayFromZero) * num;
}
}
public class FundObject
{
public Dictionary<string, double> InFund { get; set; } = new Dictionary<string, double>();
public Dictionary<string, double> VmInFund { get; set; } = new Dictionary<string, double>();
/// <summary>
/// 出金为绝对值,不包含出金方向处理
/// </summary>
public Dictionary<string, double> OutFund { get; set; } = new Dictionary<string, double>();
public Dictionary<string, double> VmOutFund { get; set; } = new Dictionary<string, double>();
public Dictionary<string, double> NetFund { get; set; } = new Dictionary<string, double>();
public Dictionary<string, double> InFundOther { get; set; } = new Dictionary<string, double>();
public Dictionary<string, double> OutFundOther { get; set; } = new Dictionary<string, double>();
public Dictionary<string, double> OtherFund { get; set; } = new Dictionary<string, double>();
public Dictionary<string, double> InFundSum { get; set; } = new Dictionary<string, double>();
public Dictionary<string, double> VmInFundSum { get; set; } = new Dictionary<string, double>();
public Dictionary<string, double> OutFundSum { get; set; } = new Dictionary<string, double>();
public Dictionary<string, double> VmOutFundSum { get; set; } = new Dictionary<string, double>();
public Dictionary<string, double> NetFundSum { get; set; } = new Dictionary<string, double>();
public Dictionary<string, double> OtherFundSum { get; set; } = new Dictionary<string, double>();
public Dictionary<string, double> TodayRemainFund { get; set; } = new Dictionary<string, double>();
public Dictionary<string, double> LastDayRemainFund { get; set; } = new Dictionary<string, double>();
}
[NotMapped]
public class clientbalanceStatistics : ClientBalanceDaily
{
public double? CreditRatio { get; set; }
public double? AvailableFund { get; set; }
public static clientbalanceStatistics TransferFromClientbalancedaily(ClientBalanceDaily clientbalancedaily)
{
var clientbalanceStatistics = new clientbalanceStatistics
{
Amount = clientbalancedaily.Amount ?? 0,
CashDeposit = clientbalancedaily.CashDeposit ?? 0,
DayGainLoss = clientbalancedaily.DayGainLoss ?? 0,
LastDayRemainFund = clientbalancedaily.LastDayRemainFund ?? 0,
ToDayRemainFund = clientbalancedaily.ToDayRemainFund ?? 0,
InFund = clientbalancedaily.InFund ?? 0,
OutFund = clientbalancedaily.OutFund ?? 0,
OptionPremium = clientbalancedaily.OptionPremium ?? 0,
OptionPremiumSwap = clientbalancedaily.OptionPremiumSwap ?? 0,
SettlementBalance = clientbalancedaily.SettlementBalance ?? 0,
UnwindBalance = clientbalancedaily.UnwindBalance ?? 0,
ExerciseBalance = clientbalancedaily.ExerciseBalance ?? 0,
Coupon = clientbalancedaily.Coupon ?? 0,
SwapBalance = clientbalancedaily.SwapBalance ?? 0,
MarginBalance = clientbalancedaily.MarginBalance,
Pv = clientbalancedaily.Pv,
Credit = clientbalancedaily.Credit,
CreditRatio = 0,
Margin = clientbalancedaily.Margin,
TodayRemianFundProduct = clientbalancedaily.TodayRemianFundProduct,
CashInCashOutProductChange = clientbalancedaily.CashInCashOutProductChange
};
return clientbalanceStatistics;
}
}
}