public void MakeTheta(Tree SpotT, Pricer PriceT, ZeroCurve myZero, DivList myDiv) { SetParam(SpotT, PriceT); Tree T1 = new Tree(), T2 = new Tree(); T1.Tau = tau; T1.Gridsteps = Gridsteps; T1.Sig = sig; T1.Spot = spot; T1.MakeGrid(myZero, myDiv); PriceT.MakeGrid(T1); double P1 = PriceT.Price(); double t = tau - 1.00 / 365.00; T2.Tau = t; T2.Gridsteps = Gridsteps; T2.Sig = sig; T2.Spot = spot; T2.MakeGrid(myZero, myDiv); PriceT.MakeGrid(T2); double P2 = PriceT.Price(); Theta = (P2 - P1); }
public void MakeVega(Tree SpotT, Pricer PriceT, ZeroCurve myZero, DivList myDiv) { SetParam(SpotT, PriceT); Tree T1 = new Tree(), T2 = new Tree(); T1.Tau = tau; T1.Gridsteps = Gridsteps; T1.Sig = .99 * sig; T1.Spot = spot; T1.MakeGrid(myZero, myDiv); PriceT.MakeGrid(T1); double P1 = PriceT.Price(); T2.Tau = tau; T2.Gridsteps = Gridsteps; T2.Sig = 1.01 * sig; T2.Spot = spot; T2.MakeGrid(myZero, myDiv); PriceT.MakeGrid(T2); double P2 = PriceT.Price(); if (sig != 0) { Vega = 0.01 * (P2 - P1) / (2 * 0.01 * sig); } }
public static double FindPrice(ZeroCurve myZero, DivList myDiv, OrcWingVol myVol, double t, double strike, double spot, string style, string paystyle, double gridsteps) { //get the atfwd double atFwd = GetATMfwd(myZero, myDiv, spot, t); //set up the tree var myTree = new Tree(); int nGridsteps = (gridsteps < 20.0) ? 20 : Convert.ToInt32(gridsteps); myTree.Gridsteps = nGridsteps; myTree.Tau = t; myTree.Sig = myVol.orcvol(atFwd, strike); myTree.Spot = spot; myTree.MakeGrid(myZero, myDiv); //create pricer var myPrice = new Pricer { Strike = strike, Payoff = paystyle, Smoothing = "y", Style = style }; myPrice.MakeGrid(myTree); double pr = myPrice.Price(); return(pr); }