# Choice of epsilon for numerical calculation of vega in binomial option pricing model

I have a binomial option-pricing model (I don't think the details of how its implemented are relevant). However, when I go to calculate vega, I am essentially running the model a second time with new volatility input we call $\sigma + \epsilon$, where $\sigma$ is the volatility used to calculate the price. I then have two prices $p1$ and $p2$, the first of which is a function of $\sigma$, and the second a function of $\sigma + \epsilon$. I then calculate vega to be $\frac{(p2 - p1)}{\epsilon}$.

I'm having trouble coming up with a good value of $\epsilon$ to avoid floating-point underflows and overflows in the resulting calculation. Any suggestions on how to choose it?

Some things that I have available to me at the time of the choice of $\epsilon$:

• expiration
• strike
• volatility
• underlying price
• current time
• option price (as calculated by my model)
• delta (as calculated by my model)
• gamma (as calculated by my model)
-

I am not sure I follow but should epsilon not be the value that you shift your volatility with in order to calculate impact on price? Why not shifting up sigma  by 1%? – Freddy Jan 16 at 2:43
While vega is usually quoted as "change per 1% change in vol", vega is the partial derivative with respect to $\sigma$. hence, $\epsilon$ should be chosen as small as possible, avoiding numerical cancellation errors. – Christian Fries Jan 16 at 19:56

## 1 Answer

Let $\beta$ denote the relative machine precision, usually $\beta = 1E-16$. Assume the you can evaluate the value V up to precision $\alpha$. The best you can get is $\alpha = \beta \cdot V$ if $V$ is not underflow or overflow. Then you can calculate the finite difference up to precision $4 \alpha / \epsilon$ (the 4 might be a rough estimate, but it comes from the fact that there may be an additional cancelation in the finite difference of relative order $\beta$ and we use $\alpha > \beta \cdot V$.

Thus you can calculate the finite difference up to $4 \alpha / \epsilon$. On the other hand, from Taylor expansion, the approximation error of a finite difference is $C \epsilon$, where $C$ is a bound on the second derivative. The best choice of $\epsilon$ is the minimum of $\epsilon \mapsto 4 \alpha / \epsilon + C \epsilon$, which is attained for $-4\alpha/\epsilon^2 + C = 0$, i.e. $\epsilon = 2 \cdot \sqrt{\alpha/C}$. If your tree achieves machine accuracy, i.e., $\alpha = \beta V$, then you should choose $\epsilon = 2 \sqrt{\frac{V}{V''}} \cdot \sqrt{\beta} = 2 \sqrt{\frac{V}{V''}} 1E-8$. In the last equation V denote "the order of magnitude of the value and $V''$ the order of magnitude of the second derivative. Clearly, if the second derivative is small, you can use larger shifts.

-

In V'' you're referring to the second derivative of price with respect to sigma, correct?  I don't have that available. – laslowh Jan 16 at 20:41
You just need a rough estimate for V''. For example via finite difference too. ($V(x+\epsilon) - 2 V(x) + V(x-\epsilon) / \epsilon^2$. – Christian Fries Jan 16 at 22:01
{"extraction_info": {"found_math": true, "script_math_tex": 0, "script_math_asciimath": 0, "math_annotations": 0, "math_alttext": 0, "mathml": 0, "mathjax_tag": 0, "mathjax_inline_tex": 30, "mathjax_display_tex": 0, "mathjax_asciimath": 0, "img_math": 0, "codecogs_latex": 0, "wp_latex": 0, "mimetex.cgi": 0, "/images/math/codecogs": 0, "mathtex.cgi": 0}, "config": {"markdown_headings": true, "markdown_code": true, "boilerplate_config": {"ratio_threshold": 0.18, "absolute_threshold": 10, "end_threshold": 15, "enable": true}, "remove_buttons": true, "remove_image_figures": true, "remove_link_clusters": true, "table_config": {"min_rows": 2, "min_cols": 3, "format": "github"}, "remove_chinese": true, "remove_edit_buttons": true, "extract_latex": true}, "english_confidence": 0.9137865900993347, "perplexity_flag": "head"}