public override void setFromSerial(FpmlSerializedCSharp.ISerialized serial_Class) { FpmlSerializedCSharp.Excel_interface serial_Excel_interface = serial_Class as FpmlSerializedCSharp.Excel_interface; FpmlSerializedCSharp.Excel_compositeOption serial_Excel_compositeOption = serial_Excel_interface.Excel_compositeOption_; FpmlSerializedCSharp.Excel_issueInfo serial_excel_issueInfo = serial_Excel_compositeOption.Excel_issueInfo_; string excel_issueInfotype = serial_excel_issueInfo.Excel_type_.ValueStr; this.excel_issueInfoViewModel_ = Excel_issueInfoViewModel.CreateExcel_issueInfo(excel_issueInfotype); this.excel_issueInfoViewModel_.setFromSerial(serial_excel_issueInfo); FpmlSerializedCSharp.Excel_underlyingCalcInfo serial_excel_underlyingCalcInfo = serial_Excel_compositeOption.Excel_underlyingCalcInfo_; string excel_underlyingCalcInfotype = serial_excel_underlyingCalcInfo.Excel_type_.ValueStr; this.excel_underlyingCalcInfoViewModel_ = Excel_underlyingCalcInfoViewModel.CreateExcel_underlyingCalcInfo(excel_underlyingCalcInfotype); this.excel_underlyingCalcInfoViewModel_.setFromSerial(serial_excel_underlyingCalcInfo); this.exerciseDate_ = StringConverter.xmlDateToDateTime(serial_Excel_compositeOption.ExerciseDate_.ValueStr); this.payoffDate_ = StringConverter.xmlDateToDateTime(serial_Excel_compositeOption.PayoffDate_.ValueStr); this.notionalMaturityPayment_ = serial_Excel_compositeOption.NotionalMaturityPayment_.ValueStr; List <FpmlSerializedCSharp.Excel_compositeOption_subtype> serial_excel_compositeOption_subtype = serial_Excel_compositeOption.Excel_compositeOption_subtype_; this.excel_compositeOption_subtypeViewModel_ = new ObservableCollection <Excel_compositeOption_subtypeViewModel>(); foreach (var item in serial_excel_compositeOption_subtype) { string type = item.Excel_type_.ValueStr; Excel_compositeOption_subtypeViewModel viewModel = Excel_compositeOption_subtypeViewModel.CreateExcel_compositeOption_subtype(type); viewModel.setFromSerial(item); this.excel_compositeOption_subtypeViewModel_.Add(viewModel); } }
private void optionSubTypeListView_PreviewMouseDoubleClick(object sender, MouseButtonEventArgs e) { Window w = new Window(); w.Width = 500; w.Height = 200; ;// = new Excel_compositeOptionLoaderView(); //e_colv.InterfaceViewModel_ = this.viewModel_; Excel_compositeOption_subtypeViewModel selectedItem = this.optionSubTypeListView_.SelectedItem as Excel_compositeOption_subtypeViewModel; Excel_compositeOptionLoaderView e_colv = selectedItem.Clone().loaderView(this.viewModel_); //e_colv.SelectedOptionTypeViewModel_ = selectedItem.Clone(); //e_colv.SelectedOptionTypeViewModel_.loaderView(this.viewModel_); w.Content = e_colv; int selectionIndex = this.optionSubTypeListView_.SelectedIndex; if (w.ShowDialog() == true) { this.viewModel_.Excel_compositeOption_subtypeViewModelList_[selectionIndex] = e_colv.SelectedOptionTypeViewModel_; e_colv.SelectedOptionTypeViewModel_.descriptionUpdate(); } else { } }
private void ComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e) { //ComboBoxItem item = this.optionTypeCombBox_.SelectedItem as ComboBoxItem; compositeOption_subtypeEnum?item = this.optionTypeCombBox_.SelectedItem as compositeOption_subtypeEnum?; string optionType = item.ToString(); if (optionType.ToUpper() == "VANILLA CALL/PUT" || optionType.ToUpper() == "VANILLA_CALL_PUT") { this.selectedOptionTypeViewModel_ = new Excel_vanillaCallPutViewModel(); } else if (optionType.ToUpper() == "UP IN/OUT CALL" || optionType.ToUpper() == "UP_INOUT_CALL") { this.selectedOptionTypeViewModel_ = new Excel_upInOutCallViewModel(); } else if (optionType.ToUpper() == "DOWN IN/OUT PUT" || optionType.ToUpper() == "DOWN_INOUT_PUT") { OutputLogViewModel.addResult("no exist optionType : " + optionType); } else if (optionType.ToUpper() == "DIGITAL CALL/PUT" || optionType.ToUpper() == "DIGITAL_CALL_PUT") { this.selectedOptionTypeViewModel_ = new Excel_digitalCallPutViewModel(); } else { OutputLogViewModel.addResult("no exist optionType : " + optionType); } this.selectedOptionTypeViewModel_.setInterfaceViewModel(this.interfaceViewModel_); this.selectedOptionTypeViewModel_.DefaultSetting(this.interfaceViewModel_); this.selectedOptionGrid_.Children.Clear(); this.selectedOptionGrid_.Children.Add(this.selectedOptionTypeViewModel_.view()); }
public void initialize(Excel_compositeOption_subtypeViewModel e_cosvm) { this.optionTypeCombBox_.SelectedIndex = this.comboBoxNum(e_cosvm.Excel_Type_); this.optionTypeCombBox_.SelectionChanged += new SelectionChangedEventHandler(ComboBox_SelectionChanged); //view는 loaderView에서 적용했음. // 이건 submit했을때 적용할거 저장함. this.selectedOptionTypeViewModel_ = e_cosvm; }
//public override void calculate(Excel_instrumentViewModel excel_inst) //{ // //#region Setting // //Excel_compositeOptionViewModel compOptionVM = excel_interface as Excel_compositeOptionViewModel; // //if (compOptionVM == null) // //{ // // //error // //} // //Calendar calendar = new TARGET(); // //Date todaysDate = todaysDate = ProgramVariable.ReferenceDate_; // //Date settlementDate = todaysDate; // //Settings.setEvaluationDate(todaysDate); // //DayCounter dayCounter = new Actual365Fixed(); // //if (this.Excel_underlyingCalcInfo_paraViewModel_.Excel_underlyingInfo_paraViewModel_.Count == 0) // //{ // // //error // //} // //Excel_geometricBMViewModel gbm = this.Excel_underlyingCalcInfo_paraViewModel_.Excel_underlyingInfo_paraViewModel_[0].Excel_underlyingModel_paraViewModel_ as Excel_geometricBMViewModel; // //double currentValue = Convert.ToDouble(gbm.CurrentValue_); // //SimpleQuote quote = new SimpleQuote(currentValue); // //Handle<Quote> underlyingH = new Handle<Quote>(quote); // //double drift = Convert.ToDouble(gbm.Drift_); // //double dividendYield = Convert.ToDouble(gbm.Dividend_); // //double volatility = Convert.ToDouble(gbm.Volatility_); // //SimpleQuote volQuote = new SimpleQuote(volatility); // //Handle<Quote> volH = new Handle<Quote>(volQuote); // //var flatTermStructure = new Handle<YieldTermStructure>(new FlatForward(settlementDate, drift, dayCounter)); // //var flatDividendTS = new Handle<YieldTermStructure>(new FlatForward(settlementDate, dividendYield, dayCounter)); // //Handle<BlackVolTermStructure> flatVolTS = new Handle<BlackVolTermStructure>(new BlackConstantVol(settlementDate, calendar, volH, dayCounter)); // //BlackScholesMertonProcess bsmProcess = new BlackScholesMertonProcess(underlyingH, flatDividendTS, flatTermStructure, flatVolTS); // //double value = 0.0; // //DateTime exDate = compOptionVM.ExerciseDate_; // //List<QLNet.OneAssetOption> optionList = new List<QLNet.OneAssetOption>(); // //foreach (Excel_compositeOption_subtypeViewModel item in compOptionVM.Excel_compositeOption_subtypeViewModelList_) // //{ // // optionList.Add(this.option(item, bsmProcess, exDate)); // //} // ////------------------------------------------------ // //foreach (var item in optionList) // //{ // // value = value + item.NPV(); // //} // //if (this.Separable_) // //{ // // double matrutiryPayAmt = 0.0; // // Excel_yieldCurveViewModel e_ycvm // // = this.Excel_discountCurve_paraViewModel_.discountYieldCurve("KRW"); // // QLNet.YieldTermStructure yts = e_ycvm.yieldCurve(); // // value += matrutiryPayAmt; // //} // //#endregion // //#region Calculation // //quote.setValue(currentValue*1.01); // //double sup = optionList[0].NPV(); // //quote.setValue(currentValue * 0.99); // //double sdown = optionList[0].NPV(); // //double delta = (sup - sdown) / (currentValue * 0.02); // //double gamma = (sup * sup - 2 * value + sdown * sdown) / (currentValue * 0.01 * currentValue * 0.01); // //quote.setValue(currentValue); // //volQuote.setValue(volatility - 0.01); // //double voldown = optionList[0].NPV(); // //volQuote.setValue(volatility + 0.01); // //double volup = optionList[0].NPV(); // //double vega = (volup - voldown) / 2; // //#endregion // //#region Result // //this.Excel_resultViewModel_.Price_ = value.ToString(); // //double baseUnderlyingValue = Convert.ToDouble( // // excel_interface.Excel_underlyingCalcInfoViewModel_.Excel_underlyingInfoViewModel_[0].BasePrice_); // //this.Excel_resultViewModel_.PercentPrice_ = (100 * value / baseUnderlyingValue).ToString(); // //double notional = Convert.ToDouble(excel_interface.Excel_issueInfoViewModel_.Notional_); // //this.Excel_resultViewModel_.EvalAmount_ = ( notional * ( value / baseUnderlyingValue) ).ToString(); // //#endregion // //double gamma = optionList[0].gamma(); // //double vega = optionList[0].vega(); //} private QLNet.OneAssetOption option(Excel_compositeOption_subtypeViewModel compositeOptionVM, BlackScholesMertonProcess bsmProcess, DateTime exDate) { Date exerciseDate = new Date(exDate); if (compositeOptionVM.Excel_Type_.ToUpper() == "EXCEL_VANILLACALLPUT") { Excel_vanillaCallPutViewModel e_vcpvm = compositeOptionVM as Excel_vanillaCallPutViewModel; QLNet.PlainVanillaPayoff payoff = new PlainVanillaPayoff(Option.Type.Call, e_vcpvm.StrikeValue_); QLNet.EuropeanExercise ex = new EuropeanExercise(exerciseDate); QLNet.VanillaOption vanillaOption = new VanillaOption(payoff, ex); return(vanillaOption); } else if (compositeOptionVM.Excel_Type_.ToUpper() == "EXCEL_UPINOUTCALL" || compositeOptionVM.Excel_Type_.ToUpper() == "EXCEL_DOWNINOUTCALL") { Excel_upInOutCallViewModel e_uiocvm = compositeOptionVM as Excel_upInOutCallViewModel; Barrier.Type type = Barrier.Type.UpOut; if (e_uiocvm.InOut_.ToString() == "IN") { type = Barrier.Type.UpIn; } double strikeValue = e_uiocvm.StrikeValue_; double barrierValue = e_uiocvm.BarrierValue_; double partiRate = Convert.ToDouble(e_uiocvm.PartiRate_) / 100.0; double rebateValue = Convert.ToDouble(e_uiocvm.RebateCouponValue_); QLNet.PlainVanillaPayoff payoff = new PlainVanillaPayoff(Option.Type.Call, strikeValue); QLNet.EuropeanExercise ex = new EuropeanExercise(exerciseDate); QLNet.BarrierOption barrierOption = new QLNet.BarrierOption(type, barrierValue, partiRate, rebateValue, payoff, ex); QLNet.AnalyticBarrierWithPartiRateEngine engine = new AnalyticBarrierWithPartiRateEngine(bsmProcess); barrierOption.setPricingEngine(engine); return(barrierOption); } else if (compositeOptionVM.Excel_Type_.ToUpper() == "") { Barrier.Type type = Barrier.Type.DownOut; QLNet.PlainVanillaPayoff payoff = new PlainVanillaPayoff(Option.Type.Call, 261.4); QLNet.EuropeanExercise ex = new EuropeanExercise(exerciseDate); QLNet.BarrierOption barrierOption = new QLNet.BarrierOption(type, 313.68, 0.32, 0.0, payoff, ex); QLNet.AnalyticBarrierWithPartiRateEngine engine = new AnalyticBarrierWithPartiRateEngine(bsmProcess); barrierOption.setPricingEngine(engine); return(barrierOption); } else { throw new Exception("unknown compositeOptionType"); } }
private void ComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e) { //ComboBoxItem item = this.optionTypeCombBox_.SelectedItem as ComboBoxItem; compositeOption_subtypeEnum? item = this.optionTypeCombBox_.SelectedItem as compositeOption_subtypeEnum?; string optionType = item.ToString(); if (optionType.ToUpper() == "VANILLA CALL/PUT" || optionType.ToUpper() == "VANILLA_CALL_PUT") { this.selectedOptionTypeViewModel_ = new Excel_vanillaCallPutViewModel(); } else if (optionType.ToUpper() == "UP IN/OUT CALL" || optionType.ToUpper() == "UP_INOUT_CALL") { this.selectedOptionTypeViewModel_ = new Excel_upInOutCallViewModel(); } else if (optionType.ToUpper() == "DOWN IN/OUT PUT" || optionType.ToUpper() == "DOWN_INOUT_PUT") { OutputLogViewModel.addResult("no exist optionType : " + optionType); } else if (optionType.ToUpper() == "DIGITAL CALL/PUT" || optionType.ToUpper() == "DIGITAL_CALL_PUT") { this.selectedOptionTypeViewModel_ = new Excel_digitalCallPutViewModel(); } else { OutputLogViewModel.addResult("no exist optionType : " + optionType); } this.selectedOptionTypeViewModel_.setInterfaceViewModel(this.interfaceViewModel_); this.selectedOptionTypeViewModel_.DefaultSetting(this.interfaceViewModel_); this.selectedOptionGrid_.Children.Clear(); this.selectedOptionGrid_.Children.Add(this.selectedOptionTypeViewModel_.view()); }
//public override void calculate(Excel_instrumentViewModel excel_inst) //{ // //#region Setting // //Excel_compositeOptionViewModel compOptionVM = excel_interface as Excel_compositeOptionViewModel; // //if (compOptionVM == null) // //{ // // //error // //} // //Calendar calendar = new TARGET(); // //Date todaysDate = todaysDate = ProgramVariable.ReferenceDate_; // //Date settlementDate = todaysDate; // //Settings.setEvaluationDate(todaysDate); // //DayCounter dayCounter = new Actual365Fixed(); // //if (this.Excel_underlyingCalcInfo_paraViewModel_.Excel_underlyingInfo_paraViewModel_.Count == 0) // //{ // // //error // //} // //Excel_geometricBMViewModel gbm = this.Excel_underlyingCalcInfo_paraViewModel_.Excel_underlyingInfo_paraViewModel_[0].Excel_underlyingModel_paraViewModel_ as Excel_geometricBMViewModel; // //double currentValue = Convert.ToDouble(gbm.CurrentValue_); // //SimpleQuote quote = new SimpleQuote(currentValue); // //Handle<Quote> underlyingH = new Handle<Quote>(quote); // //double drift = Convert.ToDouble(gbm.Drift_); // //double dividendYield = Convert.ToDouble(gbm.Dividend_); // //double volatility = Convert.ToDouble(gbm.Volatility_); // //SimpleQuote volQuote = new SimpleQuote(volatility); // //Handle<Quote> volH = new Handle<Quote>(volQuote); // //var flatTermStructure = new Handle<YieldTermStructure>(new FlatForward(settlementDate, drift, dayCounter)); // //var flatDividendTS = new Handle<YieldTermStructure>(new FlatForward(settlementDate, dividendYield, dayCounter)); // //Handle<BlackVolTermStructure> flatVolTS = new Handle<BlackVolTermStructure>(new BlackConstantVol(settlementDate, calendar, volH, dayCounter)); // //BlackScholesMertonProcess bsmProcess = new BlackScholesMertonProcess(underlyingH, flatDividendTS, flatTermStructure, flatVolTS); // //double value = 0.0; // //DateTime exDate = compOptionVM.ExerciseDate_; // //List<QLNet.OneAssetOption> optionList = new List<QLNet.OneAssetOption>(); // //foreach (Excel_compositeOption_subtypeViewModel item in compOptionVM.Excel_compositeOption_subtypeViewModelList_) // //{ // // optionList.Add(this.option(item, bsmProcess, exDate)); // //} // ////------------------------------------------------ // //foreach (var item in optionList) // //{ // // value = value + item.NPV(); // //} // //if (this.Separable_) // //{ // // double matrutiryPayAmt = 0.0; // // Excel_yieldCurveViewModel e_ycvm // // = this.Excel_discountCurve_paraViewModel_.discountYieldCurve("KRW"); // // QLNet.YieldTermStructure yts = e_ycvm.yieldCurve(); // // value += matrutiryPayAmt; // //} // //#endregion // //#region Calculation // //quote.setValue(currentValue*1.01); // //double sup = optionList[0].NPV(); // //quote.setValue(currentValue * 0.99); // //double sdown = optionList[0].NPV(); // //double delta = (sup - sdown) / (currentValue * 0.02); // //double gamma = (sup * sup - 2 * value + sdown * sdown) / (currentValue * 0.01 * currentValue * 0.01); // //quote.setValue(currentValue); // //volQuote.setValue(volatility - 0.01); // //double voldown = optionList[0].NPV(); // //volQuote.setValue(volatility + 0.01); // //double volup = optionList[0].NPV(); // //double vega = (volup - voldown) / 2; // //#endregion // //#region Result // //this.Excel_resultViewModel_.Price_ = value.ToString(); // //double baseUnderlyingValue = Convert.ToDouble( // // excel_interface.Excel_underlyingCalcInfoViewModel_.Excel_underlyingInfoViewModel_[0].BasePrice_); // //this.Excel_resultViewModel_.PercentPrice_ = (100 * value / baseUnderlyingValue).ToString(); // //double notional = Convert.ToDouble(excel_interface.Excel_issueInfoViewModel_.Notional_); // //this.Excel_resultViewModel_.EvalAmount_ = ( notional * ( value / baseUnderlyingValue) ).ToString(); // //#endregion // //double gamma = optionList[0].gamma(); // //double vega = optionList[0].vega(); //} private QLNet.OneAssetOption option(Excel_compositeOption_subtypeViewModel compositeOptionVM, BlackScholesMertonProcess bsmProcess, DateTime exDate) { Date exerciseDate = new Date(exDate); if (compositeOptionVM.Excel_Type_.ToUpper() == "EXCEL_VANILLACALLPUT") { Excel_vanillaCallPutViewModel e_vcpvm = compositeOptionVM as Excel_vanillaCallPutViewModel; QLNet.PlainVanillaPayoff payoff = new PlainVanillaPayoff(Option.Type.Call, e_vcpvm.StrikeValue_); QLNet.EuropeanExercise ex = new EuropeanExercise(exerciseDate); QLNet.VanillaOption vanillaOption = new VanillaOption(payoff, ex); return vanillaOption; } else if (compositeOptionVM.Excel_Type_.ToUpper() == "EXCEL_UPINOUTCALL" || compositeOptionVM.Excel_Type_.ToUpper() == "EXCEL_DOWNINOUTCALL" ) { Excel_upInOutCallViewModel e_uiocvm = compositeOptionVM as Excel_upInOutCallViewModel; Barrier.Type type = Barrier.Type.UpOut; if (e_uiocvm.InOut_.ToString() == "IN") { type = Barrier.Type.UpIn; } double strikeValue = e_uiocvm.StrikeValue_; double barrierValue = e_uiocvm.BarrierValue_; double partiRate = Convert.ToDouble(e_uiocvm.PartiRate_)/100.0; double rebateValue = Convert.ToDouble(e_uiocvm.RebateCouponValue_); QLNet.PlainVanillaPayoff payoff = new PlainVanillaPayoff(Option.Type.Call, strikeValue); QLNet.EuropeanExercise ex = new EuropeanExercise(exerciseDate); QLNet.BarrierOption barrierOption = new QLNet.BarrierOption(type, barrierValue, partiRate, rebateValue, payoff, ex); QLNet.AnalyticBarrierWithPartiRateEngine engine = new AnalyticBarrierWithPartiRateEngine(bsmProcess); barrierOption.setPricingEngine(engine); return barrierOption; } else if (compositeOptionVM.Excel_Type_.ToUpper() == "") { Barrier.Type type = Barrier.Type.DownOut; QLNet.PlainVanillaPayoff payoff = new PlainVanillaPayoff(Option.Type.Call, 261.4); QLNet.EuropeanExercise ex = new EuropeanExercise(exerciseDate); QLNet.BarrierOption barrierOption = new QLNet.BarrierOption(type, 313.68, 0.32, 0.0, payoff, ex); QLNet.AnalyticBarrierWithPartiRateEngine engine = new AnalyticBarrierWithPartiRateEngine(bsmProcess); barrierOption.setPricingEngine(engine); return barrierOption; } else { throw new Exception("unknown compositeOptionType"); } }