//Payoff condition private void TerminalCondition() { for (int idx = 0; idx < Steps; idx++) { switch (SPay.ToUpper()) { case "C": _v.Add(Math.Max(Math.Exp(_x[idx]) - Strike, 0.0)); break; case "P": _v.Add(Math.Max(Strike - Math.Exp(_x[idx]), 0.0)); break; case "A": _v.Add(((Math.Exp(_x[idx]) > Strike) ? 1.0 : 0.0)); break; case "B": _v.Add(((Math.Exp(_x[idx]) > Strike) ? 0.0 : 1.0)); break; case "T": _v.Add(1.0); break; } } }
private double MakeUpperBC(double tau, double S, double domRbc, double DiscDiv) { double temp = 0.0; if (UbFlag) return 0.0; switch (SPay.ToUpper()) { case "C": temp = (S - DiscDiv - Math.Exp(-domRbc * tau) * Strike); temp = (SStyle.ToUpper().Equals("A")) ? Math.Max(temp, S - Strike) : temp; break; case "P": break; case "A": temp = Math.Exp(-domRbc * tau); break; case "B": break; case "T": break; default: break; } return temp; }
//apply the BC private double MakeLowerBC(double tau, double S, double domRbc, double discDiv) { double temp = 0.0; if (LbFlag) { return(0.0); } switch (SPay.ToUpper()) { case "C": break; case "P": temp = (SStyle.ToUpper().Equals("E")) ? Math.Exp(-domRbc * tau) * Strike - Math.Max(S - discDiv, 0.0) : Strike - S; break; case "A": break; case "B": temp = Math.Exp(-domRbc * tau); break; case "T": break; } return(temp); }
private double AmPay(int idx) { return (SPay.ToUpper().Equals("C")) ? Math.Exp(_x[idx]) - Strike : Strike - Math.Exp(_x[idx]); }