private void CalculateData() { //read data: S,K,r,Sigma,T,Trials,steps label_bar.Text = "Reading data"; inprogress(10); //S means underlying double S = Convert.ToDouble(TextBox_S.Text); //K means strike price double K = Convert.ToDouble(TextBox_K.Text); //r means the interest rate double r = Convert.ToDouble(TextBox_r.Text); //Sigma means volatility double Sigma = Convert.ToDouble(TextBox_Sigma.Text); //T means tenor double T = Convert.ToDouble(TextBox_T.Text); //Trials means the trials of Mento Carlo Simulations int Trials = Convert.ToInt32(TextBox_Sims.Text); //steps means the steps to calculate the option price int steps = Convert.ToInt32(TextBox_Steps.Text); bool Type = Convert.ToBoolean(Radio_Call.Checked); bool AntVar = Convert.ToBoolean(checkbox_AntVar.Checked); bool CV = Convert.ToBoolean(checkbox_CV.Checked); bool Multithreading = Convert.ToBoolean(checkBox_MT.Checked); //European if (comboBox1.SelectedIndex == 0) { //store the data Option Euroption = new European(S, K, r, Sigma, T, Trials, steps, Type, AntVar, CV, Multithreading, 0, 0, 0); //option price label_bar.Text = "Calculating Price"; inprogress(30); TextBox_Price.Text = Convert.ToString(Euroption.OptionPrice()[0]); //delta label_bar.Text = "Calculating Delta"; inprogress(40); TextBox_Delta.Text = Convert.ToString(Euroption.Delta()); //gamma label_bar.Text = "Calculating Gamma"; inprogress(50); TextBox_Gamma.Text = Convert.ToString(Euroption.Gamma()); //vega label_bar.Text = "Calculating Vega"; inprogress(60); TextBox_Vega.Text = Convert.ToString(Euroption.Vega()); //theta label_bar.Text = "Calculating Theta"; inprogress(70); TextBox_Theta.Text = Convert.ToString(Euroption.Theta()); //rho label_bar.Text = "Calculating Rho"; inprogress(80); TextBox_Rho.Text = Convert.ToString(Euroption.Rho()); //standard error label_bar.Text = "Calculating Standard Error"; inprogress(90); TextBox_Std.Text = Convert.ToString(Euroption.OptionPrice()[1]); TextBox_Cores.Text = Convert.ToString(Euroption.core_num()); label_bar.Text = "Done."; inprogress(100); } //Asian if (comboBox1.SelectedIndex == 1) { //store the data Option AsianOption = new Asian(S, K, r, Sigma, T, Trials, steps, Type, AntVar, CV, Multithreading, 0, 0, 0); //option price label_bar.Text = "Calculating Price"; inprogress(30); TextBox_Price.Text = Convert.ToString(AsianOption.OptionPrice()[0]); //delta label_bar.Text = "Calculating Delta"; inprogress(40); TextBox_Delta.Text = Convert.ToString(AsianOption.Delta()); //gamma label_bar.Text = "Calculating Gamma"; inprogress(50); TextBox_Gamma.Text = Convert.ToString(AsianOption.Gamma()); //vega label_bar.Text = "Calculating Vega"; inprogress(60); TextBox_Vega.Text = Convert.ToString(AsianOption.Vega()); //theta label_bar.Text = "Calculating Theta"; inprogress(70); TextBox_Theta.Text = Convert.ToString(AsianOption.Theta()); //rho label_bar.Text = "Calculating Rho"; inprogress(80); TextBox_Rho.Text = Convert.ToString(AsianOption.Rho()); //standard error label_bar.Text = "Calculating Standard Error"; inprogress(90); TextBox_Std.Text = Convert.ToString(AsianOption.OptionPrice()[1]); TextBox_Cores.Text = Convert.ToString(AsianOption.core_num()); label_bar.Text = "Done."; inprogress(100); } //Digital if (comboBox1.SelectedIndex == 2) { //store the data if (TextBox_Rebate.Text == string.Empty) { label_bar.Text = "Missing some inputs"; } else { double Rebate = Convert.ToDouble(TextBox_Rebate.Text); Option DigitalOption = new Digital(S, K, r, Sigma, T, Trials, steps, Type, AntVar, CV, Multithreading, Rebate, 0, 0); //option price label_bar.Text = "Calculating Price"; inprogress(30); TextBox_Price.Text = Convert.ToString(DigitalOption.OptionPrice()[0]); //delta label_bar.Text = "Calculating Delta"; inprogress(40); TextBox_Delta.Text = Convert.ToString(DigitalOption.Delta()); //gamma label_bar.Text = "Calculating Gamma"; inprogress(50); TextBox_Gamma.Text = Convert.ToString(DigitalOption.Gamma()); //vega label_bar.Text = "Calculating Vega"; inprogress(60); TextBox_Vega.Text = Convert.ToString(DigitalOption.Vega()); //theta label_bar.Text = "Calculating Theta"; inprogress(70); TextBox_Theta.Text = Convert.ToString(DigitalOption.Theta()); //rho label_bar.Text = "Calculating Rho"; inprogress(80); TextBox_Rho.Text = Convert.ToString(DigitalOption.Rho()); //standard error label_bar.Text = "Calculating Standard Error"; inprogress(90); TextBox_Std.Text = Convert.ToString(DigitalOption.OptionPrice()[1]); TextBox_Cores.Text = Convert.ToString(DigitalOption.core_num()); label_bar.Text = "Done."; inprogress(100); } } //Barrier if (comboBox1.SelectedIndex == 3) { //store the data if (TextBox_Barrier.Text == string.Empty) { label_bar.Text = "Missing some inputs"; } else { double Barrier = Convert.ToDouble(TextBox_Barrier.Text); int barrtype = Convert.ToInt32(comboBox2.SelectedIndex); Option BarrierOption = new Barrier(S, K, r, Sigma, T, Trials, steps, Type, AntVar, CV, Multithreading, 0, Barrier, barrtype); //option price label_bar.Text = "Calculating Price"; inprogress(30); TextBox_Price.Text = Convert.ToString(BarrierOption.OptionPrice()[0]); //delta label_bar.Text = "Calculating Delta"; inprogress(40); TextBox_Delta.Text = Convert.ToString(BarrierOption.Delta()); //gamma label_bar.Text = "Calculating Gamma"; inprogress(50); TextBox_Gamma.Text = Convert.ToString(BarrierOption.Gamma()); //vega label_bar.Text = "Calculating Vega"; inprogress(60); TextBox_Vega.Text = Convert.ToString(BarrierOption.Vega()); //theta label_bar.Text = "Calculating Theta"; inprogress(70); TextBox_Theta.Text = Convert.ToString(BarrierOption.Theta()); //rho label_bar.Text = "Calculating Rho"; inprogress(80); TextBox_Rho.Text = Convert.ToString(BarrierOption.Rho()); //standard error label_bar.Text = "Calculating Standard Error"; inprogress(90); TextBox_Std.Text = Convert.ToString(BarrierOption.OptionPrice()[1]); TextBox_Cores.Text = Convert.ToString(BarrierOption.core_num()); label_bar.Text = "Done."; inprogress(100); } } //Lookback if (comboBox1.SelectedIndex == 4) { //store the data Option LookbackOption = new Lookback(S, K, r, Sigma, T, Trials, steps, Type, AntVar, CV, Multithreading, 0, 0, 0); //option price label_bar.Text = "Calculating Price"; inprogress(30); TextBox_Price.Text = Convert.ToString(LookbackOption.OptionPrice()[0]); //delta label_bar.Text = "Calculating Delta"; inprogress(40); TextBox_Delta.Text = Convert.ToString(LookbackOption.Delta()); //gamma label_bar.Text = "Calculating Gamma"; inprogress(50); TextBox_Gamma.Text = Convert.ToString(LookbackOption.Gamma()); //vega label_bar.Text = "Calculating Vega"; inprogress(60); TextBox_Vega.Text = Convert.ToString(LookbackOption.Vega()); //theta label_bar.Text = "Calculating Theta"; inprogress(70); TextBox_Theta.Text = Convert.ToString(LookbackOption.Theta()); //rho label_bar.Text = "Calculating Rho"; inprogress(80); TextBox_Rho.Text = Convert.ToString(LookbackOption.Rho()); //standard error label_bar.Text = "Calculating Standard Error"; inprogress(90); TextBox_Std.Text = Convert.ToString(LookbackOption.OptionPrice()[1]); TextBox_Cores.Text = Convert.ToString(LookbackOption.core_num()); label_bar.Text = "Done."; inprogress(100); } //Range if (comboBox1.SelectedIndex == 5) { //store the data Option RangeOption = new Range(S, K, r, Sigma, T, Trials, steps, Type, AntVar, CV, Multithreading, 0, 0, 0); //option price label_bar.Text = "Calculating Price"; inprogress(30); TextBox_Price.Text = Convert.ToString(RangeOption.OptionPrice()[0]); //delta label_bar.Text = "Calculating Delta"; inprogress(40); TextBox_Delta.Text = Convert.ToString(RangeOption.Delta()); //gamma label_bar.Text = "Calculating Gamma"; inprogress(50); TextBox_Gamma.Text = Convert.ToString(RangeOption.Gamma()); //vega label_bar.Text = "Calculating Vega"; inprogress(60); TextBox_Vega.Text = Convert.ToString(RangeOption.Vega()); //theta label_bar.Text = "Calculating Theta"; inprogress(70); TextBox_Theta.Text = Convert.ToString(RangeOption.Theta()); //rho label_bar.Text = "Calculating Rho"; inprogress(80); TextBox_Rho.Text = Convert.ToString(RangeOption.Rho()); //standard error label_bar.Text = "Calculating Standard Error"; inprogress(90); TextBox_Std.Text = Convert.ToString(RangeOption.OptionPrice()[1]); TextBox_Cores.Text = Convert.ToString(RangeOption.core_num()); label_bar.Text = "Done."; inprogress(100); } }
private void priceBookUsingSimulationToolStripMenuItem_Click(object sender, EventArgs e) { double vol = Convert.ToDouble(textBox_vol.Text) / 100; var query1 = from i in Program.PMC.Prices select i; //if just 2 rates if ((from i in Program.PMC.InterestRates select i.Rate).Count() < 3) { MessageBox.Show("Please add more interest rate!"); } else { // if the prices is not enough if ((query1.Count() == 0) || (query1.Count() < (from i in Program.PMC.Instruments where i.InstType.TypeName == "Stock" select i).Count())) { MessageBox.Show("Please add more historical prices!"); } else { listView_Alltrades.BeginUpdate(); foreach (ListViewItem i in listView_Alltrades.Items) { int id = Convert.ToInt32(i.SubItems[0].Text); Trade trade = Program.PMC.Trades.SingleOrDefault(j => j.Id == id); if (id > 0) { int direction; if (i.SubItems[1].Text == "BUY") { direction = 1; } else { direction = -1; } int quantity = Convert.ToInt32(i.SubItems[2].Text); string instrument = i.SubItems[3].Text; string instrtype = i.SubItems[4].Text; double marketprice = Convert.ToDouble(i.SubItems[5].Text); //get the id of instrument int Instid = GetData.InstrumentID(instrument); Instrument instrument1 = GetData.instrument(Instid); double S = GetData.S(id); double K = GetData.strike(Instid); double t = GetData.tenor(Instid); double r = GetData.rate(t, Instid); double rebate = Convert.ToDouble(instrument1.Rebate); double barrier = Convert.ToDouble(instrument1.Barrier); int barriertype = 0; if (instrument1.BarrierType == "Down and out") { barriertype = 1; } if (instrument1.BarrierType == "Up and out") { barriertype = 2; } if (instrument1.BarrierType == "Down and in") { barriertype = 3; } if (instrument1.BarrierType == "Up and in") { barriertype = 4; } int optiontype = 0; if (instrtype == "Stock") { optiontype = 0; } if (instrtype == "EuropeanOption") { optiontype = 1; } if (instrtype == "AsianOption") { optiontype = 2; } if (instrtype == "DigitalOption") { optiontype = 3; } if (instrtype == "BarrierOption") { optiontype = 4; } if (instrtype == "LookbackOption") { optiontype = 5; } if (instrtype == "RangeOption") { optiontype = 6; } bool Iscall; if (instrument1.IsCall == true) { Iscall = true; } else { Iscall = false; } if (optiontype == 0) { //stock //market price i.SubItems.Add(Convert.ToString(S)); //P&L i.SubItems.Add(((S - marketprice) * direction * quantity).ToString()); //delta i.SubItems.Add(Convert.ToString(direction * quantity)); //gamma i.SubItems.Add(Convert.ToString(0)); //vega i.SubItems.Add(Convert.ToString(0)); //rho i.SubItems.Add(Convert.ToString(0)); //theta i.SubItems.Add(Convert.ToString(0)); } //European if (optiontype == 1) { //option MonteCarloSim_ExoticOptions.Option European = new MonteCarloSim_ExoticOptions.European(S, K, r, vol, t, 10000, 50, Iscall, true, false, true, 0, 0, 0); //market price i.SubItems.Add(Convert.ToString(European.OptionPrice()[0])); //P&L i.SubItems.Add(Convert.ToString((European.OptionPrice()[0] - marketprice) * direction * quantity)); //delta i.SubItems.Add(Convert.ToString(direction * quantity * European.Delta())); //gamma i.SubItems.Add(Convert.ToString(direction * quantity * European.Gamma())); //vega i.SubItems.Add(Convert.ToString(direction * quantity * European.Vega())); //theta i.SubItems.Add(Convert.ToString(direction * quantity * European.Theta())); //rho i.SubItems.Add(Convert.ToString(direction * quantity * European.Rho())); } //Asian if (optiontype == 2) { //option MonteCarloSim_ExoticOptions.Option AisanOption = new MonteCarloSim_ExoticOptions.Asian(S, K, r, vol, t, 10000, 50, Iscall, true, false, true, 0, 0, 0); //market price i.SubItems.Add(Convert.ToString(AisanOption.OptionPrice()[0])); //P&L i.SubItems.Add(Convert.ToString((AisanOption.OptionPrice()[0] - marketprice) * direction * quantity)); //delta i.SubItems.Add(Convert.ToString(direction * quantity * AisanOption.Delta())); //gamma i.SubItems.Add(Convert.ToString(direction * quantity * AisanOption.Gamma())); //vega i.SubItems.Add(Convert.ToString(direction * quantity * AisanOption.Vega())); //theta i.SubItems.Add(Convert.ToString(direction * quantity * AisanOption.Theta())); //rho i.SubItems.Add(Convert.ToString(direction * quantity * AisanOption.Rho())); } //Digital if (optiontype == 3) { //option MonteCarloSim_ExoticOptions.Option DigitalOption = new MonteCarloSim_ExoticOptions.Digital(S, K, r, vol, t, 10000, 50, Iscall, true, false, true, rebate, 0, 0); //market price i.SubItems.Add(Convert.ToString(DigitalOption.OptionPrice()[0])); //P&L i.SubItems.Add(Convert.ToString((DigitalOption.OptionPrice()[0] - marketprice) * direction * quantity)); //delta i.SubItems.Add(Convert.ToString(direction * quantity * DigitalOption.Delta())); //gamma i.SubItems.Add(Convert.ToString(direction * quantity * DigitalOption.Gamma())); //vega i.SubItems.Add(Convert.ToString(direction * quantity * DigitalOption.Vega())); //theta i.SubItems.Add(Convert.ToString(direction * quantity * DigitalOption.Theta())); //rho i.SubItems.Add(Convert.ToString(direction * quantity * DigitalOption.Rho())); } //Barrier if (optiontype == 4) { //option MonteCarloSim_ExoticOptions.Option BarrierOption = new MonteCarloSim_ExoticOptions.Barrier(S, K, r, vol, t, 10000, 50, Iscall, true, false, true, 0, barrier, barriertype); //market price i.SubItems.Add(Convert.ToString(BarrierOption.OptionPrice()[0])); //P&L i.SubItems.Add(Convert.ToString((BarrierOption.OptionPrice()[0] - marketprice) * direction * quantity)); //delta i.SubItems.Add(Convert.ToString(direction * quantity * BarrierOption.Delta())); //gamma i.SubItems.Add(Convert.ToString(direction * quantity * BarrierOption.Gamma())); //vega i.SubItems.Add(Convert.ToString(direction * quantity * BarrierOption.Vega())); //theta i.SubItems.Add(Convert.ToString(direction * quantity * BarrierOption.Theta())); //rho i.SubItems.Add(Convert.ToString(direction * quantity * BarrierOption.Rho())); } //Lookback if (optiontype == 5) { //option MonteCarloSim_ExoticOptions.Option LookbackOption = new MonteCarloSim_ExoticOptions.Lookback(S, K, r, vol, t, 10000, 50, Iscall, true, false, true, 0, 0, 0); //market price i.SubItems.Add(Convert.ToString(LookbackOption.OptionPrice()[0])); //P&L i.SubItems.Add(Convert.ToString((LookbackOption.OptionPrice()[0] - marketprice) * direction * quantity)); //delta i.SubItems.Add(Convert.ToString(direction * quantity * LookbackOption.Delta())); //gamma i.SubItems.Add(Convert.ToString(direction * quantity * LookbackOption.Gamma())); //vega i.SubItems.Add(Convert.ToString(direction * quantity * LookbackOption.Vega())); //theta i.SubItems.Add(Convert.ToString(direction * quantity * LookbackOption.Theta())); //rho i.SubItems.Add(Convert.ToString(direction * quantity * LookbackOption.Rho())); } //Range if (optiontype == 6) { //option MonteCarloSim_ExoticOptions.Option RangeOption = new MonteCarloSim_ExoticOptions.Range(S, K, r, vol, t, 10000, 50, Iscall, true, false, true, 0, 0, 0); //market price i.SubItems.Add(Convert.ToString(RangeOption.OptionPrice()[0])); //P&L i.SubItems.Add(Convert.ToString((RangeOption.OptionPrice()[0] - marketprice) * direction * quantity)); //delta i.SubItems.Add(Convert.ToString(direction * quantity * RangeOption.Delta())); //gamma i.SubItems.Add(Convert.ToString(direction * quantity * RangeOption.Gamma())); //vega i.SubItems.Add(Convert.ToString(direction * quantity * RangeOption.Vega())); //theta i.SubItems.Add(Convert.ToString(direction * quantity * RangeOption.Theta())); //rho i.SubItems.Add(Convert.ToString(direction * quantity * RangeOption.Rho())); } } } } } listView_Alltrades.EndUpdate(); }