<p>Wikipedia shows all the formulas: <a href="https://en.wikipedia.org/wiki/Greeks_(finance)#Formulas_for_European_option_Greeks" rel="nofollow noreferrer">Greeks (finance)</a>.</p>
<ul>
<li>FX and Equity is identical (dividends are the second interest rate)</li>
<li>Futures use the Black Model (also in the Wikipedia link)</li>
</ul>
<p>Actual setups frequently use a bump and reprice theta (finite difference: FD theta) calculation as shown in <a href="https://quant.stackexchange.com/a/70297/54838">this answer</a> which replicates theta for Bloomberg's OVML FX option pricing tool, as well as the analytical theta from Garman Kohlhagen (Black Scholes for FX). Using FD theta has at least two advantages:</p>
<ul>
<li>BS theta can exceed actual market value of an option if the time to expiry is short (see <a href="https://quant.stackexchange.com/a/74749/54838">here</a> for an example)</li>
<li>Holidays and weekends can easily be included in the computation (Friday will be a 3 day theta, provided Monday is a working day)</li>
</ul>
<p>A few interesting details about theta for Black Scholes can be seen <a href="https://money.stackexchange.com/a/154958/109107">here</a>.</p>
<p><strong>TL;DR</strong></p>
<p>Finally, if option on futures are of interest, frequently options on forwards are also considered. Since futures are marked to market, you do not need to consider the delivery date of the future. With forwards however, this is important.</p>
<p>You can see this nicely at <a href="https://uk.mathworks.com/help/fininst/optstockbyblk.html" rel="nofollow noreferrer">Matlab's website</a> (where you can even run the code without having a license). An intuitive explanation is given on <a href="https://en.wikipedia.org/wiki/Black_model#The_Black_formula" rel="nofollow noreferrer">Wikipedia</a>. It can be replicated quickly in any programming language. Below, I will use <a href="https://julialang.org/" rel="nofollow noreferrer">Julia</a>.</p>
<p>We first need to import relevant packages, define the CDF and Black pricer. Note that T and T̃ are needed for pricing with Black on forwards where T̃ &gt; T.</p>
<pre><code>using Distributions, DataFrames, Dates
N(x) = cdf(Normal(0,1),x)
# generic Black-76 allowing for futures and forwards
function Black(F,K,T,T̃,rd,σ)
    d1 = ( log(F/K) +  0.5*σ^2*T ) / (σ*sqrt(T))
    d2 = d1 - σ*sqrt(T)
    c  = exp(-rd*T̃)*(F*N(d1) - K*N(d2))
    p  = exp(-rd*T̃)*(K*N(-d2)-F*N(-d1))
     
  return c, p
end
</code></pre>
<p>For the rates, we need to be consistent with the Matlab implementation, which uses 30/360 (SIA) in the examples on the webpage. Details for the so called <code>Basis</code> in the <code>intenvset</code> interest rate structure can be found <a href="https://uk.mathworks.com/help/fininst/intenvset.html#namevaluepairarguments" rel="nofollow noreferrer">here</a>. EndTimes is the year fraction.</p>
<pre><code># rates
ValuationDate = Date(2014,1,1);
EndDates = Date(2015,1,1);
Rates = 0.03
# Matlab Basis set to 1 is 30/360 (SIA) https://uk.mathworks.com/help/fininst/intenvset.html#namevaluepairarguments
months = Dates.month(EndDates) - Dates.month(ValuationDate) # compute month difference
years = Dates.year(EndDates) - Dates.year(ValuationDate)
days = (years*12+months)*30
T̃ = days/360
println(&quot;Days = <span class="math-container">$days")
println("Disc $</span>(exp(-Rates*T̃))&quot; )
println(&quot;EndTimes = $(T̃)&quot;)
</code></pre>
<p><span class="math-container">$Matlab \;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\; Julia$</span>
<a href="https://i.sstatic.net/8z6b4.png" rel="nofollow noreferrer"><img src="https://i.sstatic.net/8z6b4.png" alt="enter image description here" /></a></p>
<p>Now, all that is left is to define the option parameters to match Matlab exactly.</p>
<pre><code># option 
Strike = (200,90) # call / put
AssetPrice = 107
Sigma = 0.28
Settle = Date(2014,1,1)
Maturity = Date(2014,10,1)
months = Dates.month(Maturity) - Dates.month(Settle) # compute month difference
years = Dates.year(Maturity) - Dates.year(Settle)
days = (years*12+months)*30
T = days/360

DataFrame(Call = Black.(AssetPrice,Strike,T,T̃,Rates,Sigma)[1][1], 
          Put = Black.(AssetPrice,Strike,T,T̃,Rates,Sigma)[2][2])
</code></pre>
<p><span class="math-container">$Matlab \;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\; Julia$</span>
<a href="https://i.sstatic.net/jpn9c.png" rel="nofollow noreferrer"><img src="https://i.sstatic.net/jpn9c.png" alt="enter image description here" /></a></p>
<p>A bit more interesting is to check what happens when the expiry of the forward is set to a date far out. Within Matlab, if <code>ForwardMaturity</code> is not passed, the function calculates prices of future options. If ForwardMaturity is passed, the function computes prices of forward options. For the same option, setting ForwardMaturity to 'Jan-1-2032' (you can try this out yourself on Matlab's website) will give the following results (note, that the second result is an option on a future (or where the forward expires at option expiry).</p>
<p><span class="math-container">$Matlab \;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\; Julia$</span>
<a href="https://i.sstatic.net/ojd21.png" rel="nofollow noreferrer"><img src="https://i.sstatic.net/ojd21.png" alt="enter image description here" /></a></p>

CC BY-SA 4.0
2023-02-24T13:12:26.500Z
2023-02-25T10:11:25.910Z
2023-02-25T10:11:25.910Z
AKdemy
<p>I cannot figure out how the theta-formula would look like for a future option and a currency option.</p>

<p>I know the formula and understand it for an ordinary stockoption - but not for future-option and currency option.</p>

<p>Concerning the future-option i think there would be a very slight modification - probably just replace the S (stock) with the future price. But I dont know if the interst-factor on the right-handside should be removed or not?</p>

<p>Concerning currencyoption - I know how to calculate the price but not the theta here either. I have googled a lot and cannot see any formulas in John C Hulls book (Option Futures and other derivatives).</p>

<p>But heres the formula for calculating the theta for a stockoption.
X = Strikeprice, S = Stockprice, q = divident, r = interest, T-t = Time to Maturity, and  sigma is volatility.</p>

<p><img src="https://i.sstatic.net/tQJAr.jpg" alt="enter image description here"></p>

<finance><asset-pricing><black-scholes-model>
Black-Scholes - Theta formula Futureoption Currencyoption
Björn Hallström
# Black-Scholes - Theta formula Futureoption Currencyoption

(Asked by: username_0 on 2015-05-31)

I cannot figure out how the theta-formula would look like for a future option and a currency option.

I know the formula and understand it for an ordinary stockoption - but not for future-option and currency option.

Concerning the future-option i think there would be a very slight modification - probably just replace the S (stock) with the future price. But I dont know if the interst-factor on the right-handside should be removed or not?

Concerning currencyoption - I know how to calculate the price but not the theta here either. I have googled a lot and cannot see any formulas in John C Hulls book (Option Futures and other derivatives).

But heres the formula for calculating the theta for a stockoption.
X = Strikeprice, S = Stockprice, q = divident, r = interest, T-t = Time to Maturity, and sigma is volatility.

![enter image description here](https://i.sstatic.net/tQJAr.jpg)

**Tags:** finance, asset-pricing, black-scholes-model

---

## 1 answers

### Answer by username_1 on 2023-02-24. Score: 1

Wikipedia shows all the formulas: Greeks (finance).

FX and Equity is identical (dividends are the second interest rate)
Futures use the Black Model (also in the Wikipedia link)

Actual setups frequently use a bump and reprice theta (finite difference: FD theta) calculation as shown in this answer which replicates theta for Bloomberg's OVML FX option pricing tool, as well as the analytical theta from Garman Kohlhagen (Black Scholes for FX). Using FD theta has at least two advantages:

BS theta can exceed actual market value of an option if the time to expiry is short (see here for an example)
Holidays and weekends can easily be included in the computation (Friday will be a 3 day theta, provided Monday is a working day)

A few interesting details about theta for Black Scholes can be seen here.
TL;DR
Finally, if option on futures are of interest, frequently options on forwards are also considered. Since futures are marked to market, you do not need to consider the delivery date of the future. With forwards however, this is important.
You can see this nicely at Matlab's website (where you can even run the code without having a license). An intuitive explanation is given on Wikipedia. It can be replicated quickly in any programming language. Below, I will use Julia.
We first need to import relevant packages, define the CDF and Black pricer. Note that T and T̃ are needed for pricing with Black on forwards where T̃ > T.
using Distributions, DataFrames, Dates
N(x) = cdf(Normal(0,1),x)
# generic Black-76 allowing for futures and forwards
function Black(F,K,T,T̃,rd,σ)
    d1 = ( log(F/K) +  0.5*σ^2*T ) / (σ*sqrt(T))
    d2 = d1 - σ*sqrt(T)
    c  = exp(-rd*T̃)*(F*N(d1) - K*N(d2))
    p  = exp(-rd*T̃)*(K*N(-d2)-F*N(-d1))
     
  return c, p
end

For the rates, we need to be consistent with the Matlab implementation, which uses 30/360 (SIA) in the examples on the webpage. Details for the so called Basis in the intenvset interest rate structure can be found here. EndTimes is the year fraction.
# rates
ValuationDate = Date(2014,1,1);
EndDates = Date(2015,1,1);
Rates = 0.03
# Matlab Basis set to 1 is 30/360 (SIA) https://uk.mathworks.com/help/fininst/intenvset.html#namevaluepairarguments
months = Dates.month(EndDates) - Dates.month(ValuationDate) # compute month difference
years = Dates.year(EndDates) - Dates.year(ValuationDate)
days = (years*12+months)*30
T̃ = days/360
println("Days = $days")
println("Disc $(exp(-Rates*T̃))" )
println("EndTimes = $(T̃)")

$Matlab \;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\; Julia$

Now, all that is left is to define the option parameters to match Matlab exactly.
# option 
Strike = (200,90) # call / put
AssetPrice = 107
Sigma = 0.28
Settle = Date(2014,1,1)
Maturity = Date(2014,10,1)
months = Dates.month(Maturity) - Dates.month(Settle) # compute month difference
years = Dates.year(Maturity) - Dates.year(Settle)
days = (years*12+months)*30
T = days/360

DataFrame(Call = Black.(AssetPrice,Strike,T,T̃,Rates,Sigma)[1][1], 
          Put = Black.(AssetPrice,Strike,T,T̃,Rates,Sigma)[2][2])

$Matlab \;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\; Julia$

A bit more interesting is to check what happens when the expiry of the forward is set to a date far out. Within Matlab, if ForwardMaturity is not passed, the function calculates prices of future options. If ForwardMaturity is passed, the function computes prices of forward options. For the same option, setting ForwardMaturity to 'Jan-1-2032' (you can try this out yourself on Matlab's website) will give the following results (note, that the second result is an option on a future (or where the forward expires at option expiry).
$Matlab \;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\; Julia$


---

