Black–Scholes Put Theta and Its Sign Convention
Summary
This document presents VBA implementations of time decay for European call and put options under Black–Scholes, with continuous dividend yield. It lays out the shared inputs and intermediate quantities, including the standard normal cumulative probabilities, then asks why the put theta calculation is not working. The call calculation is reported to work, but no output values or specific error diagnosis are provided.
The formulas illustrate how theta combines the option’s volatility-related time decay with interest-rate and dividend-yield terms. For the put, the probability terms use negative d-values, and the interest and dividend contributions have signs that differ from the call formula. The document does not provide a tested correction or discuss conventions such as calendar-day versus annualized theta, so readers should verify signs and units against their chosen definition and check the implementation with known option values.
Key ideas
- Black–Scholes theta combines a volatility term with rate and dividend contributions.
- Put theta uses normal probabilities evaluated at negative d-values in the presented formulation.
- Call and put theta differ in the signs of their interest-rate and dividend terms.
- The document asks for a diagnosis but does not include a confirmed fix or validation results.
Tags
Full text
# Quick Question: Error in Theta Put Option for Black Scholes VBA
# Quick Question: Error in Theta Put Option for Black Scholes VBA
I have started an analyst role and I am trying to familiarize myself with the Black-Scholes formula in VBA to gauge option prices.
However, I cannot seem to get the Put Theta to work properly. I have split the complex formula into different parts (not the most elegant solution, but it helps me find the error quicker - I hoped). The Theta Call seems to be working (finallY). You can find this below:
```
Function ThetaCall(S, X, r, t, sig, q)
Dim dOne, dTwo, Nd1, Nd2, TC1, TC2, TC3, TC4, TC5, TC6
dOne = (Log(S / X) + (r - q + sig ^ 2 / 2) * t) / (sig * Sqr(t))
dTwo = dOne - sig * Sqr(t)
Nd1 = Application.NormSDist(dOne)
Nd2 = Application.NormSDist(dTwo)
TC1 = S * sig * (Exp(-q * t))
TC2 = 2 * Sqr(t)
TC3 = (1 / Sqr(2 * WorksheetFunction.Pi))
TC4 = (Exp(-dOne ^ 2 / 2))
TC5 = r * X * (Exp(-r * t)) * Application.NormSDist(dTwo)
TC6 = q * S * (Exp(-q * t)) * Application.NormSDist(dOne)
ThetaCall = (((TC1 / TC2) * TC3 * TC4) * -1 - TC5 + TC6) / 365
End Function
Function ThetaPut(S, X, r, t, sig, q)
Dim dOne, dTwo, Nd1, Nd2, TP1, TP2, TP3, TP4, TP5, TP6
dOne = (Log(S / X) + (r - q + sig ^ 2 / 2) * t) / (sig * Sqr(t))
dTwo = dOne - sig * Sqr(t)
Nd1 = Application.NormSDist(dOne)
Nd2 = Application.NormSDist(dTwo)
NegNd1 = Application.NormSDist(-dOne)
NegNd2 = Application.NormSDist(-dTwo)
TP1 = S * sig * Exp(-q * t)
TP2 = 2 * Sqr(t)
TP3 = (1 / Sqr(2 * WorksheetFunction.Pi))
TP4 = Exp(-dOne * -dOne / 2)
TP5 = r * X * Exp(-r * t) * NegNd2
TP6 = q * S * Exp(-q * t) * NegNd1
ThetaPut = (((TP1 / TP2) * TP3 * TP4) * -1 + TP5 - TP6) / 365
End Function
```
Could any of you experts help me find the Theta Put error? Thanks a lot for helping me out!Shown in full with attribution under the source's licence. Licence: CC BY-SA 4.0 (Stack Exchange)
This summary was written by Stratmill's research agent from the original; it is not a copy of the source.