a) Implement a binomial tree class with a method that calculates the value of an option passed in to the class. The binomial tree should not rely on specific features of the different types of options. That is, the binomial tree should be shielded from specific knowledge of the options it is pricing. You may, e.g., have a method, valueOption() that handles any type of equity option passed to it.
Tip: The vector template class is useful in implementing the binomial tree solver.
Tip: You may find it useful to implement a getPayout(S,t) method for your option classes that return exercise payout (if any) for stock spot value S and time t.
b) Find the tree depth (i.e., the number of steps in the tree) needed to value an (at-the-money) European call with strike and spot of $90, sigma of 25%, risk-free rate of 9% and time to maturity of 6 months to within one penny of the BlackScholes() price.
c) Compare the values of European and American puts by varying the strike price from $80 to $110 in increments of $1 for a spot of $100, sigma of 0.3, risk-free rate of 8% and T = 2 years.
Write the European and American put values to a comma-separated value (csv) file. Each line should contain Strike, European price and American price. When is the difference in value between the two options the largest? Challenge question: *Can you figure out why?
d) When analyzing an asset, we are often interested in a security's sensitivities. That is, how the value of a security changes when the value of something else changes. For equity options, we speak in terms of the so-called "Greeks" which define sensitivities to the underlying stock price, volatility, interest rates and so on. The most important Greek is Delta, the option's sensitivity (first derivative) to changes in the underlying stock price.