Application Center - Maplesoft

App Preview:

Options with Foreign Exchange Adjustment

You can switch back to the summary page by clicking here.

Learn about Maple
Download Application


 

Image 

 

Options with foreign exchange adjustment 

 

Igor Hlivka 

MUFG Securities International, LONDON 

 

 

The document presents the methods used by market practitioners to adjust the financial instruments processes and options valuations when payoffs are converted into different currency. Foreign exchange adjustment in the financial options universe brings in additional stochastic factor that extends the traditional univariate space into bi-variate or even multi-variate setting. We show that key tool to handle this scenario is an appropriate change of probability measure. In this context we also discuss the essence of the Siegel Paradox and show the way to resolve it. 

 

Foreign exchange-related options are contingent claims on a financial asset quoted in different currency. They are typically presented as options on an asset in economy A but expressed in the currency of economy B. An example is an option on US stock price or S&P 500 Index paid in JPY. In such case, the Call Option payoff can be expressed
 

XCall = `𝔼`[LinearAlgebra:-Transpose((`+`(S[T], `-`(K)))[JPY])] 

Foreign exchange adjusted option come in different names format, but they are generally referred as Quanto Options. Quantos are popular option contracts as they allow investors to trade options on foreign asset in domestic currency without an exposure to the foreign exchange risk. In this respect, buyers and sellers can focus on pure asset performance without a fear of underperformance due to unfavorable exchange rate movement at the maturity of the contract. 

 

 

In essence, Quantos are particular case of multi-asset options as they incorporate two or more sources of randomness: 

  • Underlying asset S[T]  
 

  • Exchange rate                  X[T]  
 

The two processes can be (and usually are) correlated.  

 

In financial markets majority of assets are modeled though lognormal dynamics: 

                                                                       

                                                          `and`(dS = `+`(`Sμdt`, `*`(`SσdW`, `*`(dX))), `+`(`Sμdt`, `*`(`SσdW`, `*`(dX))) = `+`(`Xθdt`, `XηdZ`))                    with   dWdZ = `ρdt` 

 

Since Quantos are built around the cross-exposure to at least two different economies, we will proceed with the derivation from two perspectives: 

  • Economy A
 

  • Economy B
 

 

For the completeness of our exposition, we also assume that in each economy (A and B) there are money market products `^`(B, A), `^`(B, B)that serve as numeraires for each stochastic process. We will write the SDEs for each money market fund as: 

                                                         `and`(`^`(dB, A) = `*`(r[A], `*`(dt, `*`(`^`(dB, B)))), `*`(r[A], `*`(dt, `*`(`^`(dB, B)))) = `*`(r[B], `*`(dt))) 

We will proceed in several steps: 

  • Create correlated RV
 

  • Apply change of probability measures
 

  • Use the results to value Quanto-style options
 

In all steps we will rely heavily on Maple's Statistics Package  

 

> restart; -1; with(Statistics); -1; `:=`(R1, RandomVariable(Normal(0, 1))); -1; `:=`(R2, RandomVariable(Normal(0, 1))); -1; `:=`(R3, `+`(`*`(rho, `*`(R1)), `*`(sqrt(`+`(1, `-`(`*`(`^`(rho, 2))))), `*`(...
restart; -1; with(Statistics); -1; `:=`(R1, RandomVariable(Normal(0, 1))); -1; `:=`(R2, RandomVariable(Normal(0, 1))); -1; `:=`(R3, `+`(`*`(rho, `*`(R1)), `*`(sqrt(`+`(1, `-`(`*`(`^`(rho, 2))))), `*`(...
restart; -1; with(Statistics); -1; `:=`(R1, RandomVariable(Normal(0, 1))); -1; `:=`(R2, RandomVariable(Normal(0, 1))); -1; `:=`(R3, `+`(`*`(rho, `*`(R1)), `*`(sqrt(`+`(1, `-`(`*`(`^`(rho, 2))))), `*`(...
restart; -1; with(Statistics); -1; `:=`(R1, RandomVariable(Normal(0, 1))); -1; `:=`(R2, RandomVariable(Normal(0, 1))); -1; `:=`(R3, `+`(`*`(rho, `*`(R1)), `*`(sqrt(`+`(1, `-`(`*`(`^`(rho, 2))))), `*`(...
restart; -1; with(Statistics); -1; `:=`(R1, RandomVariable(Normal(0, 1))); -1; `:=`(R2, RandomVariable(Normal(0, 1))); -1; `:=`(R3, `+`(`*`(rho, `*`(R1)), `*`(sqrt(`+`(1, `-`(`*`(`^`(rho, 2))))), `*`(...
 

`+`(`*`(rho, `*`(_R)), `*`(`^`(`+`(1, `-`(`*`(`^`(rho, 2)))), `/`(1, 2)), `*`(_R0))) (1)
 

> `:=`(ST, `*`(S0, `*`(exp(`+`(`*`(`+`(mu, `-`(`*`(`/`(1, 2), `*`(`^`(sigma, 2))))), `*`(t)), `*`(sigma, `*`(sqrt(t), `*`(R1)))))))); 1; `:=`(BT[A], `*`(B0[A], `*`(exp(`*`(r[A], `*`(t)))))); 1; `:=`(BT[...
 

 

 

`*`(S0, `*`(exp(`+`(`*`(`+`(mu, `-`(`*`(`/`(1, 2), `*`(`^`(sigma, 2))))), `*`(t)), `*`(sigma, `*`(`^`(t, `/`(1, 2)), `*`(_R)))))))
`*`(B0[A], `*`(exp(`*`(r[A], `*`(t)))))
`*`(B0[B], `*`(exp(`*`(r[B], `*`(t))))) (2)
 

ST is the stock price process with drift μ and volatility σ 

BT[A]is the money market fund process in the A-economy 

BT[B] is the money market fund process in the B-economy 

 

 

Economy A 

We first introduce the exchange rate process XT - as the rate that converts the B-economy payoffs into A-economy currency:
Example:    1US$ = 110 JPY 

 

X0 = current exchange rate; δ is the drift of the process; η is the volatility of the process and ρ is the correlation of exchange rate process with the B-economy stock price. 

> `:=`(XT, `*`(X0, `*`(exp(`+`(`*`(`+`(delta, `-`(`*`(`/`(1, 2), `*`(`^`(eta, 2))))), `*`(t)), `*`(eta, `*`(sqrt(t), `*`(R3)))))))); 1
 

`*`(X0, `*`(exp(`+`(`*`(`+`(delta, `-`(`*`(`/`(1, 2), `*`(`^`(eta, 2))))), `*`(t)), `*`(eta, `*`(`^`(t, `/`(1, 2)), `*`(`+`(`*`(rho, `*`(_R)), `*`(`^`(`+`(1, `-`(`*`(`^`(rho, 2)))), `/`(1, 2)), `*`(_R... (1.1)
 

Our objective is to find a probability measure s.t. the B-economy asset process normalized by the A-economy market rate is martingale. For this, we first need to find the risk-neutral process for XT.
We will find it by normalizing the B-economy money market fund by A-economy rate:  This is  `/`(`*`(BT[B], `*`(XT)), `*`(BT[A]))
 

> `:=`(BXBP, eval(ExpectedValue(`/`(`*`(BT[B], `*`(XT)), `*`(BT[A]))), [B0[A] = 1, B0[B] = 1])); 1
 

`*`(exp(`+`(`*`(r[B], `*`(t)), `*`(t, `*`(delta)), `-`(`*`(r[A], `*`(t))))), `*`(X0)) (1.2)
 

Under original measure P, this is not martingale, so using Girsanov we transform the Wiener process to a new measure `#mover(mi( by imposing:
`#mover(mi( where α satisfies :
 

> `:=`(soln, solve(`+`(r[B], `-`(r[A]), delta, `*`(eta, `*`(alpha))) = 0, alpha)); 1; `:=`(XTP1, `*`(X0, `*`(exp(`+`(`*`(`+`(delta, `-`(`*`(`/`(1, 2), `*`(`^`(eta, 2))))), `*`(t)), `*`(eta, `*`(sqrt(t),...
`:=`(soln, solve(`+`(r[B], `-`(r[A]), delta, `*`(eta, `*`(alpha))) = 0, alpha)); 1; `:=`(XTP1, `*`(X0, `*`(exp(`+`(`*`(`+`(delta, `-`(`*`(`/`(1, 2), `*`(`^`(eta, 2))))), `*`(t)), `*`(eta, `*`(sqrt(t),...
`:=`(soln, solve(`+`(r[B], `-`(r[A]), delta, `*`(eta, `*`(alpha))) = 0, alpha)); 1; `:=`(XTP1, `*`(X0, `*`(exp(`+`(`*`(`+`(delta, `-`(`*`(`/`(1, 2), `*`(`^`(eta, 2))))), `*`(t)), `*`(eta, `*`(sqrt(t),...
`:=`(soln, solve(`+`(r[B], `-`(r[A]), delta, `*`(eta, `*`(alpha))) = 0, alpha)); 1; `:=`(XTP1, `*`(X0, `*`(exp(`+`(`*`(`+`(delta, `-`(`*`(`/`(1, 2), `*`(`^`(eta, 2))))), `*`(t)), `*`(eta, `*`(sqrt(t),...
 

 

 

 

`+`(`-`(`/`(`*`(`+`(r[B], `-`(r[A]), delta)), `*`(eta))))
`*`(X0, `*`(exp(`+`(`*`(`+`(delta, `-`(`*`(`/`(1, 2), `*`(`^`(eta, 2))))), `*`(t)), `*`(eta, `*`(`^`(t, `/`(1, 2)), `*`(`+`(`*`(rho, `*`(_R)), `*`(`^`(`+`(1, `-`(`*`(`^`(rho, 2)))), `/`(1, 2)), `*`(_R...
`*`(exp(`+`(`-`(`*`(r[B], `*`(t))), `*`(r[A], `*`(t)))), `*`(X0))
X0 (1.3)
 

The results above show that under the new probability measure `#mover(mi(  is exchange rate process has the risk-neutral drift of `*`(`+`(`-`(r[B]), r[A], `-`(`*`(`/`(1, 2), `*`(`^`(eta, 2))))), `*`(t)), and when normalized by the two money-market funds, the process is martingale. 

One issue we need to resolve is the drift for the exchange rates process. Using interest rate parity and the example above, we can establish: 

> `:=`(xtdrift, `/`(`*`(simplify(ln(`/`(`*`(ExpectedValue(XTP1)), `*`(X0))), symbolic)), `*`(t))); 1; `:=`(XTP2, subs(delta = xtdrift, XT)); 1
 

 

`+`(`-`(r[B]), r[A])
`*`(X0, `*`(exp(`+`(`*`(`+`(`-`(r[B]), r[A], `-`(`*`(`/`(1, 2), `*`(`^`(eta, 2))))), `*`(t)), `*`(eta, `*`(`^`(t, `/`(1, 2)), `*`(`+`(`*`(rho, `*`(_R)), `*`(`^`(`+`(1, `-`(`*`(`^`(rho, 2)))), `/`(1, 2... (1.4)
 

How about the Q-measure for the exchange rate process? We know that under Q, the process must be driftless, so we may state: 

> `:=`(stdrift, solve(`+`(xtdrift, `*`(eta, `*`(nu))) = 0, nu)); 1; `:=`(XTP3, subs({R3 = `+`(R3, `*`(stdrift, `*`(sqrt(t)))), delta = xtdrift}, XT)); 1; ExpectedValue(XTP3); 1; `:=`(XTQ, subs({r[A] = 0...
`:=`(stdrift, solve(`+`(xtdrift, `*`(eta, `*`(nu))) = 0, nu)); 1; `:=`(XTP3, subs({R3 = `+`(R3, `*`(stdrift, `*`(sqrt(t)))), delta = xtdrift}, XT)); 1; ExpectedValue(XTP3); 1; `:=`(XTQ, subs({r[A] = 0...
`:=`(stdrift, solve(`+`(xtdrift, `*`(eta, `*`(nu))) = 0, nu)); 1; `:=`(XTP3, subs({R3 = `+`(R3, `*`(stdrift, `*`(sqrt(t)))), delta = xtdrift}, XT)); 1; ExpectedValue(XTP3); 1; `:=`(XTQ, subs({r[A] = 0...
`:=`(stdrift, solve(`+`(xtdrift, `*`(eta, `*`(nu))) = 0, nu)); 1; `:=`(XTP3, subs({R3 = `+`(R3, `*`(stdrift, `*`(sqrt(t)))), delta = xtdrift}, XT)); 1; ExpectedValue(XTP3); 1; `:=`(XTQ, subs({r[A] = 0...
`:=`(stdrift, solve(`+`(xtdrift, `*`(eta, `*`(nu))) = 0, nu)); 1; `:=`(XTP3, subs({R3 = `+`(R3, `*`(stdrift, `*`(sqrt(t)))), delta = xtdrift}, XT)); 1; ExpectedValue(XTP3); 1; `:=`(XTQ, subs({r[A] = 0...
 

 

 

 

 

`+`(`-`(`/`(`*`(`+`(`-`(r[B]), r[A])), `*`(eta))))
`*`(X0, `*`(exp(`+`(`*`(`+`(`-`(r[B]), r[A], `-`(`*`(`/`(1, 2), `*`(`^`(eta, 2))))), `*`(t)), `*`(eta, `*`(`^`(t, `/`(1, 2)), `*`(`+`(`*`(rho, `*`(_R)), `*`(`^`(`+`(1, `-`(`*`(`^`(rho, 2)))), `/`(1, 2...
X0
`*`(X0, `*`(exp(`+`(`-`(`*`(`/`(1, 2), `*`(t, `*`(`^`(eta, 2))))), `*`(eta, `*`(`^`(t, `/`(1, 2)), `*`(`+`(`*`(rho, `*`(_R)), `*`(`^`(`+`(1, `-`(`*`(`^`(rho, 2)))), `/`(1, 2)), `*`(_R0))))))))))
X0 (1.5)
 

 

We can now define a B-economy stock price process in A-economy currency
Example:  US  stock price process expressed in JPY  

What is the process for such "hybrid" instrument? Since change of measure affects the drift but keeps volatility intact, we may write this process in the differential form as:                 dS = `+`(`*`(beta, `*`(S, `*`(dt))), `*`(sigma, `*`(S, `*`(`#mover(mi(        where beta  is the drift we need to find 

> `:=`(ST2B, `*`(S0, `*`(exp(`+`(`*`(`+`(lambda, `-`(`*`(`/`(1, 2), `*`(`^`(sigma, 2))))), `*`(t)), `*`(sigma, `*`(sqrt(t), `*`(R1)))))))); 1
 

`*`(S0, `*`(exp(`+`(`*`(`+`(lambda, `-`(`*`(`/`(1, 2), `*`(`^`(sigma, 2))))), `*`(t)), `*`(sigma, `*`(`^`(t, `/`(1, 2)), `*`(_R))))))) (1.6)
 

> `:=`(SXBP, eval(`/`(`*`(ExpectedValue(`/`(`*`(ST2B, `*`(XTQ)), `*`(BT[B])))), `*`(X0)), [B0[A] = 1, B0[B] = 1])); 1
 

`*`(exp(`+`(`*`(t, `*`(lambda)), `-`(`*`(r[B], `*`(t))), `*`(sigma, `*`(t, `*`(eta, `*`(rho)))))), `*`(S0)) (1.7)
 

> `:=`(sxdrift, `/`(`*`(simplify(ln(`/`(`*`(SXBP), `*`(S0))), symbolic)), `*`(t))); 1; `:=`(lambda, solve(sxdrift = 0, lambda)); 1
 

 

`+`(lambda, `-`(r[B]), `*`(sigma, `*`(eta, `*`(rho))))
`+`(r[B], `-`(`*`(sigma, `*`(eta, `*`(rho))))) (1.8)
 

This is the desired result - the Quanto-adjusted forward rate of  ST. It shows that under Q measure and Quanto transformation all we need is the adjust the B-economy stock price drift by λ factor. Then under Q, E[ST[Quanto]]is:  

> `:=`(EQST, ExpectedValue(ST2B)); 1; `:=`(STQB, subs(R1 = y, ST2B)); 1
 

 

`*`(exp(`+`(`*`(r[B], `*`(t)), `-`(`*`(sigma, `*`(t, `*`(eta, `*`(rho))))))), `*`(S0))
`*`(S0, `*`(exp(`+`(`*`(`+`(r[B], `-`(`*`(sigma, `*`(eta, `*`(rho)))), `-`(`*`(`/`(1, 2), `*`(`^`(sigma, 2))))), `*`(t)), `*`(sigma, `*`(`^`(t, `/`(1, 2)), `*`(y))))))) (1.9)
 

Once we have established the Quanto stock price process, we can now value a Quanto Option:
 

  • Quanto Call on B-economy stock price expressed in A-economy currency:
    This is      E[LinearAlgebra:-Transpose(`/`(`*`(`+`(STQB, `-`(K))), `*`(BT[A])))]
 

Quanto call payoff reduces to   One may notice that the exchange rate is now deterministic and enters the formula as parameter rather than variable.

Quanto options exist in many variations - the most common is the setting of X0 = 1 which implies that the option pays exactly the same amount as in the B-economy, however expressed in A-economy currency. However, we can use any other translation factor - eg. spot exchange rate - to express the option payoff in the foreign currency.
 

 

> `:=`(crval, solve(STQB = K, y)); 1; `:=`(QCall, `assuming`([`*`(exp(`+`(`-`(`*`(r[A], `*`(t))))), `*`(int(`/`(`*`(X0, `*`(`+`(STQB, `-`(K)), `*`(exp(`+`(`-`(`*`(`/`(1, 2), `*`(`^`(y, 2))))))))), `*`(s...
`:=`(crval, solve(STQB = K, y)); 1; `:=`(QCall, `assuming`([`*`(exp(`+`(`-`(`*`(r[A], `*`(t))))), `*`(int(`/`(`*`(X0, `*`(`+`(STQB, `-`(K)), `*`(exp(`+`(`-`(`*`(`/`(1, 2), `*`(`^`(y, 2))))))))), `*`(s...
`:=`(crval, solve(STQB = K, y)); 1; `:=`(QCall, `assuming`([`*`(exp(`+`(`-`(`*`(r[A], `*`(t))))), `*`(int(`/`(`*`(X0, `*`(`+`(STQB, `-`(K)), `*`(exp(`+`(`-`(`*`(`/`(1, 2), `*`(`^`(y, 2))))))))), `*`(s...
`:=`(crval, solve(STQB = K, y)); 1; `:=`(QCall, `assuming`([`*`(exp(`+`(`-`(`*`(r[A], `*`(t))))), `*`(int(`/`(`*`(X0, `*`(`+`(STQB, `-`(K)), `*`(exp(`+`(`-`(`*`(`/`(1, 2), `*`(`^`(y, 2))))))))), `*`(s...
`:=`(crval, solve(STQB = K, y)); 1; `:=`(QCall, `assuming`([`*`(exp(`+`(`-`(`*`(r[A], `*`(t))))), `*`(int(`/`(`*`(X0, `*`(`+`(STQB, `-`(K)), `*`(exp(`+`(`-`(`*`(`/`(1, 2), `*`(`^`(y, 2))))))))), `*`(s...
 

 

 

`+`(`/`(`*`(`/`(1, 2), `*`(`+`(`-`(`*`(2, `*`(r[B], `*`(t)))), `*`(2, `*`(sigma, `*`(t, `*`(eta, `*`(rho))))), `*`(t, `*`(`^`(sigma, 2))), `*`(2, `*`(ln(`/`(`*`(K), `*`(S0)))))))), `*`(sigma, `*`(`^`(...
`+`(`*`(`/`(1, 2), `*`(exp(`+`(`-`(`*`(r[A], `*`(t))))), `*`(X0, `*`(`+`(`-`(`*`(S0, `*`(exp(`*`(r[B], `*`(t))), `*`(erf(`+`(`/`(`*`(`/`(1, 4), `*`(`^`(2, `/`(1, 2)), `*`(`+`(`*`(2, `*`(ln(`/`(`*`(K),...
`+`(`*`(`/`(1, 2), `*`(exp(`+`(`-`(`*`(r[A], `*`(t))))), `*`(X0, `*`(`+`(`-`(`*`(S0, `*`(exp(`*`(r[B], `*`(t))), `*`(erf(`+`(`/`(`*`(`/`(1, 4), `*`(`^`(2, `/`(1, 2)), `*`(`+`(`*`(2, `*`(ln(`/`(`*`(K),...
`+`(`*`(`/`(1, 2), `*`(exp(`+`(`-`(`*`(r[A], `*`(t))))), `*`(X0, `*`(`+`(`*`(K, `*`(exp(`*`(sigma, `*`(t, `*`(eta, `*`(rho))))))), `-`(`*`(S0, `*`(exp(`*`(r[B], `*`(t)))))), `*`(K, `*`(erf(`+`(`/`(`*`...
`+`(`*`(`/`(1, 2), `*`(exp(`+`(`-`(`*`(r[A], `*`(t))))), `*`(X0, `*`(`+`(`*`(K, `*`(exp(`*`(sigma, `*`(t, `*`(eta, `*`(rho))))))), `-`(`*`(S0, `*`(exp(`*`(r[B], `*`(t)))))), `*`(K, `*`(erf(`+`(`/`(`*`...
`+`(`*`(`/`(1, 2), `*`(exp(`+`(`-`(`*`(r[A], `*`(t))))), `*`(X0, `*`(`+`(`*`(K, `*`(exp(`*`(sigma, `*`(t, `*`(eta, `*`(rho))))))), `-`(`*`(S0, `*`(exp(`*`(r[B], `*`(t)))))), `*`(K, `*`(erf(`+`(`/`(`*`...
(1.10)
 

> `:=`(NumResCall[JPY], evalf(eval(QCall, [S0 = 10, K = 10, t = 1, sigma = .25, eta = .12, rho = .6, r[B] = 0.3e-1, r[A] = 0.1e-1, X0 = 110]))); 1; `:=`(NumResPut[JPY], evalf(eval(QPut, [S0 = 10, K = 10...
`:=`(NumResCall[JPY], evalf(eval(QCall, [S0 = 10, K = 10, t = 1, sigma = .25, eta = .12, rho = .6, r[B] = 0.3e-1, r[A] = 0.1e-1, X0 = 110]))); 1; `:=`(NumResPut[JPY], evalf(eval(QPut, [S0 = 10, K = 10...
`:=`(NumResCall[JPY], evalf(eval(QCall, [S0 = 10, K = 10, t = 1, sigma = .25, eta = .12, rho = .6, r[B] = 0.3e-1, r[A] = 0.1e-1, X0 = 110]))); 1; `:=`(NumResPut[JPY], evalf(eval(QPut, [S0 = 10, K = 10...
`:=`(NumResCall[JPY], evalf(eval(QCall, [S0 = 10, K = 10, t = 1, sigma = .25, eta = .12, rho = .6, r[B] = 0.3e-1, r[A] = 0.1e-1, X0 = 110]))); 1; `:=`(NumResPut[JPY], evalf(eval(QPut, [S0 = 10, K = 10...
 

 

115.6878037
102.5404189 (1.11)
 

>
 

This is the premium of Quanto Call / Put in Japanese Yen on US Stock with current price of $10 and identical strike. The example assumes that the exchange rate is $1 = 110 JPY 

> plot3d(eval(QCall, [S0 = 10, K = 10, t = 1, sigma = .25, r[B] = 0.3e-1, r[A] = 0.15e-1, X0 = 110]), eta = 0.2e-1 .. .2, rho = -.6 .. .6, axes =
plot3d(eval(QCall, [S0 = 10, K = 10, t = 1, sigma = .25, r[B] = 0.3e-1, r[A] = 0.15e-1, X0 = 110]), eta = 0.2e-1 .. .2, rho = -.6 .. .6, axes =
plot3d(eval(QCall, [S0 = 10, K = 10, t = 1, sigma = .25, r[B] = 0.3e-1, r[A] = 0.15e-1, X0 = 110]), eta = 0.2e-1 .. .2, rho = -.6 .. .6, axes =
 

Plot
 

We can extend the concept of Quanto Option into a different type of option where we make the exchange rate stochastic. These options are usually known as Compo Options. 

 

The Compo Call payoff is:      `𝔼`[LinearAlgebra:-Transpose(`+`(`*`(XTQ, `*`(STQ)), `-`(K[A])))]       where K[A]   is the strike price in the A-economy currency 

 

We need to determine the joint process for B-economy stock price and the exchange rate: 

  • We will find the first two moments of the joint distribution:
 

> `:=`(STQ, subs(mu = 0, ST)); 1; `:=`(JTerm, simplify(ln(`/`(`*`(STQ, `*`(XTQ)), `*`(S0, `*`(X0)))), symbolic)); -1; `:=`(SXMean, ExpectedValue(JTerm)); 1; `:=`(SXVar, simplify(`/`(`*`(Variance(JTerm))...
`:=`(STQ, subs(mu = 0, ST)); 1; `:=`(JTerm, simplify(ln(`/`(`*`(STQ, `*`(XTQ)), `*`(S0, `*`(X0)))), symbolic)); -1; `:=`(SXMean, ExpectedValue(JTerm)); 1; `:=`(SXVar, simplify(`/`(`*`(Variance(JTerm))...
`:=`(STQ, subs(mu = 0, ST)); 1; `:=`(JTerm, simplify(ln(`/`(`*`(STQ, `*`(XTQ)), `*`(S0, `*`(X0)))), symbolic)); -1; `:=`(SXMean, ExpectedValue(JTerm)); 1; `:=`(SXVar, simplify(`/`(`*`(Variance(JTerm))...
`:=`(STQ, subs(mu = 0, ST)); 1; `:=`(JTerm, simplify(ln(`/`(`*`(STQ, `*`(XTQ)), `*`(S0, `*`(X0)))), symbolic)); -1; `:=`(SXMean, ExpectedValue(JTerm)); 1; `:=`(SXVar, simplify(`/`(`*`(Variance(JTerm))...
`:=`(STQ, subs(mu = 0, ST)); 1; `:=`(JTerm, simplify(ln(`/`(`*`(STQ, `*`(XTQ)), `*`(S0, `*`(X0)))), symbolic)); -1; `:=`(SXMean, ExpectedValue(JTerm)); 1; `:=`(SXVar, simplify(`/`(`*`(Variance(JTerm))...
 

 

 

`*`(S0, `*`(exp(`+`(`-`(`*`(`/`(1, 2), `*`(t, `*`(`^`(sigma, 2))))), `*`(sigma, `*`(`^`(t, `/`(1, 2)), `*`(_R)))))))
`+`(`-`(`*`(`/`(1, 2), `*`(t, `*`(`^`(sigma, 2))))), `-`(`*`(`/`(1, 2), `*`(t, `*`(`^`(eta, 2))))))
`+`(`*`(`^`(sigma, 2)), `*`(2, `*`(sigma, `*`(eta, `*`(rho)))), `*`(`^`(eta, 2))) (1.12)
 

This shows that the joint distribution of `*`(ln(`/`(`*`(ST, `*`(XT)), `*`(S0, `*`(X0)))), `*`(`~`, `*`(N(SXMean, sqrt(SXVol))))) 

> `:=`(STJ, `*`(S0, `*`(X0, `*`(exp(`+`(SXMean, `*`(sqrt(SXVar), `*`(sqrt(t), `*`(y))))))))); 1
 

`*`(S0, `*`(X0, `*`(exp(`+`(`-`(`*`(`/`(1, 2), `*`(t, `*`(`^`(sigma, 2))))), `-`(`*`(`/`(1, 2), `*`(t, `*`(`^`(eta, 2))))), `*`(`^`(`+`(`*`(`^`(sigma, 2)), `*`(2, `*`(sigma, `*`(eta, `*`(rho)))), `*`(... (1.13)
 

> `:=`(crval2, solve(STJ = K, y)); 1
 

`+`(`/`(`*`(`/`(1, 2), `*`(`+`(`*`(t, `*`(`^`(sigma, 2))), `*`(t, `*`(`^`(eta, 2))), `*`(2, `*`(ln(`/`(`*`(K), `*`(S0, `*`(X0))))))))), `*`(`^`(`+`(`*`(`^`(sigma, 2)), `*`(2, `*`(sigma, `*`(eta, `*`(r... (1.14)
 

> `:=`(QCall[2], `assuming`([`*`(exp(`+`(`-`(`*`(r[A], `*`(t))))), `*`(int(`/`(`*`(`+`(STJ, `-`(K)), `*`(exp(`+`(`-`(`*`(`/`(1, 2), `*`(`^`(y, 2)))))))), `*`(sqrt(`+`(`*`(2, `*`(Pi)))))), y = crval2 .. ...
`:=`(QCall[2], `assuming`([`*`(exp(`+`(`-`(`*`(r[A], `*`(t))))), `*`(int(`/`(`*`(`+`(STJ, `-`(K)), `*`(exp(`+`(`-`(`*`(`/`(1, 2), `*`(`^`(y, 2)))))))), `*`(sqrt(`+`(`*`(2, `*`(Pi)))))), y = crval2 .. ...
`:=`(QCall[2], `assuming`([`*`(exp(`+`(`-`(`*`(r[A], `*`(t))))), `*`(int(`/`(`*`(`+`(STJ, `-`(K)), `*`(exp(`+`(`-`(`*`(`/`(1, 2), `*`(`^`(y, 2)))))))), `*`(sqrt(`+`(`*`(2, `*`(Pi)))))), y = crval2 .. ...
`:=`(QCall[2], `assuming`([`*`(exp(`+`(`-`(`*`(r[A], `*`(t))))), `*`(int(`/`(`*`(`+`(STJ, `-`(K)), `*`(exp(`+`(`-`(`*`(`/`(1, 2), `*`(`^`(y, 2)))))))), `*`(sqrt(`+`(`*`(2, `*`(Pi)))))), y = crval2 .. ...
 

 

`*`(exp(`+`(`-`(`*`(r[A], `*`(t))))), `*`(`+`(`-`(`*`(`/`(1, 2), `*`(S0, `*`(X0, `*`(exp(`*`(sigma, `*`(t, `*`(eta, `*`(rho))))), `*`(erf(`+`(`/`(`*`(`/`(1, 4), `*`(`^`(2, `/`(1, 2)), `*`(`+`(`-`(`*`(...
`*`(exp(`+`(`-`(`*`(r[A], `*`(t))))), `*`(`+`(`-`(`*`(`/`(1, 2), `*`(S0, `*`(X0, `*`(exp(`*`(sigma, `*`(t, `*`(eta, `*`(rho))))), `*`(erf(`+`(`/`(`*`(`/`(1, 4), `*`(`^`(2, `/`(1, 2)), `*`(`+`(`-`(`*`(...
`*`(exp(`+`(`-`(`*`(r[A], `*`(t))))), `*`(`+`(`*`(`/`(1, 2), `*`(K)), `-`(`*`(`/`(1, 2), `*`(S0, `*`(X0, `*`(exp(`*`(sigma, `*`(t, `*`(eta, `*`(rho)))))))))), `*`(`/`(1, 2), `*`(K, `*`(erf(`+`(`/`(`*`...
`*`(exp(`+`(`-`(`*`(r[A], `*`(t))))), `*`(`+`(`*`(`/`(1, 2), `*`(K)), `-`(`*`(`/`(1, 2), `*`(S0, `*`(X0, `*`(exp(`*`(sigma, `*`(t, `*`(eta, `*`(rho)))))))))), `*`(`/`(1, 2), `*`(K, `*`(erf(`+`(`/`(`*`...
(1.15)
 

These are the values of Compo's Call and Put. Having obtained the closed-from solution, we can determine the option's sensitivity w.r.t correlation: 

> `:=`(DRho, diff(QCall[2], rho)); 1; plot(eval(DRho, [S0 = 10, K = 1100, t = 1, sigma = .25, eta = .18, r[B] = 0.3e-1, r[A] = 0.15e-1, X0 = 110]), rho = -.8 .. .8, title = [
`:=`(DRho, diff(QCall[2], rho)); 1; plot(eval(DRho, [S0 = 10, K = 1100, t = 1, sigma = .25, eta = .18, r[B] = 0.3e-1, r[A] = 0.15e-1, X0 = 110]), rho = -.8 .. .8, title = [
`:=`(DRho, diff(QCall[2], rho)); 1; plot(eval(DRho, [S0 = 10, K = 1100, t = 1, sigma = .25, eta = .18, r[B] = 0.3e-1, r[A] = 0.15e-1, X0 = 110]), rho = -.8 .. .8, title = [
 

 

`*`(exp(`+`(`-`(`*`(r[A], `*`(t))))), `*`(`+`(`-`(`*`(`/`(1, 2), `*`(S0, `*`(X0, `*`(sigma, `*`(t, `*`(eta, `*`(exp(`*`(sigma, `*`(t, `*`(eta, `*`(rho))))), `*`(erf(`+`(`/`(`*`(`/`(1, 4), `*`(`^`(2, `...
`*`(exp(`+`(`-`(`*`(r[A], `*`(t))))), `*`(`+`(`-`(`*`(`/`(1, 2), `*`(S0, `*`(X0, `*`(sigma, `*`(t, `*`(eta, `*`(exp(`*`(sigma, `*`(t, `*`(eta, `*`(rho))))), `*`(erf(`+`(`/`(`*`(`/`(1, 4), `*`(`^`(2, `...
`*`(exp(`+`(`-`(`*`(r[A], `*`(t))))), `*`(`+`(`-`(`*`(`/`(1, 2), `*`(S0, `*`(X0, `*`(sigma, `*`(t, `*`(eta, `*`(exp(`*`(sigma, `*`(t, `*`(eta, `*`(rho))))), `*`(erf(`+`(`/`(`*`(`/`(1, 4), `*`(`^`(2, `...
`*`(exp(`+`(`-`(`*`(r[A], `*`(t))))), `*`(`+`(`-`(`*`(`/`(1, 2), `*`(S0, `*`(X0, `*`(sigma, `*`(t, `*`(eta, `*`(exp(`*`(sigma, `*`(t, `*`(eta, `*`(rho))))), `*`(erf(`+`(`/`(`*`(`/`(1, 4), `*`(`^`(2, `...
`*`(exp(`+`(`-`(`*`(r[A], `*`(t))))), `*`(`+`(`-`(`*`(`/`(1, 2), `*`(S0, `*`(X0, `*`(sigma, `*`(t, `*`(eta, `*`(exp(`*`(sigma, `*`(t, `*`(eta, `*`(rho))))), `*`(erf(`+`(`/`(`*`(`/`(1, 4), `*`(`^`(2, `...
Plot_2d
 

As the graph shows, the correlation is significant valuation factor: negative correlation between the stock price and the exchange rate will increase the option premium, while positive correlation will push it lower. This is intuitive - positive correlation increases the volatility of joint distribution which leads to higher option premium. 

> `:=`(NumResCall[JPY], evalf(eval(QCall[2], [S0 = 10, K = 1100, t = 1, sigma = .25, eta = .12, rho = .6, r[B] = 0.3e-1, r[A] = 0.1e-1, X0 = 110]))); 1; `:=`(NumResPut[JPY], evalf(eval(QPut[2], [S0 = 10...
`:=`(NumResCall[JPY], evalf(eval(QCall[2], [S0 = 10, K = 1100, t = 1, sigma = .25, eta = .12, rho = .6, r[B] = 0.3e-1, r[A] = 0.1e-1, X0 = 110]))); 1; `:=`(NumResPut[JPY], evalf(eval(QPut[2], [S0 = 10...
`:=`(NumResCall[JPY], evalf(eval(QCall[2], [S0 = 10, K = 1100, t = 1, sigma = .25, eta = .12, rho = .6, r[B] = 0.3e-1, r[A] = 0.1e-1, X0 = 110]))); 1; `:=`(NumResPut[JPY], evalf(eval(QPut[2], [S0 = 10...
`:=`(NumResCall[JPY], evalf(eval(QCall[2], [S0 = 10, K = 1100, t = 1, sigma = .25, eta = .12, rho = .6, r[B] = 0.3e-1, r[A] = 0.1e-1, X0 = 110]))); 1; `:=`(NumResPut[JPY], evalf(eval(QPut[2], [S0 = 10...
 

 

156.7188135
136.9383365 (1.16)
 

Economy B 

The exposition we presented in previous case applies equally to the B-economy. However, from the B-economy point of view, we need to create a "mirror" image of what we have derived above 

If XT is an exchange rate to convert B-economy payoff into A-economy payoff, then we need an inverse of `/`(1, `*`(XT)) to convert A-economy payoff into B-economy payoff. We will apply this conversion to the drift-adjusted exchange rate process - XTP2 

> `:=`(YTP2, `/`(1, `*`(XTP2))); 1
 

`/`(1, `*`(X0, `*`(exp(`+`(`*`(`+`(`-`(r[B]), r[A], `-`(`*`(`/`(1, 2), `*`(`^`(eta, 2))))), `*`(t)), `*`(eta, `*`(`^`(t, `/`(1, 2)), `*`(`+`(`*`(rho, `*`(_R)), `*`(`^`(`+`(1, `-`(`*`(`^`(rho, 2)))), `... (2.1)
 

Let's take the expectations of both exchange rates under P measure 

> `:=`(EVX, ExpectedValue(XTP2)); 1; `:=`(EVY, ExpectedValue(YTP2)); 1
 

 

`*`(exp(`+`(`-`(`*`(r[B], `*`(t))), `*`(r[A], `*`(t)))), `*`(X0))
`/`(`*`(exp(`+`(`*`(r[B], `*`(t)), `-`(`*`(r[A], `*`(t))), `*`(t, `*`(`^`(eta, 2)))))), `*`(X0)) (2.2)
 

We see that they are not symmetric. This observation is known as Siegel Paradox and shows that under the same probability measure, the expectation of the forward exchange rate and its inverse are not identical. What does this mean in finance? Simply said: forward exchange rates are generally NOT unbiased estimates of future spot rates as the expectation cannot be true for both sides - economy A and economy B -  at the same time. It can satisfy one side or the other, but not both simultaneously.
As side observation, we can see that since YT process is convex, by Jensen's inequality:   `<`(`/`(1, `*`(`𝔼`[XT])), E[`/`(1, `*`(XT))])  for `<>`(eta, 0.)
 

 

How do we resolve this paradox? By change of measure    `implies`(R3, `+`(R3, `*`(eta, `*`(sqrt(t))))) 

 

> `:=`(YTP3, `/`(1, `*`(X0, `*`(exp(`+`(`*`(`+`(`-`(r[B]), r[A], `-`(`*`(`/`(1, 2), `*`(`^`(eta, 2))))), `*`(t)), `*`(eta, `*`(sqrt(t), `*`(`+`(R3, `*`(eta, `*`(sqrt(t))))))))))))); 1; `:=`(EVY2, Expect...
`:=`(YTP3, `/`(1, `*`(X0, `*`(exp(`+`(`*`(`+`(`-`(r[B]), r[A], `-`(`*`(`/`(1, 2), `*`(`^`(eta, 2))))), `*`(t)), `*`(eta, `*`(sqrt(t), `*`(`+`(R3, `*`(eta, `*`(sqrt(t))))))))))))); 1; `:=`(EVY2, Expect...
 

 

`/`(1, `*`(X0, `*`(exp(`+`(`*`(`+`(`-`(r[B]), r[A], `-`(`*`(`/`(1, 2), `*`(`^`(eta, 2))))), `*`(t)), `*`(eta, `*`(`^`(t, `/`(1, 2)), `*`(`+`(`*`(rho, `*`(_R)), `*`(`^`(`+`(1, `-`(`*`(`^`(rho, 2)))), `...
`/`(`*`(exp(`+`(`*`(r[B], `*`(t)), `-`(`*`(r[A], `*`(t)))))), `*`(X0)) (2.3)
 

Solving Siegel Paradox requires different probability measures - each applied to the particular process. The adapted processes under the probability transformation then becomes symmetric. 

We can now compare the expectations of both XTand `/`(1, `*`(XT)) 

> simplify(`+`(`/`(1, `*`(EVX)), `-`(EVY2))); 1
 

0 (2.4)
 

We see that they are now consistent  `𝔼`[XT] = E[`/`(1, `*`(XT))] and we can further verify that the process for the B-economy exchange rate when normalized by two market rates is martingale: 

We take the expectation of the A-economy money market fund converted into B-economy currency and discounted by B-economy market rate

Example:  JPY money market fund converted into US$ and discounted by the US$ market rate 

 

> `:=`(`#mover(mi(
 

`/`(1, `*`(X0)) (2.5)
 

>
 

As we can see, the process is now driftless,and the martingale conditions are satisfied. 

 

Conclusion 

In this example we have shown how foreign currency adjustments can be used efficiently to alter the option payoff in cross-border setup. The use of Maple significantly improves the efficiency of symbolic computation and leads to an elegant solution both in theoretical and practical levels. 

 

Legal Notice: The copyright for this application is owned by the author(s). Neither Maplesoft nor the author are responsible for any errors contained within and are not liable for any damages resulting from the use of this material.. This application is intended for non-commercial, non-profit use only. Contact the author for permission if you wish to use this application in for-profit activities.