OPT_GARMAN_KOHLHAGEN Function (Gnumeric)
Calculate a European currency-option control with Gnumeric OPT_GARMAN_KOHLHAGEN, domestic/foreign rates and verified time units.
Verification status: See the evidence and test scope described in this guide. How formula examples are checked
OPT_GARMAN_KOHLHAGEN evaluates a European currency-option model with separate domestic and foreign interest rates. Spot and strike must use the same exchange-rate quotation. The foreign rate affects the underlying currency’s forward value while the domestic rate discounts the strike payment. The output is a theoretical premium per unit of underlying foreign currency under the chosen quote convention.
Syntax and a time-unit warning
=OPT_GARMAN_KOHLHAGEN(call_put_flag,spot,strike,time,domestic_rate,foreign_rate,volatility)
All seven arguments are required. Use “c” for a call and “p” for a put. With annualized rates and volatility, supply time in years and rates as decimals. For example, 5%, 2% and 20% become 0.05, 0.02 and 0.2. Use positive spot, strike, time and volatility for the ordinary case.
The inspected help labels time as a number of days, but the implementation uses it directly in annual-rate exponentials and volatility×sqrt(time), with no division by 365 or other day conversion. The tested behavior below is therefore explicitly the one-year model at time=1. Do not put 365 into the fourth argument to represent one year with annualized rates. If starting from dates, determine an appropriate year fraction separately and document that convention.
Reproducible at-the-money currency example
=OPT_GARMAN_KOHLHAGEN("c",1.2,1.2,1,0.05,0.02,0.2)
The independently expected premium is approximately 0.1107240661. This synthetic example quotes domestic currency units per one foreign unit, with both spot and strike equal to 1.2. It uses a domestic rate of 5%, foreign rate of 2%, 20% volatility and one year remaining.
For a worksheet, put the seven arguments in A2:G2 and use =OPT_GARMAN_KOHLHAGEN(A2,B2,C2,D2,E2,F2,G2). Label E1 Domestic rate and F1 Foreign rate. Swapping these two cells changes the economics rather than merely changing the display currency.
Independent model check
The expected result was obtained by integrating a discounted call payoff under a lognormal model with drift domestic_rate minus foreign_rate, here 0.03. Equivalently, the generalized European-option model uses carry 0.03 and discount rate 0.05. The comparison establishes this specific input interpretation, not general currency-market conventions or an executable trading quote.
A hypothetical notional of 1,000 foreign units multiplies the per-unit premium by 1,000, giving about 110.7240661 domestic units before transaction-specific considerations. Changing the exchange-rate quotation to its reciprocal also changes option orientation, strike, rate roles and units; simply taking the reciprocal of the computed premium is not a valid conversion.
Advanced use and limitations
A scenario table can vary the foreign rate while keeping the domestic rate fixed, making the carry effect visible. Record whether rates are continuous annual rates and which year-fraction convention produced time. A day-count mismatch can change a short-dated price materially even when every spreadsheet cell has the right data type.
The model assumes European exercise and a particular lognormal volatility framework. It does not encode barriers, early exercise, discrete events or every contractual FX convention. These examples are software controls, not a claim that constant volatility and rates are sufficient for a real transaction.
Errors and troubleshooting
The callback maps unrecognized flags and not-a-number calculations to #NUM!. Logarithms and division by volatility×sqrt(time) require sensible positive-domain inputs; zero-boundary and extreme-value cases are not certified. If a result is unexpectedly large, check the fourth argument’s units and whether you entered percent values as decimals before diagnosing the formula itself.
Evidence and compatibility
Gnumeric ssconvert 1.12.57 under C.UTF-8 recalculated the exact literal examples on October 17, 2026. The OptionControls fixture recorded F7 = 0.11072406609784846. These agree with the independent expectations within 10^-7, including finite-difference sensitivity error. Cell-driven layouts are instructional equivalents, not separate GUI tests. Other boundary/error statements are source-derived. Official Gnumeric 1.12.57 implementation was retrieved October 17, 2026; independent calculations use discounted-payoff quadrature and the explicitly stated derivative or survival relationships. Original introduction and last functioning release are not established. No GUI screenshot or execution of another release is claimed. These derivatives functions are registered as Gnumeric-specific; verify recalculation after export rather than relying on cached values in another application.