European Barrier Options (OTC) 
European barrier call and put options are valued using the Rubinstein process. Four circumstances can arise:
up&in
up&out
down&in
down&out
A rebate can also be paid. This is a fixed amount paid if the option cannot be exercised due to reaching or not reaching the barrier. For an up & out option, a fixed amount is paid as soon as the price reaches or exceeds the up & out point. For a down & in option, payment is made if the price does not reach the in-point during the term.
The price calculator for European barrier options is called up with the following parameters:
Term: |
Remainder of the option term in days |
Dom-rate: |
Interest rate 1 as a percentage |
For-rate: |
Interest rate 2 as a percentage |
Rebate: |
Rebate |
Rebate sign: |
+/- sign of the rebate |
Spot: |
Spot |
Strike: |
Strike |
Barrier: |
Barriers |
Type UL: |
Type of underlying |
Vola: |
Volatility |
In/Out: |
In/out type indicator |
Up/Down: |
Upper/lower barrier indicator |
Put/Call: |
Put/call option indicator |
If the expiration date of the option is reached, the inner value of the option is displayed (the rebate amount).
If the option term has not expired, the price is calculated as follows:
lograte = log( 1 + opt_domestic_rate / 100)
logforeign = log( 1 + opt_foreign_rate / 100)
yearfrac = opt_days / 365
dom_disc = exp( lograte * -1 * yearfrac)
for_disc = exp( logforeign * -1 * yearfrac)
adjvola = opt_vola / 100
volaroot = adjvola * sqrt( yearfrac)
lambda = ( lograte - logforeign + ( adjvola 2 / 2)) / adjvola 2 )
eta = -1 for up-options
eta = 1 for down-options
phi = -1 for puts
phi = -1 for calls
N(x) = standard normal distribution of x
resign = + for positive rebates
- for negative rebates
The prices of the barrier options, depending on type, consist of a total of 6 addends.
res1:
ex = phi * ( ( log( spot / strike ) / volaroot ) +
( lambda * volaroot))
ex2 = ex - ( phi * volaroot ).
res1 = phi * spot * for_disc * N(ex) -
phi * strike * dom_disc * N(ex2).
res2:
ex = phi * ( ( log( spot / barrier ) / volaroot ) +
( lambda * volaroot))
ex2 = ex - ( phi * volaroot)
res2 = phi * spot * for_disc * N(ex) -
phi * strike * dom_disc * N(ex2)
res3:
yps = eta * ( ( log( barrier 2 / spot / strike ) /
volaroot) + ( lambda * volaroot))
yps2 = yps - ( eta * volaroot)
res3 = phi * spot * for_disc *
exp( log( barrier / spot) * 2 * lambda) * N(yps) -
phi * strike * dom_disc *
exp( log( barrier / spot) * ( 2 * lambda - 2)) * N(yps2)
res4:
yps = eta * ( ( log( barrier / spot /
volaroot) + ( lambda * volaroot))
yps2 = yps - ( eta * volaroot)
res3 = phi * spot * for_disc *
exp( log( barrier / spot) * 2 * lambda) * N(yps) -
phi * strike * dom_disc *
exp( log( barrier / spot) * ( 2 * lambda - 2)) * N(yps2)
res5 (rebate addend for in-options):
ex1 = eta * ( ( log( spot / barrier) /
volaroot) + ( ( lambda - 1) * volaroot)).
yps1 = eta * ( ( log( barrier / spot) /
volaroot) + ( ( lambda - 1) * volaroot))
if resign = '-'
res5 = -1 * rebate * dom_disc * ( N(ex1) -
exp( log( barrier / spot) * ( 2 * lambda - 2)) * N(yps1))
else.
res5 = rebate * dom_disc * ( N(ex1) -
exp( log( barrier / spot) * ( 2 * lambda - 2)) * N(yps1))
endif
res6 (rebate addend for out-options):
This component is the same as a one touch option (see the documentation for one touch options).
Term > 0
For valuation you must differentiate between 24 constellations:
In - option
Up - option
Put ( Up&In Put )
Spot < Barrier
Strike >= Barrier
Price = res1 - res2 + res4 + res5
Strike < Barrier
Price = res3 + res5
Spot > Barrier
Standard option, since already knocked in.
Call ( Up&In Call )
Spot < Barrier
Strike >= Barrier
Price = res1 + res5
Strike < Barrier
Price = res2 - res3 + res4 + res5
Spot > Barrier
Standard option, since already knocked in.
Down - option
Put ( Down&In Put )
Spot > Barrier
Strike >= Barrier
Price = res2 - res3 + res4 + res5
Strike < Barrier
Price = res1 + res5
Spot < Barrier
Standard option, since already knocked in.
Call ( Down&In Call )
Spot > Barrier
Strike >= Barrier
Price = res3 + res5
Strike < Barrier
Price = res1 - res2 + res4 + res5
Spot < Barrier
Standard option, since already knocked in.
Out - option
Up - option
Put ( Up&Out Put )
Spot < Barrier
Strike >= Barrier
Price = res2 - res4 + res6
Strike < Barrier
Price = res1 - res3 + res6
Spot > Barrier
Price = res6
Call ( Up&Out Call )
Spot < Barrier
Strike >= Barrier
Price = res6
Strike < Barrier
Price = res1 - res2 + res3 - res4 + res6
Spot > Barrier
Price = res6
Down - option
Put ( Down&Out Put )
Spot > Barrier
Strike >= Barrier
Price = res1 - res2 + res3 - res4 + res6
Strike < Barrier
Price = res6
Spot < Barrier
Price = res6
Call ( Down&Out Call )
Spot > Barrier
Strike >= Barrier
Price = res1 - res3 + res6
Strike < Barrier
Price = res2 - res4 + res6
Spot < Barrier
Price = res6