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

466 lines
28 KiB
Plaintext

@model trade_cash
@{
ViewBag.Title = "交易 | 交易平仓";
Layout = "~/Views/Shared/_InfoLayout.cshtml";
trade trade = ViewBag.trade;
//是否平仓复核提交
bool isReCheckConfirm = trade.TradeStatus == ConsTrade.平仓待复核;
bool isShowReCheckClose = ViewBag.IsShowReCheckClose;
bool isUseApproval = ViewBag.isUseApproval;
bool showPairTrade = YLErp.PS.Config.ComponentVersion == YLErp.Configuration.ComponentVersion.Broker && !trade.PairTrade.IsNullOrWhiteSpace();
var systemValueDate = valuedateBLL.ValueDate;
if (trade.SettlementType == SettlementTypeEnum.ReferencePrice && PS.Config.Company == CompanyEnum.厦门象屿)
{
systemValueDate = YLErp.Modules.SpecialModule.XiaMenXiangYuHelper.GetRefernceValueDate(systemValueDate);
}
if (trade.ExerciseDate <= systemValueDate)
{
systemValueDate = trade.ExerciseDate.Value;
}
var pageObj = new
{
trade,
isReCheckConfirm = isReCheckConfirm,
variety = ViewBag.variety,
pairTrade = ViewBag.PairTrade,
g_isShowReCheckClose = isShowReCheckClose,
//累计期权平仓日不可以跳过还未观察的观察日
systemValueDate = trade.TradeType == "累计期权" ? Model.ValueDate.ToString("yyyy-MM-dd") : systemValueDate.ToString("yyyy-MM-dd"),
tradeDate = (trade.UnWindDate ?? trade.TradeDate).Value.ToString("yyyy-MM-dd"),
g_precisionOfMinuteInQuote = YLErp.PS.Config.ErpElement.PrecisionOfMinuteInQuote,
IsTradeVol = YLErp.PS.Config.IsTradeVol,
UnwindSinglePriceAngle = valuedateBLL.SystemDate.UnwindSinglePriceAngle,
UnwindAmountAngle = valuedateBLL.SystemDate.UnwindAmountAngle,
is东证 = PS.Config.Company == CompanyEnum.润和,
};
var summaryTypeName = Model.Trade_TradeType == "收益互换" ? "结构类型" : "期权类型";
}
@section CSS{
<style type="text/css">
.btn { border: none }
.glyphicon-user:before { color: red; }
</style>
}
@section JS
{
<script>
//otcformat禁止千分位分组
window.otcformat.options.disableGrouping = true;
var pageObj = @Json.Serialize(pageObj);
</script>
<script src="~/Scripts/app/tradeHelper.js?v=@HtmlUtil.JsVersion"></script>
<script>
var model =@Html.JsonSerialize(Model,false);
model.FinalPriceType = "System";
model.ValueDate = moment(model.ValueDate).format("YYYY-MM-DD");
model.UnwindVol = main.toNumberExcludingNaNEx(model.UnwindVol * 100);
model.Strike = otcformat.trading.umprice(model.Strike);
var g_isUseApproval = "@isUseApproval" == "True";
</script>
<script src="~/Scripts/app/trade/tradeUnwind.js?v=@HtmlUtil.JsVersion"></script>
}
<div id="vueDiv" style="min-height:500px;">
@if (!isReCheckConfirm || isUseApproval)
{
<div class="yc-panel" style="margin-top: 20px">
<div class="row">
<div class="form-group col-md-6">
<label class="formlabel">@summaryTypeName</label>
<input class="text-box" v-model="trade.SummaryType" readonly="readonly" type="text" />
</div>
@if (Model.Trade_TradeType != "现金流交易")
{
<div class="form-group col-md-6">
<label class="formlabel">标的代码</label>
<input class="text-box" v-model="tradeCash.UnderlyingCode" readonly="readonly" type="text" />
</div>
}
@if (Model.IsUsePremiumRate != null && Model.IsUsePremiumRate.Value)
{
<div class="form-group col-md-6">
<label class="formlabel">成交名义本金</label>
<input class="text-box" v-model="tradeCash.OriginalStockEqvNotional" readonly="readonly" type="text" />
</div>
<div class="form-group col-md-6">
<label class="formlabel">持仓名义本金</label>
<input class="text-box" v-model="tradeCash.StockEqvNotional" readonly="readonly" type="text" />
</div>
}
else
{
<div class="form-group col-md-6">
<label class="formlabel">交易数量</label>
<input class="text-box" v-model="tradeCash.TradeOriginalAmount" readonly="readonly" type="text" />
</div>
<div class="form-group col-md-6">
<label class="formlabel">持仓数量</label>
<input class="text-box" v-model="tradeCash.TradeAmount" readonly="readonly" type="text" />
</div>
}
<div class="form-group col-md-6">
<label class="formlabel">平仓日期</label>
<input class="text-box" id="unwindDate" onchange="vue.setUnwindDate($(this).val())" v-model="tradeCash.ValueDate" type="text" />
</div>
@if (Model.Trade_TradeType == "现金流交易")
{
<div class="form-group col-md-6">
<label class="formlabel">平仓类型</label>
<select class="text-box" style="height: 30px;" v-model="tradeCash.UnwindType" v-on:change="changeUnwindType()">
<option value="全部平仓">全部平仓</option>
<option value="部分平仓">部分平仓</option>
</select>
</div>
<div class="form-group col-md-6">
<label class="formlabel">平仓比例</label>
<input class="text-box" v-model="tradeCash.UnwindPercentRate" :readonly="tradeCash.UnwindType=='全部平仓'" v-on:change="changeUnwindPercentRate()" type="text" /><span>%</span>
</div>
<div class="form-group col-md-6">
<label class="formlabel">平仓名义本金</label>
<input class="text-box" v-model="tradeCash.UnwindStockEqvNotional" :readonly="tradeCash.UnwindType=='全部平仓'" v-on:change="changeUnwindStockEqvNotional()" type="text" /><span>¥</span>
</div>
<div class="form-group col-md-6">
<label class="formlabel">平仓总额</label>
<input class="text-box" v-model="tradeCash.Amount" @*:readonly="!trade.IsTradePricePayType"*@ v-on:change="changeAmount()" type="text" />
<a href="javascript:void(0)" v-on:click="getCashflowUnwindPart()"><span title="计算平仓总额" class="glyphicon glyphicon-refresh"></span></a>
</div>
}
else
{
<div class="form-group col-md-6">
<label class="formlabel">标的价格</label>
<input class="text-box" id="FinalPrice" v-model="tradeCash.FinalPrice" v-on:change="changeUnderlyingPrice()" type="number" />
<template v-if="tradeCash.FinalPriceType=='User'">
<span class="glyphicon glyphicon-user" title="使用用户输入的标的价格"></span>
</template>
<template v-else>
<span class="glyphicon glyphicon-tags" title="使用系统中的标的价格"></span>
</template>
<a href="javascript:void(0)" v-on:click="refreshUnderlyingPrice()">
<span title="使用系统标的价格" class="glyphicon glyphicon-refresh"></span>
</a>
</div>
<div class="form-group col-md-6">
<label class="formlabel">执行价格</label>
<input class="text-box" id="Strike" v-model="tradeCash.Strike" readonly="readonly" type="number" />
</div>
@if (trade.TradeType == "亚式期权" && trade.trade_asian_option != null && trade.trade_asian_option.PayoffType == "EnhancedArithmeticAverage" && trade.trade_asian_option.StrikeType != "Floating")
{
var enhancedPrice = trade.trade_asian_option.EnhancedPrice.OtcFormatUmPrice();
if(trade.IsMoneynessOptionData){
enhancedPrice=trade.trade_asian_option.EnhancedPrice.OtcFormatPercent();
}
<div class="form-group col-md-6">
<label class="formlabel">增强价格</label>
<input class="text-box" id="EnhancedPrice" value="@enhancedPrice" readonly="readonly" type="text" />
</div>
}
<div class="form-group col-md-6">
<label class="formlabel">平仓波动率</label>
<input class="text-box" v-model="tradeCash.UnwindVol" type="number" min="0" />%
<a href="javascript:void(0)" v-on:click="getUnwindVol()" v-show="tradeCash.BondType=='香草期权'"><span title="计算平仓波动率" class="glyphicon glyphicon-calendar"></span></a>
<a href="javascript:void(0)" v-on:click="getVolSurface()" v-show="IsVolSurface"><span title="使用波动率曲面中的插值数据" class="glyphicon glyphicon-refresh"></span></a>
</div>
if (Model.IsUsePremiumRate != null && Model.IsUsePremiumRate.Value)
{
<div class="form-group col-md-6">
<label class="formlabel">期初价格</label>
<input class="text-box" id="InitialSpotPrice" v-model="tradeCash.InitialSpotPrice" v-on:change="changeUnderlyingPrice()" disabled="disabled" type="number" min="0" />
</div>
}
if (Model.Trade_TradeType != "收益互换")
{
if (valuedateBLL.SystemDate.UnwindSinglePriceAngle == 1)
{
<div class="form-group col-md-6" v-if="IsPercentage=='是'">
<label class="formlabel">单份期权价值</label>
<input class="text-box" v-model="tradeCash.SinglePVPercentRate" v-on:change="changeUnwindPricePercentRate()" type="text" readonly />
<span style="cursor:pointer">%</span>
</div>
<div class="form-group col-md-6" v-else>
<label class="formlabel">单份期权价值</label>
<input class="text-box" v-model="tradeCash.SinglePV" v-on:change="changeUnwindPrice()" type="text" readonly />
<span style="cursor:pointer">¥</span>
</div>
}
}
else
{
<input type="hidden" v-model="tradeCash.SinglePVPercentRate" />
<input type="hidden" v-model="tradeCash.SinglePV" />
}
<div class="form-group col-md-6" v-if="IsPercentage=='是'">
<label class="formlabel">平仓单价</label>
<input class="text-box" v-model="tradeCash.UnwindPricePercentRate" @*:readonly="trade.IsTradePricePayType"*@ v-on:change="changeUnwindPricePercentRate()" type="text" />
<span title="点击后切换成绝对值" style="cursor:pointer" v-on:click="showAbStrike(true)">%</span>
<a href="javascript:void(0)" v-on:click="getUnwindPrice()"><span title="计算平仓单价" class="glyphicon glyphicon-refresh"></span></a>
</div>
<div class="form-group col-md-6" v-else>
<label class="formlabel">平仓单价</label>
<input class="text-box" v-model="tradeCash.UnwindPrice" @*:readonly="trade.IsTradePricePayType"*@ v-on:change="changeUnwindPrice()" type="text" />
<span title="点击后切换成百分比" style="cursor:pointer" v-on:click="showAbStrike(false)">¥</span>
<a href="javascript:void(0)" v-on:click="getUnwindPrice()"><span title="计算平仓单价" class="glyphicon glyphicon-refresh"></span></a>
</div>
<div class="form-group col-md-6">
<label class="formlabel">平仓类型</label>
<select class="text-box" style="height: 30px;" v-model="tradeCash.UnwindType" v-on:change="changeUnwindType()">
<option value="全部平仓">全部平仓</option>
<option value="部分平仓">部分平仓</option>
</select>
</div>
if (!isUseApproval)
{
<div class="form-group col-md-6">
<label class="formlabel">TTM</label>
<input type="number" class="text-box" id="TTMDays" v-on:change="changeTTM(trade)" v-model="trade.TTMDays" />
<template v-if="trade.TTMType=='User'">
<span class="glyphicon glyphicon-user" title="使用用户输入的日期间隔"></span>
</template>
<template v-else>
<span class="glyphicon glyphicon-tags" title="使用真实日期间隔"></span>
</template>
<a href="javascript:void(0)" v-on:click="setTTM(trade)"><span title="获取交易日期和到期日期之间工作日的长度" class="glyphicon glyphicon-refresh"></span></a>
</div>
}
if (Model.IsUsePremiumRate != null && Model.IsUsePremiumRate.Value)
{
<div class="form-group col-md-6" v-show="!tradeCash.IsUnwindStockEqvNotional">
<label class="formlabel">平仓比例</label>
<input class="text-box" v-model="tradeCash.UnwindPercentRate" :readonly="tradeCash.UnwindType=='全部平仓'" v-on:change="changeUnwindPercentRate()" type="text" /><span v-on:click="exchangeToUnwindStockEqvNotional">%</span>
</div>
<div class="form-group col-md-6" v-show="tradeCash.IsUnwindStockEqvNotional">
<label class="formlabel">平仓名义本金</label>
<input class="text-box" v-model="tradeCash.UnwindStockEqvNotional" :readonly="tradeCash.UnwindType=='全部平仓'" v-on:change="changeUnwindStockEqvNotional()" type="text" /><span v-on:click="exchangeToUnwindPercentRate">¥</span>
</div>
}
else
{
<div class="form-group col-md-6">
<label class="formlabel">平仓数量</label>
<input class="text-box" v-model="tradeCash.UnwindTradeAmount" :readonly="tradeCash.UnwindType=='全部平仓'" v-on:change="changeUnwindTradeAmount()" type="text" />
{{variety.QuoteUnitSingle}}
</div>
}
<div class="form-group col-md-6">
<label class="formlabel">平仓总额</label>
<input class="text-box" v-model="tradeCash.Amount" @*:readonly="!trade.IsTradePricePayType"*@ v-on:change="changeAmount()" type="text" />
@if (!isReCheckConfirm && valuedateBLL.SystemDate.UnwindAmountAngle == 1)
{
<span style="color:red;">{{cashTip}}</span>
}
</div>
if (!isUseApproval)
{
<div class="form-group col-md-6">
<label class="formlabel">Delta手数</label>
<input class="text-box" v-model="DeltaInLots" readonly="readonly" type="number" />
<span style="color:red;">{{deltaTip}}</span>
</div>
}
if (PS.Config.Is润和)
{
<div class="form-group col-md-6">
<label class="formlabel">Day1Pnl</label>
<input class="text-box" v-model="tradeCash.Day1Pnl" readonly="readonly" type="text" />
</div>
}
}
@if (PS.Config.ErpElement.CanSetTradePremium)
{
<div class="form-group col-md-6">
<label class="formlabel">了结溢价</label>
<input class="text-box" v-model="tradeCash.TradePremium" type="number" min="0" />%
</div>
}
@if (showPairTrade)
{
<div class="form-group col-md-6">
<label class="formlabel" :title="'配对交易编号: '+pairTrade.TradeNumber">平仓配对交易</label>
<input type="checkbox" v-model="tradeCash.IsUnwindPairTrade" />
</div>
}
</div>
<div class="clearfix"></div>
<hr />
<div class="text-center">
@if (ViewBag.isUseApproval)
{
<input type="button" class="btn btn-primary" value="审批通过" v-on:click="submitApproval('pass')" style="margin-left: 45px;" />
<input type="button" class="btn btn-primary" value="拒绝" v-on:click="submitApproval('reject')" />
}
else
{
<input type="button" class="btn btn-primary" :value="getSumbitText()" v-on:click="submit" style="margin-left: 45px;" />
<input type="button" class="btn btn-primary" value="取消" onclick="layer.closeMe()" />
}
</div>
</div>
}
else
{
<div class="yc-panel" style="margin-top: 20px">
<div class="row">
<div class="form-group col-md-6">
<label class="formlabel">@summaryTypeName</label>
<input class="text-box" v-model="trade.SummaryType" readonly="readonly" type="text" />
</div>
@if (Model.Trade_TradeType != "现金流交易")
{
<div class="form-group col-md-6">
<label class="formlabel">标的代码</label>
<input class="text-box" v-model="tradeCash.UnderlyingCode" readonly="readonly" type="text" />
</div>
}
@if (Model.IsUsePremiumRate != null && Model.IsUsePremiumRate.Value)
{
<div class="form-group col-md-6">
<label class="formlabel">成交名义本金</label>
<input class="text-box" v-model="tradeCash.OriginalStockEqvNotional" readonly="readonly" type="text" />
</div>
<div class="form-group col-md-6">
<label class="formlabel">持仓名义本金</label>
<input class="text-box" v-model="tradeCash.StockEqvNotional" readonly="readonly" type="text" />
</div>
}
else
{
<div class="form-group col-md-6">
<label class="formlabel">交易数量</label>
<input class="text-box" v-model="tradeCash.TradeOriginalAmount" readonly="readonly" type="text" />
</div>
<div class="form-group col-md-6">
<label class="formlabel">持仓数量</label>
<input class="text-box" v-model="tradeCash.TradeAmount" readonly="readonly" type="text" />
</div>
}
<div class="form-group col-md-6">
<label class="formlabel">平仓日期</label>
<input class="text-box datepicker" v-model="tradeCash.ValueDate" readonly="readonly" type="text" />
</div>
@if (Model.Trade_TradeType == "现金流交易")
{
<div class="form-group col-md-6">
<label class="formlabel">平仓总额</label>
<input class="text-box" v-model="tradeCash.AmountCheck" v-on:change="changeAmountCheck()" type="text" />
</div>
<div class="form-group col-md-6">
<label class="formlabel">平仓类型</label>
<input class="text-box" v-model="tradeCash.UnwindType" readonly="readonly" type="text" />
</div>
}
else
{
<div class="form-group col-md-6">
<label class="formlabel">标的价格</label>
<input class="text-box" id="FinalPrice" v-model="tradeCash.FinalPrice" v-on:change="changeUnderlyingPrice()" readonly="readonly" type="number" min="0" />
</div>
<div class="form-group col-md-6">
<label class="formlabel">执行价格</label>
<input class="text-box" id="Strike" v-model="tradeCash.Strike" readonly="readonly" type="number" />
</div>
@if (trade.TradeType == "亚式期权" && trade.trade_asian_option != null && trade.trade_asian_option.PayoffType == "EnhancedArithmeticAverage" && trade.trade_asian_option.StrikeType != "Floating")
{
var enhancedPrice = trade.trade_asian_option.EnhancedPrice.OtcFormatUmPrice();
if(trade.IsMoneynessOptionData){
enhancedPrice=trade.trade_asian_option.EnhancedPrice.OtcFormatPercent();
}
<div class="form-group col-md-6">
<label class="formlabel">增强价格</label>
<input class="text-box" id="EnhancedPrice" value="@enhancedPrice" readonly="readonly" type="text" />
</div>
}
<div class="form-group col-md-6">
<label class="formlabel">平仓波动率</label>
<input class="text-box" v-model="tradeCash.UnwindVol" readonly="readonly" type="number" min="0" />%
</div>
<div class="form-group col-md-6">
<label class="formlabel">平仓总额</label>
<input class="text-box" v-model="tradeCash.AmountCheck" v-on:change="changeAmountCheck()" type="text" />
@if (!isReCheckConfirm && valuedateBLL.SystemDate.UnwindAmountAngle == 1)
{
<span style="color:red;">{{cashTip}}</span>
}
</div>
if (Model.IsUsePremiumRate == true)
{
<div class="form-group col-md-6">
<label class="formlabel">期初价格</label>
<input class="text-box" id="InitialSpotPrice" v-model="tradeCash.InitialSpotPrice" v-on:change="changeUnderlyingPrice()" disabled="disabled" type="number" min="0" />
</div>
}
if (Model.Trade_TradeType != "收益互换")
{
if (valuedateBLL.SystemDate.UnwindSinglePriceAngle == 1)
{
<div class="form-group col-md-6" v-if="IsPercentage=='是'">
<label class="formlabel">单份期权价值</label>
<input class="text-box" v-model="tradeCash.SinglePVPercentRate" v-on:change="changeUnwindPricePercentRate()" type="text" readonly />
<span style="cursor:pointer">%</span>
</div>
<div class="form-group col-md-6" v-else>
<label class="formlabel">单份期权价值</label>
<input class="text-box" v-model="tradeCash.SinglePV" v-on:change="changeUnwindPrice()" type="text" readonly />
<span style="cursor:pointer">¥</span>
</div>
}
}
<div class="form-group col-md-6" v-if="IsPercentage=='是'">
<label class="formlabel">平仓单价</label>
<input class="text-box" v-model="tradeCash.UnwindPricePercentRateCheck" v-on:change="changeUnwindPricePercentRateCheck()" type="text" />
<span title="点击后切换成绝对值" style="cursor:pointer" v-on:click="showAbStrike(true)">%</span>
</div>
<div class="form-group col-md-6" v-else>
<label class="formlabel">平仓单价</label>
<input class="text-box" v-model="tradeCash.UnwindPriceCheck" v-on:change="changeUnwindPriceCheck()" type="text" />
<span title="点击后切换成百分比" style="cursor:pointer" v-on:click="showAbStrike(false)">¥</span>
</div>
<div class="form-group col-md-6">
<label class="formlabel">平仓类型</label>
<input class="text-box" v-model="tradeCash.UnwindType" readonly="readonly" type="text" />
</div>
}
@if (Model.IsUsePremiumRate == true)
{
<div class="form-group col-md-6">
<label class="formlabel">平仓比例</label>
<input class="text-box" v-model="tradeCash.UnwindPercentRateRecheck" readonly="readonly" type="text" />%
</div>
}
else
{
<div class="form-group col-md-6">
<label class="formlabel">平仓数量</label>
<input class="text-box" v-model="tradeCash.UnwindTradeAmount" readonly="readonly" type="text" />
{{variety.QuoteUnitSingle}}
</div>
}
@if (showPairTrade)
{
<div class="form-group col-md-6">
<label class="formlabel" :title="'配对交易编号: '+pairTrade.TradeNumber">平仓配对交易</label>
<input type="checkbox" v-model="tradeCash.IsUnwindPairTrade" />
</div>
}
</div>
<div class="clearfix"></div>
<hr />
<div class="text-center" style="margin-top: 30px;">
<input type="button" class="btn btn-primary" value="复核" v-on:click="review" style="margin-left: 45px;" />
<input type="button" class="btn btn-primary" value="拒绝" v-on:click="reject" />
<input type="button" class="btn btn-primary" value="取消" onclick="layer.closeMe()" />
</div>
</div>
}
</div>