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

500 lines
26 KiB
Plaintext

@model RiskHedgingViewModel
@{
var nv = YieldChain.Helpers.UrlHelper.ParseQueryString(PS.Config.ErpElement.UnderlyingBlockConfig);
for (var i = 1; i <= 5; i++)
{
ViewData["block" + i] = nv["block" + i].TrimToNull() ?? ("板块性质" + i);
}
}
@*@await Html.PartialAsync("_IndexV2/_SideBar")*@
<div class="alert alert-danger alert-dismissible fade show text-center" role="alert" id="noSettleDiv" style="display:none;">
<strong>上个交易日@(Model.PreTradingDate.ToString("yyyy-MM-dd"))未收盘!</strong>
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<!--页面主内容-->
<div id="mainCont" class="full yl-maincont">
<script src="~/Statics/libs/pinyin/dict/pinyin_dict_firstletter.js?v=@(HtmlUtil.JsVersion)"></script>
<script src="~/Statics/libs/pinyin/pinyinUtil.js?v=@(HtmlUtil.JsVersion)"></script>
<div class="navbar navbar-expand yl-toolbar-top">
<ul class="navbar-nav mr-auto">
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle yl-btn-drop" data-toggle="dropdown" href="#" id="selectVolTypeMenuText">
@(Model.GetVolType())
</a>
<div class="dropdown-menu">
@foreach (var item in Model.VolTpes)
{
if (item != null)
{
<a class="dropdown-item" href="#" onclick="mainView.changeVolType()">@(item)</a>
}
}
</div>
</li>
@if(PS.Config.Company==CompanyEnum.国元固收){
<li class="nav-item">
<div class="yl-vline"></div>
<span style="line-height:30px;">定价环境</span>
</li>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle yl-btn-drop" data-toggle="dropdown" href="#" id="selectDividendRateTypeMenuText">
业务
</a>
<div class="dropdown-menu">
<a class="dropdown-item" href="#" onclick="mainView.changeDividendRateType()">业务</a>
<a class="dropdown-item" href="#" onclick="mainView.changeDividendRateType()">采集</a>
</div>
</li>
}
<li class="nav-item dropdown">
<a id="btnFilterPopup" class="nav-link dropdown-toggle yl-btn-drop" data-toggle="dropdown" href="#">
<span>数据筛选</span>
<span class="caret"></span>
</a>
<div class="dropdown-menu" style="width:650px;padding:10px 10px 0;" onclick="event.stopPropagation()">
<div class="row filter-row">
<div class="col-auto col-label">簿记账户:</div>
<div class="col"><select id="selectAssetBook" multiple="" data-placeholder="选择簿记账户"></select></div>
<div class="col-auto col-invert-selects"><label><input type="checkbox" name="InvertSelects" value="簿记账户" />反选</label></div>
</div>
<div class="row filter-row">
<div class="col-auto col-label">簿记账户组:</div>
<div class="col"><select id="selectAssetBookGroup" multiple="" data-placeholder="选择簿记账户组"></select></div>
<div class="col-auto col-invert-selects"><label><input type="checkbox" name="InvertSelects" value="簿记账户组" />反选</label></div>
</div>
<div class="row filter-row">
<div class="col-auto col-label">客户名称:</div>
<div class="col"><select id="selectClient" multiple="" data-placeholder="选择客户名称"></select></div>
<div class="col-auto col-invert-selects"><label><input type="checkbox" name="InvertSelects" value="客户名称" />反选</label></div>
</div>
<div class="row filter-row">
<div class="col-auto col-label">结构类型:</div>
<div class="col"><select id="selectAssetType" multiple="" data-placeholder="选择结构类型"></select></div>
<div class="col-auto col-invert-selects"><label><input type="checkbox" name="InvertSelects" value="结构类型" />反选</label></div>
</div>
@if (!Model.IsStock)
{
<div class="row filter-row">
<div class="col-auto col-label">品种分类:</div>
<div class="col"><select id="selectVarietyGroup" multiple="" data-placeholder="选择品种分类"></select></div>
<div class="col-auto col-invert-selects"><label><input type="checkbox" name="InvertSelects" value="品种分类" />反选</label></div>
</div>
<div class="row filter-row">
<div class="col-auto col-label">标的品种:</div>
<div class="col"><select id="selectVariety" multiple="" data-placeholder="选择标的品种"></select></div>
<div class="col-auto col-invert-selects"><label><input type="checkbox" name="InvertSelects" value="标的品种" />反选</label></div>
</div>
}
<div class="row filter-row">
<div class="col-auto col-label">标的代码:</div>
<div class="col"><select id="selectUnderlying" multiple="" data-placeholder="选择标的代码"></select></div>
<div class="col-auto col-invert-selects"><label><input type="checkbox" name="InvertSelects" value="标的代码" />反选</label></div>
</div>
<div class="row filter-row">
<div class="col-auto col-label"></div>
<div class="col">
<label class="mt-2 mb-2"><input type="checkbox" id="checkShowPositions" class="mr-1" />只显示有持仓的合约</label>
</div>
<div class="col-auto col-invert-selects"></div>
</div>
<div class="row filter-row border-0">
<div class="col-auto col-label"></div>
<div class="col mt-3 mb-3">
<button type="button" class="btn btn-primary" style="width:180px;" onclick="mainView.clickFilterData();return false;">点击筛选</button>
<button class="btn btn-link" onclick="mainView.clickClearFilters()">清除筛选</button>
</div>
<div class="col-auto col-invert-selects"></div>
</div>
</div>
</li>
@if (Model.IsStock)
{
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle yl-btn-drop" data-toggle="dropdown" href="#">
<span id="selectBlockText">板块性质</span>
<span class="caret"></span>
</a>
<div class="dropdown-menu" id="menuBlock">
<a href="#" class="dropdown-item" data-type="0">默认板块</a>
@for (var i = 1; i <= 5; i++)
{
<a href="#" class="dropdown-item" data-type="@(i)">@(ViewData["block" + i])</a>
}
</div>
</li>
}
else
{
<li class="nav-item">
<button class="yl-btn-drop" type="button" data-toggle="modal" data-target="#sortModal">品种排序</button>
</li>
}
@if (PS.Config.IsUseHedgingRule)
{
<li class="nav-item dropdown" id="autoRuelWrap">
@await Html.PartialAsync("_IndexV2/_AutoRule")
</li>
}
<li class="nav-item">
<button class="yl-btn-drop" type="button" onclick="mainView.checkHedgePosition('@(Model.IsStock ? 1 : 0)')">持仓比对</button>
</li>
<li class="nav-item">
<div class="yl-vline"></div>
<label style="padding-top:3px;">
<input type="checkbox" class="yl-checkbox" id="realtimeRefreshCheck" />
<span style="vertical-align:middle;">实时刷新</span>
</label>
</li>
@if (Model.IsStock)
{
<li class="nav-item">
<div class="yl-vline"></div>
<span>标的名称</span>
<div class="d-inline position-relative">
<input type="text" id="selectUnderlying2" data-placeholder="选择标的" style="width:200px;" />
<button type="button" class="close suggestion-close" onclick="mainView.clearFrontFilter()"><span aria-hidden="true">&times;</span></button>
</div>
</li>
}
@if (PS.Config.Is润和)
{
<li class="nav-item">
<div class="yl-vline"></div>
<span>Delta(T+1)试算时间</span>
<input class="form_datetime" id="ValueTime" type="text" style="width:200px;" />
</li>
}
</ul>
<ul class="navbar-nav">
<li class="nav-item">
<div class="yl-tradingdate" id="tradingdate"></div>
</li>
<li class="nav-item dropdown">
<a id="hasAlert" class="yl-alertPrice" data-toggle="dropdown" href="#">
<i class="fa fa-bell fa-bell-o"></i>
<span id="alertSum" class="badge yl-badge-warning yl-navbar-badge"></span>
</a>
<div class="dropdown-menu yl-alertPrice-dropdown" onclick="event.stopPropagation()" id="priceAlert" tabindex="-1" style="overflow:hidden">
<table class="table table-sm yl-autorule-table" id="priceAlert">
<colgroup>
<col span="1" width="150" />
<col span="1" width="150" />
<col span="1" width="100" />
</colgroup>
<thead>
<tr>
<th>标的代码</th>
<th>价格跌幅阈值</th>
<th>价格涨幅阈值</th>
</tr>
</thead>
<tbody>
@if (Model.UnderlyingAlerts != null)
{
foreach (var item in Model.UnderlyingAlerts)
{
<tr id="@item.UnderlyingCode.Replace(".","_")" onclick="setUnderlyingPriceAlert('@item.UnderlyingCode')">
<td style="width:33%;text-align:center">@item.UnderlyingCode</td>
<td style="width:33%;text-align:center">@(item.priceDecreaseRate * 100)%</td>
<td style="width:33%;text-align:center">@(item.priceIncreaseRate * 100)%</td>
</tr>
}
}
</tbody>
</table>
<div class="yl-autorule-fix">
<div>
<i class="fa fa-plus" onclick="setUnderlyingPriceAlert()"></i>
</div>
</div>
</div>
</li>
<li class="nav-item">
<a href="#" onclick="jqGridMgr.showcolumnChooser(); return false;" title="配置主表列">
<img src="~/Images/configure.png" />
</a>
<a href="#" onclick="jqGridMgr.showcolumnChooser('sub');return false;" title="配置明细列">
<img src="~/Images/configure.png" />
</a>
</li>
@if (!Model.ReqModel.Stock)
{
if (AppHelper.TradeRiskCalcV2VolAdjust)
{
<li class="dropdown" style="display:inline-block;padding-right:10px;">
<a href="#" class="yl-gear" data-toggle="dropdown">
<i class="fa fa-gear"></i>
</a>
<div class="dropdown-menu" style="margin-left:-110px;">
<a class="dropdown-item" href="javascript:;" onclick="mainView.showSetting()">通用配置</a>
<div role="separator" class="divider"></div>
<a class="dropdown-item" href="javascript:void(0)" onclick="mainView.showVolAdjust();return false;">调整波动率配置</a>
</div>
</li>
}
else
{
<li class="nav-item">
<a href="javascript:void(0)" class="yl-gear" onclick="mainView.showSetting()">
<i class="fa fa-gear"></i>
</a>
</li>
}
}
<li class="nav-item">
<a href="#" onclick="mainView.showHelper(); return false;" title="帮助">
<img src="~/Images/help.png" style="width:30px;" />
</a>
</li>
</ul>
</div>
<div class="row">
<div class="col">
<div id="searchFilterDesc">
<strong>筛选条件:&nbsp;</strong>全部
</div>
</div>
<div class="col-auto" style="padding-top:6px;padding-bottom:6px;">
<div class="d-flex align-items-end h-100">
<div id="showTimestamp" class="font-weight-bold" style="font-size:.85rem"></div>
</div>
</div>
</div>
<div id="gridCont">
<table id='listGridMain' class='scroll' cellpadding='0' cellspacing='0'></table>
</div>
<div style="margin-top:10px;">
<table id='listGridSub' class='scroll' cellpadding='0' cellspacing='0'></table>
</div>
</div>
<!--主表操作下拉菜单-->
<div id="jq-dropdown-1" class="jq-dropdown jq-dropdown-tip">
<ul class="jq-dropdown-menu">
<li><a href="javascript:;" onclick="mainView.showSubList()">查看详细</a></li>
@if (PS.Config.IsUseHedgingRule)
{
<li class="jq-dropdown-divider yl-autorule"></li>
<li class="yl-autorule"><a href="javascript:;" onclick="mainView.showAutoRule()">对冲规则</a></li>
}
<li class="jq-dropdown-divider yl-priceAlert"></li>
<li class="yl-priceAlert"><a href="javascript:;" onclick="mainView.setPriceAlert()">价格预警</a></li>
</ul>
</div>
<!--标的价格(正常)-->
<script type="text/html" id="priceCalcTU1">
<a href="javascript:;" style="display:block;color:inherit" ondblclick="event.stopPropagation();">
<strong style="${style}" onclick="jqGridEventHandler.showPriceCalcInput('${UnderlyingCode}')">${formatVal}</strong>
</a>
</script>
<!--标的价格(试算)-->
<script type="text/html" id="priceCalcTU2">
<label style="display:block;position:relative;" onclick="event.stopPropagation();" ondblclick="event.stopPropagation();" title=" ">
<input type="text" onkeydown="if(event.keyCode===13)this.blur();" step="0.1" min="0" onblur="jqGridEventHandler.execPriceCalc('${UnderlyingCode}')" style="width:100%;height:21px;padding-right:16px;" value="${price}" data-value="${price}" />
<button type="button" onclick="jqGridEventHandler.removePriceCalc('${UnderlyingCode}')" class="close btn-price-calc-close"><span>&times;</span></button>
</label>
</script>
<!--标的价格(正常+品种)-->
<script type="text/html" id="priceCalcTV1">
<a href="javascript:;" style="display:block;color:inherit" ondblclick="event.stopPropagation();" onclick="jqGridEventHandler.showPriceCalcInput('${UnderlyingCode}',true)">
<strong style="${style}">${formatVal}</strong>
</a>
</script>
<!--标的价格(试算+品种)-->
<script type="text/html" id="priceCalcTV2">
<label style="display:block;position:relative;" onclick="event.stopPropagation();" ondblclick="event.stopPropagation();" title=" ">
<input type="text" onkeydown="if(event.keyCode===13)this.blur();" step="0.1" min="0" onblur="jqGridEventHandler.execPriceCalc('${UnderlyingCode}',true)" style="width:100%;height:21px;padding-right:16px;" value="${price}" data-value="${price}" />
<button type="button" onclick="jqGridEventHandler.removePriceCalc('${UnderlyingCode}',true)" class="close btn-price-calc-close"><span>&times;</span></button>
</label>
</script>
<!--跳转到子列表页面-->
<form id="formNew" method="get" target="_blank" action="Index2Lite">
<input type="hidden" name="VolType" />
<input type="hidden" name="AssetIds" />
<input type="hidden" name="ClientIds" />
<input type="hidden" name="SubListCode" />
</form>
<!--品种排序-->
<div class="modal fade" id="sortModal" tabindex="-1" style="overflow:hidden" data-backdrop="static">
<div class="modal-dialog" role="document" style="max-width:800px;width:800px;">
<div class="modal-content">
<div class="modal-header">
<h4 class="modal-title">品种排序</h4>
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
</div>
<div class="modal-body">
<div class="yl-sort-cont">
<div class="row">
<div class="col" id="sortListCont1">
<p>按字母排序(向右拖动进入自定义排序)</p>
<div id="sortList1" class="list-group" style="height:450px;overflow-y:auto;">
@foreach (var item in Model.UnsortVarieties)
{
<div class="list-group-item" data-id="@(item.VarietyCode)">@(item.VarietyCode)</div>
}
</div>
</div>
<div class="col">
<p>自定义排序(高优先级)</p>
<div id="sortList2" class="list-group" style="height:450px;overflow-y:auto;">
@foreach (var item in Model.SortVarieties)
{
<div class="list-group-item" data-id="@(item.VarietyCode)">@(item.VarietyCode)</div>
}
</div>
</div>
</div>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-primary" data-dismiss="modal">确定</button>
</div>
</div>
</div>
</div>
<!--通用配置-->
<div class="modal fade" id="settingModal" tabindex="-1" style="overflow:hidden" data-backdrop="static">
<div class="modal-dialog" role="document" style="width:500px;">
<div class="modal-content">
<div class="modal-header">
<h4 class="modal-title">通用配置</h4>
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
</div>
<div class="modal-body">
<label class="d-block mb-3">
<input type="checkbox" class="mr-1" id="exOptionPriceSetting" onchange="mainView.saveSetting()" @(Model.UserConfig.UseMarketForExOptions ? "checked" : "") />场内期权现价使用实时行情价格
</label>
<label class="d-block mb-3">
<input type="checkbox" class="mr-1" onchange="mainView.saveAppConfig('Erp.CalcAutocallGreeksInRisk')" @(PS.Config.ErpElement.CalcAutocallGreeksInRisk ? "checked" : "") />计算凤凰雪球的所有greeks,未勾选时仅计算Pv和Delta
</label>
<div class="mt-3 mb-3 p-3 border">
<div class="mb-2">
忽略特定交易类型的实时计算,选择后不再进行实时计算,Pv和风险值取自定义交易风险,没有自定义风险则使用上日结算数据
</div>
<div class="">
<select id="selectSkipTradeTypes" multiple="" data-placeholder="">
<option>雪球期权</option>
<option>凤凰期权</option>
<option>累计期权</option>
<option>障碍期权</option>
<option>亚式期权</option>
</select>
</div>
</div>
<label class="d-block mb-3">
<input type="checkbox" class="mr-1" id="showTimestampSetting" onchange="mainView.saveSetting()" @(Model.UserConfig.ShowTimestamp ? "checked" : "") />显示计算时间戳
</label>
</div>
<div class="text-center modal-footer">
<button type="button" class="btn btn-primary" data-dismiss="modal">关闭</button>
</div>
</div>
</div>
</div>
<div class="modal fade" id="helperModal" tabindex="-1" style="overflow:hidden" data-backdrop="static">
<div class="modal-dialog" role="document">
<div class="modal-content" style="width:700px;">
<div class="modal-header">
<h4 class="modal-title">页面字段解释</h4>
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
</div>
<div class="modal-body">
<table class="helper-table">
<tr>
<td class="t-title">标的价格</td>
<td>盘中可获取实时数据,收盘后为当日收盘价,可手动填写价格用于试算</td>
</tr>
<tr>
<td class="t-title">涨跌幅</td>
<td>涨跌幅=(标的现价-前一日收盘价)/前一日收盘价 *100% </td>
</tr>
<tr>
<td class="t-title">Delta%</td>
<td>标的总Delta(场内+场外)/期权持仓份额汇总行的值是对应合约按照名义本金加权平均所得</td>
</tr>
<tr>
<td class="t-title">行权盈亏</td>
<td>假设按当前价格行权所产生的盈亏(会考虑权利金收支)</td>
</tr>
<tr>
<td class="t-title">DailyPnl</td>
<td>当日盈亏=今日Pv+今日了结金额-前一日Pv</td>
</tr>
<tr>
<td class="t-title">TotalPnl</td>
<td>当日盈亏的累积</td>
</tr>
<tr>
<td class="t-title">累积总盈亏</td>
<td>累积总盈亏= Totalpnl+已过期的对冲交易盈亏(即浮动盈亏+已实现盈亏)</td>
</tr>
<tr>
<td class="t-title">Pv</td>
<td>
市值总额(场内外合计)
</td>
</tr>
<tr>
<td class="t-title">场外Pv</td>
<td>场外部分Pv汇总</td>
</tr>
<tr>
<td class="t-title">对冲Pv</td>
<td>场内部分Pv汇总</td>
</tr>
<tr>
<td class="t-title">Delta手数</td>
<td>场内外合计的Delta手数</td>
</tr>
<tr>
<td class="t-title">对冲Delta手数</td>
<td>场内的Delta手数</td>
</tr>
<tr>
<td class="t-title">Gamma手数</td>
<td>场内外合计的Gamma手数</td>
</tr>
<tr>
<td class="t-title">对冲总盈亏</td>
<td>
<p>对冲总盈亏(交易级别)</p>
<p>1.计算每个标的期权交易单位Delta的对冲盈亏值:s= 场内总盈亏/期权总delta</p>
<p>2. 对冲总盈亏 = s * 单笔期权交易delta</p>
</td>
</tr>
<tr>
<td class="t-title">*号标记</td>
<td>
<p>*号标记的字段是所有涉及到敲出的期权结构,若当天为该期权的观察日,当盘中实时价格越过敲出价时,该笔结构的估值只包含Payoff,不需要再包含时间价值,同时该笔交易的Delta手数和Gamma手数都变成0</p>
<p>系统默认在盘中的时候期权价值=内在价值+时间价值</p></td>
</tr>
</table>
</div>
</div>
</div>
</div>