241 lines
10 KiB
Plaintext
241 lines
10 KiB
Plaintext
@model volatility
|
|
@{
|
|
ViewBag.Title = "波动率曲面 | 数据导入";
|
|
Layout = "~/Views/Shared/_InfoLayout.cshtml";
|
|
var Vols = YLErp.QdpModule.Constants.ConsVolInfos.VolTypes.ToList();
|
|
if (!Vols.Contains(YLErp.QdpModule.Constants.ConsVolInfos.BidAsk))
|
|
{
|
|
Vols.Add(YLErp.QdpModule.Constants.ConsVolInfos.BidAsk);
|
|
}
|
|
if (!Vols.Contains("All"))
|
|
{
|
|
Vols.Add("All");
|
|
}
|
|
var VolTypes = GlobalData.GetSelectItems(Vols);
|
|
|
|
}
|
|
@section CSS{
|
|
<link href="~/Style/Css/volsurfaceUpload.css" rel="stylesheet" />
|
|
}
|
|
@section JS
|
|
{
|
|
<script type="text/javascript">
|
|
//是否使用更加精确的波动率
|
|
var g_volMoreAccurate = "@YLErp.PS.Config.ErpElement.VolMoreAccurate" == "True";
|
|
$(function () {
|
|
|
|
$(".datepicker").datepicker({ changeMonth: true, changeYear: true, showButtonPanel: true, showOtherMonths: true, selectOtherMonths: true });
|
|
$(".datepicker").val("@ViewBag.Voldate");
|
|
var time = $(".datepicker").val().split("-");
|
|
var year = time[0];
|
|
var month = time[1] - 1;
|
|
var day = time[2];
|
|
$(".datepicker").datepicker(
|
|
'option', 'minDate', new Date(year, month, day)
|
|
);
|
|
|
|
SetAceDropDown();
|
|
|
|
function hidealldemo() {
|
|
$("#standdemo").hide();
|
|
$("#simpledemo").hide();
|
|
$("#bidaskdemo").hide();
|
|
$("#alldemo").hide();
|
|
}
|
|
$("#importMode").change(function (data) {
|
|
hidealldemo();
|
|
$("#VolType option").prop("disabled", true);
|
|
$("#VolType option").prop("selected", false);
|
|
var imode = $("#importMode").val();
|
|
if (imode == "Stand") {
|
|
$("#VolSurfaceMode").parent().show();
|
|
$("#VolType").parent().show();
|
|
$("#standdemo").show();
|
|
$("#VolType option[value!='BidAsk'][value!='All']").prop("disabled", false);
|
|
$("#VolType option[value='交易']").prop("selected", true);
|
|
}
|
|
else if (imode == "BidAsk") {
|
|
$("#VolSurfaceMode").parent().show();
|
|
$("#VolType").parent().show();
|
|
$("#bidaskdemo").show();
|
|
$("#VolType option[value='BidAsk']").prop("disabled", false);
|
|
$("#VolType option[value='BidAsk']").prop("selected", true);
|
|
}
|
|
else if (imode == "All") {
|
|
$("#VolSurfaceMode").parent().hide();
|
|
$("#VolType").parent().hide();
|
|
$("#alldemo").show();
|
|
$("#VolType option[value='All']").prop("disabled", false);
|
|
$("#VolType option[value='All']").prop("selected", true);
|
|
}
|
|
else {
|
|
$("#VolSurfaceMode").parent().hide();
|
|
$("#VolType").parent().hide();
|
|
$("#simpledemo").show();
|
|
$("#VolType option[value!='BidAsk'][value!='All']").prop("disabled", false);
|
|
$("#VolType option[value='交易']").prop("selected", true);
|
|
}
|
|
$("#VolType").trigger("chosen:updated");
|
|
|
|
changeVolType();
|
|
});
|
|
|
|
$("#importMode").change();
|
|
});
|
|
|
|
function uploadVolatility() {
|
|
if (!checkData()) return false;
|
|
var formData = new FormData($('form')[0]);
|
|
main.waitMe("show");
|
|
$.ajax({
|
|
url: '/volatility/UploadVolSurface',
|
|
type: 'POST',
|
|
xhr: function () {
|
|
myXhr = $.ajaxSettings.xhr();
|
|
if (myXhr.upload) {
|
|
myXhr.upload.addEventListener('progress', progressHandlingFunction, false);
|
|
}
|
|
return myXhr;
|
|
},
|
|
success: function (resp) {
|
|
try {
|
|
debugger;
|
|
if (resp.success) {
|
|
parent.main.message("导入成功!");
|
|
parent.ReloadVolsurface(resp.obj ? resp.obj.underlyingCode : null);
|
|
parent.layer.closeAll();
|
|
} else {
|
|
main.alert("导入失败:{0}".template(resp.msg));
|
|
}
|
|
} catch (e) {
|
|
|
|
} finally {
|
|
main.waitMe("hide");
|
|
}
|
|
},
|
|
error: function (data) {
|
|
main.waitMe("hide");
|
|
main.alert("导入失败:{0}".template(data.error.message));
|
|
},
|
|
data: formData,
|
|
cache: false,
|
|
contentType: false,
|
|
processData: false
|
|
});
|
|
}
|
|
|
|
function progressHandlingFunction(e) {
|
|
if (e.lengthComputable) {
|
|
$('progress').attr({ value: e.loaded, max: e.total });
|
|
}
|
|
}
|
|
|
|
function checkData() {
|
|
if ($('#openFile').val() == null || $('#openFile').val() == "" || $('#openFile').val() == undefined) {
|
|
main.alert("波动率文件未选择!");
|
|
return false;
|
|
}
|
|
//非CSV文件不允许用户导入
|
|
var fileName = $('#openFile').val();
|
|
var arr = "xlsx";
|
|
var index = fileName.lastIndexOf(".");
|
|
var ext = fileName.substr(index + 1);
|
|
if (ext != arr) {
|
|
main.alert("请导入xlsx格式文件!");
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
function changeVolType() {
|
|
var imode = $("#importMode").val();
|
|
var voltype = $("#VolType").val();
|
|
$("#Bid_Deviation").parent().hide();
|
|
$("#Ask_Deviation").parent().hide();
|
|
if (voltype == "交易" && imode == "Stand") {
|
|
$("#Bid_Deviation").parent().show();
|
|
$("#Ask_Deviation").parent().show();
|
|
}
|
|
}
|
|
function checknumber(obj) {
|
|
//精确模式保留6位小数
|
|
if (g_volMoreAccurate) {
|
|
var objval = $(obj).val();
|
|
if (objval.split('.')[1].length >= 6) {
|
|
var checkval = objval.split('.')[0] + '.' + objval.split('.')[1].substr(0, 6);
|
|
$(obj).val(checkval);
|
|
}
|
|
}
|
|
//非精确模式保留4位小数
|
|
else {
|
|
var objval = $(obj).val();
|
|
if (objval.split('.')[1].length >= 4) {
|
|
var checkval = objval.split('.')[0] + '.' + objval.split('.')[1].substr(0, 4);
|
|
$(obj).val(checkval);
|
|
}
|
|
}
|
|
}
|
|
function reInput(obj) {
|
|
$(obj).click(function () {
|
|
$(this).val("");
|
|
});
|
|
}
|
|
</script>
|
|
}
|
|
|
|
@using (Html.BeginForm("volatilityEdit", "volatility", FormMethod.Post, new { id = "volatilityUploadForm" }))
|
|
{
|
|
<div class="well" style="margin:0px auto;margin-top:10px;">
|
|
<fieldset>
|
|
<!--目前框架新增和修改同一界面,造成的问题就是输入的字段新增和修改都一样-->
|
|
@if (Model != null)
|
|
{
|
|
<input type="hidden" value="@Model.id" name="id" id="id" />
|
|
}
|
|
|
|
<div class="form-group col-md-6">
|
|
<label class="formlabel">导入模式</label>
|
|
<select id="importMode">
|
|
<option value="Stand">标准模式</option>
|
|
<option value="Simple">简易模式</option>
|
|
<option value="BidAsk">BidAsk模式</option>
|
|
<option value="All">全量模式</option>
|
|
</select>
|
|
<a href="~/App_Docs/导入模板/波动率标准模版.xlsx" id="standdemo">标准模板xlsx</a>
|
|
<a href="~/App_Docs/导入模板/波动率简易模板.xlsx" id="simpledemo">简易模板xlsx</a>
|
|
<a href="~/App_Docs/导入模板/BidAsk波动率模版.xlsx" id="bidaskdemo">BidAsk波动率模板xlsx</a>
|
|
<a href="~/App_Docs/导入模板/波动率全量模版.xlsx" id="alldemo">全量模板xlsx</a>
|
|
</div>
|
|
@Html.MyDateFor(model => model.QuotationDate, true)
|
|
|
|
@Html.MyDropdownFor(model => model.VolSurfaceMode, GlobalData.GetSelectItems(YLErp.QdpModule.Constants.ConsVolInfos.Gtja_VolSurfaceModes), "", false)
|
|
|
|
@Html.MyDropdownFor(model => model.VolType, VolTypes, new { onchange = "changeVolType()" }, "", false)
|
|
|
|
<div class="form-group">
|
|
<input type="file" id="openFile" name="file" accept="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" onchange="reInput(this)" />
|
|
</div>
|
|
|
|
<div class="form-group">
|
|
<label><input type="checkbox" name="overridByMainCode" value="true" /><strong> 使用主力合约波动率曲面(eg. RB00),覆盖同品种其他所有月份合约</strong></label>
|
|
</div>
|
|
|
|
<div class="form-group">
|
|
<label class="formlabel" for="Bid_Deviation">Bid波动率调整</label>
|
|
<input id="Bid_Deviation" class="" step="0.0001" onkeyup="checknumber(this)" type="number" value="" name="Bid_Deviation">
|
|
<label class="formlabel" style="color:blue">(例:-0.01表示将波动率整体降低0.01(1%)得到Bid曲面,留空不作调整)</label>
|
|
</div>
|
|
<div class="form-group">
|
|
<label class="formlabel" for="Ask_Deviation">Ask波动率调整</label>
|
|
<input id="Ask_Deviation" class="text-box" onkeyup="checknumber(this)" step="0.0001" onblur="this.value=(/^(-?[0-9]\d*)(\.\d*)?$/.test(this.value) ? this.value : '')" type="number" value="" name="Ask_Deviation">
|
|
<label class="formlabel" style="color:blue">(例:0.01表示将波动率整体提高0.01(1%)得到Ask曲面,留空不作调整)</label>
|
|
</div>
|
|
|
|
</fieldset>
|
|
</div>
|
|
<div class="form-buttons">
|
|
@MyControls.Btn("导入数据", "uploadVolatility()")
|
|
@MyControls.Btn("关闭", "layer.closeMe()")
|
|
</div>
|
|
} |