Files
zszq-trs/YLErpWeb/Views/risk/RiskExposureReport.cshtml
T
2024-05-09 14:06:26 +08:00

804 lines
48 KiB
Plaintext

@{
ViewBag.Title = "市场风险";
Layout = "~/Views/Shared/_MainLayout.cshtml";
var pageObj = new
{
valueDate_Start = PS.Config.Is光大光子 ? "" : (valuedateBLL.SystemDate.AccruedTotalPnlStartDate ?? DateTime.Today).ToString("yyyy-MM-dd"),
valueDate_eod = ViewBag.lastDate_eod.ToString("yyyy-MM-dd"),
valueDate_settle = ViewBag.lastDate_settle.ToString("yyyy-MM-dd"),
usePositionVol = Context.Request.Query["positionVol"] == "1"
};
var CalculatePnlExplain = PS.Config.GetSettlementConfig().CalcPnlExplain;
}
@section CSS{
<style>
th, td {
text-align: center;
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
}
#listdiv {
border-bottom: 1px solid #d3d3d3;
border-right: 1px solid #d3d3d3;
overflow-y: hidden !important;
margin: 0 1rem;
}
.form-horizontal .form-group {
margin-left: 0px;
margin-right: 0px;
}
/*关键设置 tbody出现滚动条*/
#listdiv table tbody {
display: block;
height: 500px;
overflow-y: scroll;
}
#listdiv table thead,
#listdiv tbody tr {
display: table;
width: 100%;
table-layout: fixed;
}
/*关键设置:滚动条默认宽度是16px 将thead的宽度减16px*/
#listdiv table thead {
width: 100%
}
#listdiv td {
width: 110px !important;
word-break: keep-all; /* 不换行 */
white-space: nowrap; /* 不换行 */
overflow: hidden; /* 内容超出宽度时隐藏超出部分的内容 */
font-weight: 700;
}
#listdiv td:nth-child(3) {
text-align: center;
}
#listdiv .table tr:nth-child(2) th {
height: 54px !important;
}
.table > tbody > tr > td {
padding: 8px 4px;
}
.table {
margin-bottom: 0px;
}
.lastCell {
border-right: 0 !important;
padding: 0 !important;
}
</style>
}
@section JS
{
<script src="~/Scripts/app/tradeHelper.js?v=@HtmlUtil.JsVersion"></script>
<script>
var page = @Json.Serialize(pageObj);
main.setTradeDatePicker(page.valueDate_eod);
$("#DateFromValueDate,#DateToValueDate").datepicker("option", "maxDate", page.valueDate_eod);
$("#DateFromValueDate").val(page.valueDate_Start);
$("#DateToValueDate").val(page.valueDate_eod);
$("#DateFromValueDate").on("change", function () {
var startDate = $(this).val();
if (!main.isDate(startDate)) {
startDate = new Date(0, 0, 1);
}
var currentDate = $("#DateToValueDate").val();
$("#DateToValueDate").datepicker("option", "minDate", startDate);
if (currentDate < $("#DateToValueDate").val()) {
$("#DateToValueDate").val(currentDate);
}
});
$("#DateToValueDate").on("change", function () {
var endDate = $(this).val();
if (!main.isDate(endDate)) {
return;
}
var currentDate = $("#DateFromValueDate").val();
$("#DateFromValueDate").datepicker("option", "maxDate", endDate);
if (currentDate < $("#DateFromValueDate").val()) {
$("#DateFromValueDate").val(currentDate);
}
});
try {
SetAceDropDown();
} catch (e) {
}
$(function () {
//$("#VarietyId").change(function (obj) { changeUnderlyingTypeIds(obj); });
let underlyingCtrl = new tradeHelper.UnderlyingSelectCtrl('#UnderlyingId')
.setFlag(tradeHelper.UnderlyingSelectFlag.OtcTrade);
setWidth();
$("#listdiv").scroll(function () {
var leftPosition = parseInt($("#listdiv tr:first th:first").offset().left + $("#listdiv tr:first th:first").width());
var position = parseInt($("#tableFirst tr:first th:first").offset().left + $("#tableFirst tr:first th:first").width());
if (leftPosition <= position) {
if ($("#listdiv tr:first th:first").css("border-right-color") !== "rgb(249, 249, 249)") {
$("#listdiv tr:first th:first").css("border-right-color", "rgb(249, 249, 249)");
}
} else {
if ($("#listdiv tr:first th:first").css("border-right-color") !== "rgb(221, 221, 221)") {
$("#listdiv tr:first th:first").css("border-right-color", "rgb(221, 221, 221)");
}
}
position = parseInt($("#tableFirst tr:first th:first").offset().left + $("#tableFirst tr:first th:first").width() / 2);
if (leftPosition <= position) {
if ($("#listdiv tr:first th:first").text() !== "\xa0") {
$("#listdiv tr:first th:first").text("\xa0");
}
} else {
if ($("#listdiv tr:first th:first").text() !== "汇总") {
$("#listdiv tr:first th:first").text("汇总");
}
}
});
});
var scrollWidth = 0;
var fixScrollWidth = 0;
function setWidth() {
var obj = $(".cuttingTbody");
if (obj[0]) {
var tempWidth = $(".cuttingTbody").width() - $(".cuttingTbody")[0].scrollWidth;
if (scrollWidth != tempWidth) {
var obj = $("#tableFirst tr:first th:last");
$(obj).css('width', tempWidth + 'px')
scrollWidth = tempWidth;
}
tempWidth = $("#listdiv table:first").width() - $("#listdiv table:first tr:eq(2)").width();
if (fixScrollWidth != tempWidth) {
var obj = $("#listdiv table:first tr:first th:last");
$(obj).css('width', tempWidth + 'px')
fixScrollWidth = tempWidth;
}
}
setTimeout(setWidth, 1000);
}
var vue = new Vue({
el: "#listdiv",
data: {
Model: null,
getHighlight: function (VarietyOpenLimitIcon, data, dataLowLimit, dataHighLimit, PositionStockEqvNotional) {
{
var background = "#EFF4F7";
if (!dataLowLimit && !dataHighLimit) {
return "background:" + background;
}
if ((VarietyOpenLimitIcon == '¥' && (
(dataHighLimit && (Math.abs(Math.round(data)) >= dataHighLimit)) ||
(dataLowLimit && (Math.abs(Math.round(data)) <= dataLowLimit)))) ||
(VarietyOpenLimitIcon == '%' && (
(dataHighLimit && (Math.abs(Math.round(data)) >= (dataHighLimit / 100 * PositionStockEqvNotional))) ||
((dataLowLimit && (Math.abs(Math.round(data)) <= (dataLowLimit / 100 * PositionStockEqvNotional))))))) {
background = "#FFE699";
}
return "background:" + background;
}
}
},
mounted: function () {
this.changePriceType();
//this.search();
},
filters: {
toNumberExcludingNaN: function (val) {
return main.toNumberExcludingNaNEx(val);
},
toPercent: function (val) {
return (val * 100).toFixed(2) + "%";
},
groupingFormat: main.numberFormat(0, { grouping: true }),
grouping2Format: main.numberFormat(2, { grouping: true })
},
updated: function () {
$("#listdiv").find("td").attr("title", (index) => {
return $("#listdiv").find("td")[index].innerText;
});
$(".selftooltip").tooltip({ html: true, show: 50000, trigger: "hover" });
var currentTab = 0
var l = $("#listdiv .cuttingTbodyFix")//左
var r = $("#listdiv .cuttingTbody")//右
l.unbind("scroll");
l.unbind("mouseover");
r.unbind("scroll");
r.unbind("mouseover");
l.scroll(function () {
if (currentTab !== 1) return;
r.scrollTop(l.scrollTop());
})
r.on('scroll', function () {
if (currentTab !== 2) return;
l.scrollTop(r.scrollTop());
})
l.on('mouseover', () => {
//1 表示表示当前鼠标位于.left元素范围内
currentTab = 1
})
r.on('mouseover', () => {
//2 表示表示当前鼠标位于.right元素范围内
currentTab = 2
})
},
methods: {
showUnderlyingInfo(underlyingRisk) {
if (underlyingRisk.VarietyCode == "组合标的") {
var html =
"<a href=\"#\" class=\"selftooltip\" style=\"z-index:10000000\" data-toggle=\"tooltip\" title=\"{1}\">{0}</a>"
.template(underlyingRisk.UnderlyingCode, underlyingRisk.SyntheticUnderlyingTipsInfo);
return html;
}
return underlyingRisk.UnderlyingCode;
},
search: function () {
var thisObj = this;
if (main.isEmpty($("#DateToValueDate").val())) {
return main.message("结算日不能为空");
}
var postData = {
BookIds: $("#BookId").val(),
AssetIdGroupList: $("#GroupId").val(),
TradeTypes: $("#TradeType").val(),
VarietyIds: $("#VarietyId").val(),
UnderlyingIds: $("#UnderlyingId").val(),
ValueDateStart: $("#DateFromValueDate").val(),
ValueDateEnd: $("#DateToValueDate").val(),
TraderIds: $("#TraderId").val(),
ClientIds: $("#ClientId").val(),
EodSettlePriceMode: $("#EodSettlePriceMode").val(),
usePositionVol: page.usePositionVol,
TagIds: $("#TagIds").val()
};
if ($("#DividendRateType")) {
postData.DividendRateType = $("#DividendRateType").val();
}
main.post("/risk/RiskExposureReportQuery", postData).done(function (res) {
thisObj.Model = res.obj;
});
},
exportToExcel: function () {
var postData = {
BookIds: $("#BookId").val(),
AssetIdGroupList: $("#GroupId").val(),
TradeTypes: $("#TradeType").val(),
VarietyIds: $("#VarietyId").val(),
UnderlyingIds: $("#UnderlyingId").val(),
ValueDateStart: $("#DateFromValueDate").val(),
ValueDateEnd: $("#DateToValueDate").val(),
TraderIds: $("#TraderId").val(),
ClientIds: $("#ClientId").val(),
EodSettlePriceMode: $("#EodSettlePriceMode").val(),
TagIds: $("#TagIds").val()
};
console.debug(postData);
main.formOpenNewPage("/risk/ExportRiskExposureReport", postData);
},
varietyOpenLimitEdit(risk) {
var addurl = "/variety/varietyOpenLimitEdit?varietyCode=" + risk.VarietyCode;
main.open("敞口金额修改", addurl, { area: ['650px', '600px'] });
},
changePriceType() {
var lastDate = new Date().Format("yyyy-MM-dd");
if ($('#EodSettlePriceMode').val() == "结算价") {
lastDate = page.valueDate_settle;
$('#settleBtn').show();
}
else {
lastDate = page.valueDate_eod;
$('#settleBtn').hide();
}
$("#DateFromValueDate,#DateToValueDate").datepicker("option", "maxDate", lastDate);
$("#DateFromValueDate").val(page.valueDate_Start);
if (!$("#DateToValueDate").val()) {
$("#DateToValueDate").val(lastDate);
}
},
//openSettlePage() {
// main.open("结算价收盘", "/eod_trade_value/eodBatchExec_Settle", { area: ["680px", "510px"] });
//}
trendChart() {
main.open("累积收益走势图", "/risk/TrendChart", { area: ["900px", "600px"] });
}
}
});
</script>
}
<div id="test"></div>
<div class="searchdiv">
@Html.MyAceDropdownInput("TraderId", "交易员", GlobalData.GetAllTrader())
@Html.MyAceDropdownInput("ClientId", "客户名称", ClientDataModel.GetAllOpenClient())
@Html.MyAceDropdownInput("BookId", "簿记账户", AssetunitController.GetClientassetunit())
@Html.MyAceDropdownInput("GroupId", "簿记账户组", AssetUnitModel.GetAllAssetUnitGroupItem())
@Html.MyAceDropdownInput("TradeType", "结构类型", GlobalData.GetSelectItems(ViewBag.TradeTypes as IEnumerable<string>))
@Html.MyAceDropdownInput("VarietyId", "标的品种", varietyController.GetAllvarietyCode())
<div class="search-group">
<span class="search-label">标的代码</span>
<select class="" data-placeholder="请选择 标的代码" id="UnderlyingId" name="UnderlyingId" multiple></select>
</div>
@Html.MyAceDropdownInput2("EodSettlePriceMode", "标的价格", GlobalData.GetSelectItems(new List<string>
{ "收盘价", "结算价" }), false, htmlAttributes: new { onchange = "vue.changePriceType()" })
@Html.SearchDateRange("ValueDate", "结算日期")
@Html.MyAceDropdownInput("TagIds", "标签值", TagController.GetTradeTagList(CurUser))
@if (PS.Config.Company == CompanyEnum.国元固收)
{
@Html.MyAceDropdownInput2("DividendRateType", "定价环境", GlobalData.GetSelectItems(new List<string> { "业务", "采集" },"业务"), false)
}
</div>
<div class="searchdiv">
@MyControls.Btn("查询", "vue.search()")
@MyControls.Btn("导出", "vue.exportToExcel()")
@MyControls.Btn("累积收益走势图", "vue.trendChart()")
@*@MyControls.Btn("结算价收盘", "vue.openSettlePage()", id: "settleBtn")*@
</div>
<div id="listdiv" style="overflow-y:scroll">
<template v-if="Model==null">
</template>
<template v-else>
@if (PS.Config.Is格林大华)
{
<h4 style="position: absolute; height: 50px; width: 100%;">综合盈亏比例: {{Model.TotalPnlRate|toPercent}}</h4>
}
<div style="overflow:hidden;position:absolute;width:333px;@(PS.Config.Is格林大华 ? " margin-top:50px;" : "" )">
<table class="table table-bordered" style="background:rgb(239, 244, 247);">
<thead>
<tr><th colspan="3" style="border-right-color: #f9f9f9">&nbsp;</th><th class="lastCell"></th></tr>
<tr>
<th>品种</th>
<th>合约</th>
<th>敞口限额</th>
<th></th>
</tr>
</thead>
<tbody class="cuttingTbodyFix">
<!--汇总-->
<template v-for="(risk,index) in Model.ReportModels">
<tr style="background: #EFF4F7;">
<td>{{risk.VarietyCode}}</td>
<td></td>
<td style="text-align: center; cursor:pointer; color:red" v-on:click="varietyOpenLimitEdit(risk)">设置</td>
</tr>
<template v-for="(item,index) in risk.UnderlyingRiskList">
<tr>
<td></td>
<td v-html="showUnderlyingInfo(item)"></td>
<td></td>
</tr>
</template>
</template>
<tr>
<td>合计</td>
<td></td>
<td></td>
</tr>
</tbody>
</table>
</div>
<!--全表-->
<table class="table table-bordered" id="tableFirst" style="@(PS.Config.Is格林大华 ? " margin-top:50px" : "" )">
<thead>
<tr>
<th colspan="@(CalculatePnlExplain?18+(PS.Config.Is国海?1:0):13+(PS.Config.Is国海?1:0))" style="border-right-color:#ddd">汇总</th>
<th colspan="@(CalculatePnlExplain?16+(PS.Config.Is国海?1:0):11+(PS.Config.Is国海?1:0))" style="border-right-color:#ddd">场外期权</th>
<th colspan="3" style="border-right-color:#ddd">远期</th>
<th colspan="4" style="border-right-color:#ddd">收益互换</th>
<th colspan="@(CalculatePnlExplain?18+(PS.Config.Is国海?1:0):13+(PS.Config.Is国海?1:0))" style="border-right-color:#ddd">场内期权</th>
<th colspan="7">标的交易</th>
<th class="lastCell"></th>
</tr>
<tr>
@*------汇总-------------*@
<th>品种</th>
<th>合约</th>
<th>敞口限额</th>
<th>合约价格</th>
<th>名义本金</th>
<th>当日盈亏</th>
<th>累计总盈亏</th>
@if (PS.Config.Is国海)
{
<th>累计浮动盈亏</th>
}
<th>Delta手数</th>
<th>Delta金额</th>
<th>Theta</th>
<th>Vega</th>
<th>Gamma</th>
<th>Gamma金额</th>
@if (CalculatePnlExplain)
{
<th>dPnlDelta</th>
<th>dPnlGamma</th>
<th>dPnlVega</th>
<th>dPnlTheta</th>
<th>dPnlPsi</th>
}
@*------场外期权----------*@
<th>名义本金</th>
<th>当日盈亏</th>
<th>累计总盈亏</th>
@if (PS.Config.Is国海)
{
<th>累计浮动盈亏</th>
}
<th>Delta手数</th>
<th>Gamma手数</th>
<th>Delta金额</th>
<th>Theta</th>
<th>Vega</th>
<th>Rho</th>
<th>Delta</th>
<th>Gamma</th>
@if (CalculatePnlExplain)
{
<th>dPnlDelta</th>
<th>dPnlGamma</th>
<th>dPnlVega</th>
<th>dPnlTheta</th>
<th>dPnlPsi</th>
}
@*------远期----------*@
<th>当日盈亏</th>
<th>累计总盈亏</th>
<th>Delta手数</th>
@*------收益互换----------*@
<th>名义本金</th>
<th>当日盈亏</th>
<th>累计总盈亏</th>
<th>Delta手数</th>
@*------场内期权----------*@
<th>名义本金</th>
<th>当日盈亏</th>
<th>当日手续费</th>
<th>累计总盈亏</th>
@if (PS.Config.Is国海)
{
<th>累计浮动盈亏</th>
}
<th>累计手续费</th>
<th>Delta</th>
<th>Delta手数</th>
<th>Delta金额</th>
<th>Gamma</th>
<th>Gamma手数</th>
<th>Theta</th>
<th>Vega</th>
<th>Rho</th>
@if (CalculatePnlExplain)
{
<th>dPnlDelta</th>
<th>dPnlGamma</th>
<th>dPnlVega</th>
<th>dPnlTheta</th>
<th>dPnlPsi</th>
}
@*------标的交易----------*@
<th>名义本金</th>
<th>当日盈亏</th>
<th>当日手续费</th>
<th>累计总盈亏</th>
<th>累计手续费</th>
<th>持仓手数</th>
<th>持仓变化</th>
<th></th>
</tr>
</thead>
<tbody class="cuttingTbody">
<template v-for="(risk,index) in Model.ReportModels">
<tr :style="{background: risk.VarietyOpenLimitIcon == '¥' && risk.VarietySum.PortfolioSum.DeltaCash > risk.VarietyOpenLimit ? '#EFF4F7' : (risk.VarietyOpenLimitIcon == '%' && risk.VarietySum.PortfolioSum.DeltaCash > risk.VarietyOpenLimit / 100 * risk.VarietySum.PortfolioSum.PositionStockEqvNotional ? '#EFF4F7' : '#EFF4F7')}">
<!--汇总-->
<td>{{risk.VarietyCode}}</td>
<td></td>
<td style="text-align: center; cursor:pointer;color:red" v-on:click="varietyOpenLimitEdit(risk)">设置</td>
<td></td>
<td style="text-align: right;">{{risk.VarietySum.PortfolioSum.StockEqvNotional|groupingFormat}}</td>
<td style="text-align: right;">{{risk.VarietySum.PortfolioSum.DailyPnl|groupingFormat}}</td>
<td style="text-align: right;">{{risk.VarietySum.PortfolioSum.Pnl|groupingFormat}}</td>
@if (PS.Config.Is国海)
{
<td style="text-align: right;">{{risk.VarietySum.PortfolioSum.CumulativeFloatProfitLoss|groupingFormat}}</td>
}
<td style="text-align: right;">{{risk.VarietySum.PortfolioSum.DeltaInLots|toNumberExcludingNaN}}</td>
<td style="text-align: right;" v-bind:style="getHighlight(risk.VarietyOpenLimitIcon,risk.VarietySum.PortfolioSum.DeltaCash,risk.varietyLimit.DeltaLowLimit,risk.varietyLimit.DeltaHighLimit,risk.VarietySum.PortfolioSum.StockEqvNotional)">{{risk.VarietySum.PortfolioSum.DeltaCash|groupingFormat}}</td>
<td style="text-align: right;" v-bind:style="getHighlight(risk.VarietyOpenLimitIcon,risk.VarietySum.PortfolioSum.Theta,risk.varietyLimit.ThetaLowLimit,risk.varietyLimit.ThetaHighLimit,risk.VarietySum.PortfolioSum.StockEqvNotional)">{{risk.VarietySum.PortfolioSum.Theta|groupingFormat}}</td>
<td style="text-align: right;" v-bind:style="getHighlight(risk.VarietyOpenLimitIcon,risk.VarietySum.PortfolioSum.Vega,risk.varietyLimit.VegaLowLimit,risk.varietyLimit.VegaHighLimit,risk.VarietySum.PortfolioSum.StockEqvNotional)">{{risk.VarietySum.PortfolioSum.Vega|groupingFormat}}</td>
<td style="text-align: right;" v-bind:style="getHighlight(risk.VarietyOpenLimitIcon,risk.VarietySum.PortfolioSum.Gamma,risk.varietyLimit.GammaLowLimit,risk.varietyLimit.GammaHighLimit,risk.VarietySum.PortfolioSum.StockEqvNotional)">{{risk.VarietySum.PortfolioSum.Gamma|groupingFormat}}</td>
<td style="text-align: right;" v-bind:style="getHighlight(risk.VarietyOpenLimitIcon,risk.VarietySum.PortfolioSum.GammaCash,risk.varietyLimit.GammaCashLowLimit,risk.varietyLimit.GammaCashHighLimit,risk.VarietySum.PortfolioSum.StockEqvNotional)">{{risk.VarietySum.PortfolioSum.GammaCash|groupingFormat}}</td>
@if (CalculatePnlExplain)
{
<td style="text-align: right;">{{risk.VarietySum.PortfolioSum.dPnlDelta|groupingFormat}}</td>
<td style="text-align: right;">{{risk.VarietySum.PortfolioSum.dPnlGamma|groupingFormat}}</td>
<td style="text-align: right;">{{risk.VarietySum.PortfolioSum.dPnlVega|groupingFormat}}</td>
<td style="text-align: right;">{{risk.VarietySum.PortfolioSum.dPnlTheta|groupingFormat}}</td>
<td style="text-align: right;">{{risk.VarietySum.PortfolioSum.dPnlPsi|groupingFormat}}</td>
}
<!--场外-->
<td style="text-align: right;">{{risk.VarietySum.OtcSum.StockEqvNotional|groupingFormat}}</td>
<td style="text-align: right;">{{risk.VarietySum.OtcSum.DailyPnl|groupingFormat}}</td>
<td style="text-align: right;">{{risk.VarietySum.OtcSum.Pnl|groupingFormat}}</td>
@if (PS.Config.Is国海)
{
<td style="text-align: right;">{{risk.VarietySum.OtcSum.CumulativeFloatProfitLoss|groupingFormat}}</td>
}
<td style="text-align: right;">{{risk.VarietySum.OtcSum.DeltaInLots|toNumberExcludingNaN}}</td>
<td style="text-align: right;">{{risk.VarietySum.OtcSum.GammaInLots|toNumberExcludingNaN}}</td>
<td style="text-align: right;">{{risk.VarietySum.OtcSum.DeltaCash|groupingFormat}}</td>
<td style="text-align: right;">{{risk.VarietySum.OtcSum.Theta|grouping2Format}}</td>
<td style="text-align: right;">{{risk.VarietySum.OtcSum.Vega|grouping2Format}}</td>
<td style="text-align: right;">{{risk.VarietySum.OtcSum.Rho|grouping2Format}}</td>
<td style="text-align: right;">{{risk.VarietySum.OtcSum.Delta|toNumberExcludingNaN}}</td>
<td style="text-align: right;">{{risk.VarietySum.OtcSum.Gamma|toNumberExcludingNaN}}</td>
@if (CalculatePnlExplain)
{
<td style="text-align: right;">{{risk.VarietySum.OtcSum.dPnlDelta|grouping2Format}}</td>
<td style="text-align: right;">{{risk.VarietySum.OtcSum.dPnlGamma|grouping2Format}}</td>
<td style="text-align: right;">{{risk.VarietySum.OtcSum.dPnlVega|grouping2Format}}</td>
<td style="text-align: right;">{{risk.VarietySum.OtcSum.dPnlTheta|grouping2Format}}</td>
<td style="text-align: right;">{{risk.VarietySum.OtcSum.dPnlPsi|grouping2Format}}</td>
}
<!--远期-->
<td style="text-align: right;">{{risk.VarietySum.ForwardSum.DailyPnl|groupingFormat}}</td>
<td style="text-align: right;">{{risk.VarietySum.ForwardSum.Pnl|groupingFormat}}</td>
<td style="text-align: right;">{{risk.VarietySum.ForwardSum.DeltaInLots|toNumberExcludingNaN}}</td>
<!--收益互换-->
<td style="text-align: right;">{{risk.VarietySum.SwapSum.StockEqvNotional|groupingFormat}}</td>
<td style="text-align: right;">{{risk.VarietySum.SwapSum.DailyPnl|groupingFormat}}</td>
<td style="text-align: right;">{{risk.VarietySum.SwapSum.Pnl|groupingFormat}}</td>
<td style="text-align: right;">{{risk.VarietySum.SwapSum.DeltaInLots|toNumberExcludingNaN}}</td>
<!--场内期权-->
<td style="text-align: right;">{{risk.VarietySum.ExOptionSum.StockEqvNotional|groupingFormat}}</td>
<td style="text-align: right;">{{risk.VarietySum.ExOptionSum.DailyPnl|groupingFormat}}</td>
<td style="text-align: right;">{{risk.VarietySum.ExOptionSum.DailyCommission|groupingFormat}}</td>
<td style="text-align: right;">{{risk.VarietySum.ExOptionSum.Pnl|groupingFormat}}</td>
@if (PS.Config.Is国海)
{
<td style="text-align: right;">{{risk.VarietySum.ExOptionSum.CumulativeFloatProfitLoss|groupingFormat}}</td>
}
<td style="text-align: right;">{{risk.VarietySum.ExOptionSum.Commission|groupingFormat}}</td>
<td style="text-align: right;">{{risk.VarietySum.ExOptionSum.Delta|toNumberExcludingNaN}}</td>
<td style="text-align: right;">{{risk.VarietySum.ExOptionSum.DeltaInLots|toNumberExcludingNaN}}</td>
<td style="text-align: right;">{{risk.VarietySum.ExOptionSum.DeltaCash|groupingFormat}}</td>
<td style="text-align: right;">{{risk.VarietySum.ExOptionSum.Gamma|toNumberExcludingNaN}}</td>
<td style="text-align: right;">{{risk.VarietySum.ExOptionSum.GammaInLots|toNumberExcludingNaN}}</td>
<td style="text-align: right;">{{risk.VarietySum.ExOptionSum.Theta|grouping2Format}}</td>
<td style="text-align: right;">{{risk.VarietySum.ExOptionSum.Vega|grouping2Format}}</td>
<td style="text-align: right;">{{risk.VarietySum.ExOptionSum.Rho|grouping2Format}}</td>
@if (CalculatePnlExplain)
{
<td style="text-align: right;">{{risk.VarietySum.ExOptionSum.dPnlDelta|grouping2Format}}</td>
<td style="text-align: right;">{{risk.VarietySum.ExOptionSum.dPnlGamma|grouping2Format}}</td>
<td style="text-align: right;">{{risk.VarietySum.ExOptionSum.dPnlVega|grouping2Format}}</td>
<td style="text-align: right;">{{risk.VarietySum.ExOptionSum.dPnlTheta|grouping2Format}}</td>
<td style="text-align: right;">{{risk.VarietySum.ExOptionSum.dPnlPsi|grouping2Format}}</td>
}
<!--标的交易-->
<td style="text-align: right;">{{risk.VarietySum.FuturesSum.StockEqvNotional|groupingFormat}}</td>
<td style="text-align: right;">{{risk.VarietySum.FuturesSum.DailyPnl|groupingFormat}}</td>
<td style="text-align: right;">{{risk.VarietySum.FuturesSum.DailyCommission|groupingFormat}}</td>
<td style="text-align: right;">{{risk.VarietySum.FuturesSum.Pnl|groupingFormat}}</td>
<td style="text-align: right;">{{risk.VarietySum.FuturesSum.Commission|groupingFormat}}</td>
<td style="text-align: right;">{{risk.VarietySum.FuturesSum.PositionInLots|toNumberExcludingNaN}}</td>
<td style="text-align: right;">{{risk.VarietySum.FuturesSum.PositionIncrementInLots|toNumberExcludingNaN}}</td>
</tr>
<template v-for="(item,index) in risk.UnderlyingRiskList">
<tr>
<!--汇总-->
<td></td>
<td v-html="showUnderlyingInfo(item)"></td>
<td></td>
<td style="text-align: right;">{{item.UnderlyingPrice}}</td>
<td style="text-align: right;">{{item.PortfolioRisk.StockEqvNotional|groupingFormat}}</td>
<td style="text-align: right;">{{item.PortfolioRisk.DailyPnl|groupingFormat}}</td>
<td style="text-align: right;">{{item.PortfolioRisk.Pnl|groupingFormat}}</td>
@if (PS.Config.Is国海)
{
<td style="text-align: right;">{{item.PortfolioRisk.CumulativeFloatProfitLoss|groupingFormat}}</td>
}
<td style="text-align: right;">{{item.PortfolioRisk.DeltaInLots|toNumberExcludingNaN}}</td>
<td style="text-align: right;">{{item.PortfolioRisk.DeltaCash|groupingFormat}}</td>
<td style="text-align: right;">{{item.PortfolioRisk.Theta|groupingFormat}}</td>
<td style="text-align: right;">{{item.PortfolioRisk.Vega|groupingFormat}}</td>
<td style="text-align: right;">{{item.PortfolioRisk.Gamma|groupingFormat}}</td>
<td style="text-align: right;">{{item.PortfolioRisk.GammaCash|groupingFormat}}</td>
@if (CalculatePnlExplain)
{
<td style="text-align: right;">{{item.PortfolioRisk.dPnlDelta|groupingFormat}}</td>
<td style="text-align: right;">{{item.PortfolioRisk.dPnlGamma|groupingFormat}}</td>
<td style="text-align: right;">{{item.PortfolioRisk.dPnlVega|groupingFormat}}</td>
<td style="text-align: right;">{{item.PortfolioRisk.dPnlTheta|groupingFormat}}</td>
<td style="text-align: right;">{{item.PortfolioRisk.dPnlPsi|groupingFormat}}</td>
}
<!--场外期权-->
<td style="text-align: right;">{{item.OtcRisk.StockEqvNotional|groupingFormat}}</td>
<td style="text-align: right;">{{item.OtcRisk.DailyPnl|groupingFormat}}</td>
<td style="text-align: right;">{{item.OtcRisk.Pnl|groupingFormat}}</td>
@if (PS.Config.Is国海)
{
<td style="text-align: right;">{{item.OtcRisk.CumulativeFloatProfitLoss|groupingFormat}}</td>
}
<td style="text-align: right;">{{item.OtcRisk.DeltaInLots|toNumberExcludingNaN}}</td>
<td style="text-align: right;">{{item.OtcRisk.GammaInLots|toNumberExcludingNaN}}</td>
<td style="text-align: right;">{{item.OtcRisk.DeltaCash|groupingFormat}}</td>
<td style="text-align: right;">{{item.OtcRisk.Theta|grouping2Format}}</td>
<td style="text-align: right;">{{item.OtcRisk.Vega|grouping2Format}}</td>
<td style="text-align: right;">{{item.OtcRisk.Rho|grouping2Format}}</td>
<td style="text-align: right;">{{item.OtcRisk.Delta|toNumberExcludingNaN}}</td>
<td style="text-align: right;">{{item.OtcRisk.Gamma|toNumberExcludingNaN}}</td>
@if (CalculatePnlExplain)
{
<td style="text-align: right;">{{item.OtcRisk.dPnlDelta|grouping2Format}}</td>
<td style="text-align: right;">{{item.OtcRisk.dPnlGamma|grouping2Format}}</td>
<td style="text-align: right;">{{item.OtcRisk.dPnlVega|grouping2Format}}</td>
<td style="text-align: right;">{{item.OtcRisk.dPnlTheta|grouping2Format}}</td>
<td style="text-align: right;">{{item.OtcRisk.dPnlPsi|grouping2Format}}</td>
}
<!--远期-->
<td style="text-align: right;">{{item.ForwardRisk.DailyPnl|groupingFormat}}</td>
<td style="text-align: right;">{{item.ForwardRisk.Pnl|groupingFormat}}</td>
<td style="text-align: right;">{{item.ForwardRisk.DeltaInLots|toNumberExcludingNaN}}</td>
<!--收益互换-->
<td style="text-align: right;">{{item.SwapRisk.StockEqvNotional|groupingFormat}}</td>
<td style="text-align: right;">{{item.SwapRisk.DailyPnl|groupingFormat}}</td>
<td style="text-align: right;">{{item.SwapRisk.Pnl|groupingFormat}}</td>
<td style="text-align: right;">{{item.SwapRisk.DeltaInLots|toNumberExcludingNaN}}</td>
<!--场内期权-->
<td style="text-align: right;">{{item.ExOptionRisk.StockEqvNotional|groupingFormat}}</td>
<td style="text-align: right;">{{item.ExOptionRisk.DailyPnl|groupingFormat}}</td>
<td style="text-align: right;">{{item.ExOptionRisk.DailyCommission|groupingFormat}}</td>
<td style="text-align: right;">{{item.ExOptionRisk.Pnl|groupingFormat}}</td>
@if (PS.Config.Is国海)
{
<td style="text-align: right;">{{item.ExOptionRisk.CumulativeFloatProfitLoss|groupingFormat}}</td>
}
<td style="text-align: right;">{{item.ExOptionRisk.Commission|groupingFormat}}</td>
<td style="text-align: right;">{{item.ExOptionRisk.Delta|toNumberExcludingNaN}}</td>
<td style="text-align: right;">{{item.ExOptionRisk.DeltaInLots|toNumberExcludingNaN}}</td>
<td style="text-align: right;">{{item.ExOptionRisk.DeltaCash|groupingFormat}}</td>
<td style="text-align: right;">{{item.ExOptionRisk.Gamma|toNumberExcludingNaN}}</td>
<td style="text-align: right;">{{item.ExOptionRisk.GammaInLots|toNumberExcludingNaN}}</td>
<td style="text-align: right;">{{item.ExOptionRisk.Theta|grouping2Format}}</td>
<td style="text-align: right;">{{item.ExOptionRisk.Vega|grouping2Format}}</td>
<td style="text-align: right;">{{item.ExOptionRisk.Rho|grouping2Format}}</td>
@if (CalculatePnlExplain)
{
<td style="text-align: right;">{{item.ExOptionRisk.dPnlDelta|grouping2Format}}</td>
<td style="text-align: right;">{{item.ExOptionRisk.dPnlGamma|grouping2Format}}</td>
<td style="text-align: right;">{{item.ExOptionRisk.dPnlVega|grouping2Format}}</td>
<td style="text-align: right;">{{item.ExOptionRisk.dPnlTheta|grouping2Format}}</td>
<td style="text-align: right;">{{item.ExOptionRisk.dPnlPsi|grouping2Format}}</td>
}
<!--标的交易-->
<td style="text-align: right;">{{item.FuturesRisk.StockEqvNotional|groupingFormat}}</td>
<td style="text-align: right;">{{item.FuturesRisk.DailyPnl|groupingFormat}}</td>
<td style="text-align: right;">{{item.FuturesRisk.DailyCommission|groupingFormat}}</td>
<td style="text-align: right;">{{item.FuturesRisk.Pnl|groupingFormat}}</td>
<td style="text-align: right;">{{item.FuturesRisk.Commission|groupingFormat}}</td>
<td style="text-align: right;">{{item.FuturesRisk.PositionInLots|toNumberExcludingNaN}}</td>
<td style="text-align: right;">{{item.FuturesRisk.PositionIncrementInLots|toNumberExcludingNaN}}</td>
</tr>
</template>
</template>
<tr>
<!--汇总-->
<td>合计</td>
<td></td>
<td></td>
<td></td>
<td style="text-align: right;">{{Model.Sum.PortfolioSum.StockEqvNotional|groupingFormat}}</td>
<td style="text-align: right;">{{Model.Sum.PortfolioSum.DailyPnl|groupingFormat}}</td>
<td style="text-align: right;">{{Model.Sum.PortfolioSum.Pnl|groupingFormat}}</td>
@if (PS.Config.Is国海)
{
<td style="text-align: right;">{{Model.Sum.PortfolioSum.CumulativeFloatProfitLoss|groupingFormat}}</td>
}
<td style="text-align: right;">{{Model.Sum.PortfolioSum.DeltaInLots|toNumberExcludingNaN}}</td>
<td style="text-align: right;">{{Model.Sum.PortfolioSum.DeltaCash|groupingFormat}}</td>
<td style="text-align: right;">{{Model.Sum.PortfolioSum.Theta|groupingFormat}}</td>
<td style="text-align: right;">{{Model.Sum.PortfolioSum.Vega|groupingFormat}}</td>
<td style="text-align: right;">{{Model.Sum.PortfolioSum.Gamma|groupingFormat}}</td>
<td style="text-align: right;">{{Model.Sum.PortfolioSum.GammaCash|groupingFormat}}</td>
@if (CalculatePnlExplain)
{
<td style="text-align: right;">{{Model.Sum.PortfolioSum.dPnlDelta|groupingFormat}}</td>
<td style="text-align: right;">{{Model.Sum.PortfolioSum.dPnlGamma|groupingFormat}}</td>
<td style="text-align: right;">{{Model.Sum.PortfolioSum.dPnlVega|groupingFormat}}</td>
<td style="text-align: right;">{{Model.Sum.PortfolioSum.dPnlTheta|groupingFormat}}</td>
<td style="text-align: right;">{{Model.Sum.PortfolioSum.dPnlPsi|groupingFormat}}</td>
}
<!--场外期权-->
<td style="text-align: right;">{{Model.Sum.OtcSum.StockEqvNotional|groupingFormat}}</td>
<td style="text-align: right;">{{Model.Sum.OtcSum.DailyPnl|groupingFormat}}</td>
<td style="text-align: right;">{{Model.Sum.OtcSum.Pnl|groupingFormat}}</td>
@if (PS.Config.Is国海)
{
<td style="text-align: right;">{{Model.Sum.OtcSum.CumulativeFloatProfitLoss|groupingFormat}}</td>
}
<td style="text-align: right;">{{Model.Sum.OtcSum.DeltaInLots|toNumberExcludingNaN}}</td>
<td style="text-align: right;">{{Model.Sum.OtcSum.GammaInLots|toNumberExcludingNaN}}</td>
<td style="text-align: right;">{{Model.Sum.OtcSum.DeltaCash|groupingFormat}}</td>
<td style="text-align: right;">{{Model.Sum.OtcSum.Theta|grouping2Format}}</td>
<td style="text-align: right;">{{Model.Sum.OtcSum.Vega|grouping2Format}}</td>
<td style="text-align: right;">{{Model.Sum.OtcSum.Rho|grouping2Format}}</td>
<td style="text-align: right;">{{Model.Sum.OtcSum.Delta|toNumberExcludingNaN}}</td>
<td style="text-align: right;">{{Model.Sum.OtcSum.Gamma|toNumberExcludingNaN}}</td>
@if (CalculatePnlExplain)
{
<td style="text-align: right;">{{Model.Sum.OtcSum.dPnlDelta|grouping2Format}}</td>
<td style="text-align: right;">{{Model.Sum.OtcSum.dPnlGamma|grouping2Format}}</td>
<td style="text-align: right;">{{Model.Sum.OtcSum.dPnlVega|grouping2Format}}</td>
<td style="text-align: right;">{{Model.Sum.OtcSum.dPnlTheta|grouping2Format}}</td>
<td style="text-align: right;">{{Model.Sum.OtcSum.dPnlPsi|grouping2Format}}</td>
}
<!--远期-->
<td style="text-align: right;">{{Model.Sum.ForwardSum.DailyPnl|groupingFormat}}</td>
<td style="text-align: right;">{{Model.Sum.ForwardSum.Pnl|groupingFormat}}</td>
<td style="text-align: right;">{{Model.Sum.ForwardSum.DeltaInLots|toNumberExcludingNaN}}</td>
<!--收益互换-->
<td style="text-align: right;">{{Model.Sum.SwapSum.StockEqvNotional|groupingFormat}}</td>
<td style="text-align: right;">{{Model.Sum.SwapSum.DailyPnl|groupingFormat}}</td>
<td style="text-align: right;">{{Model.Sum.SwapSum.Pnl|groupingFormat}}</td>
<td style="text-align: right;">{{Model.Sum.SwapSum.DeltaInLots|toNumberExcludingNaN}}</td>
<!--场内期权-->
<td style="text-align: right;">{{Model.Sum.ExOptionSum.StockEqvNotional|groupingFormat}}</td>
<td style="text-align: right;">{{Model.Sum.ExOptionSum.DailyPnl|groupingFormat}}</td>
<td style="text-align: right;">{{Model.Sum.ExOptionSum.DailyCommission|groupingFormat}}</td>
<td style="text-align: right;">{{Model.Sum.ExOptionSum.Pnl|groupingFormat}}</td>
@if (PS.Config.Is国海)
{
<td style="text-align: right;">{{Model.Sum.ExOptionSum.CumulativeFloatProfitLoss|groupingFormat}}</td>
}
<td style="text-align: right;">{{Model.Sum.ExOptionSum.Commission|groupingFormat}}</td>
<td style="text-align: right;">{{Model.Sum.ExOptionSum.Delta|toNumberExcludingNaN}}</td>
<td style="text-align: right;">{{Model.Sum.ExOptionSum.DeltaInLots|toNumberExcludingNaN}}</td>
<td style="text-align: right;">{{Model.Sum.ExOptionSum.DeltaCash|groupingFormat}}</td>
<td style="text-align: right;">{{Model.Sum.ExOptionSum.Gamma|toNumberExcludingNaN}}</td>
<td style="text-align: right;">{{Model.Sum.ExOptionSum.GammaInLots|toNumberExcludingNaN}}</td>
<td style="text-align: right;">{{Model.Sum.ExOptionSum.Theta|grouping2Format}}</td>
<td style="text-align: right;">{{Model.Sum.ExOptionSum.Vega|grouping2Format}}</td>
<td style="text-align: right;">{{Model.Sum.ExOptionSum.Rho|grouping2Format}}</td>
@if (CalculatePnlExplain)
{
<td style="text-align: right;">{{Model.Sum.ExOptionSum.dPnlDelta|grouping2Format}}</td>
<td style="text-align: right;">{{Model.Sum.ExOptionSum.dPnlGamma|grouping2Format}}</td>
<td style="text-align: right;">{{Model.Sum.ExOptionSum.dPnlVega|grouping2Format}}</td>
<td style="text-align: right;">{{Model.Sum.ExOptionSum.dPnlTheta|grouping2Format}}</td>
<td style="text-align: right;">{{Model.Sum.ExOptionSum.dPnlPsi|grouping2Format}}</td>
}
<!--标的交易-->
<td style="text-align: right;">{{Model.Sum.FuturesSum.StockEqvNotional|groupingFormat}}</td>
<td style="text-align: right;">{{Model.Sum.FuturesSum.DailyPnl|groupingFormat}}</td>
<td style="text-align: right;">{{Model.Sum.FuturesSum.DailyCommission|groupingFormat}}</td>
<td style="text-align: right;">{{Model.Sum.FuturesSum.Pnl|groupingFormat}}</td>
<td style="text-align: right;">{{Model.Sum.FuturesSum.Commission|groupingFormat}}</td>
<td style="text-align: right;">{{Model.Sum.FuturesSum.PositionInLots|toNumberExcludingNaN}}</td>
<td style="text-align: right;">{{Model.Sum.FuturesSum.PositionIncrementInLots|toNumberExcludingNaN}}</td>
</tr>
</tbody>
</table>
</template>
</div>