Function rainbow_2colour(S1, S2, K, t, r, q1, q2, v1, v2, rho) ' Calculates the price of a (two-coloured rainbow) option delivering the best of two risky assets or cash v = Sqr(v1 ^ 2 + v2 ^ 2 - 2 * v1 * v2 * rho) rho1 = (rho * v2 - v1) / v rho2 = (rho * v1 - v2) / v X1 = d_1(S1, K, t, r, q1, v1) X2 = d_1(S2, K, t, r, q2, v2) Y1 = d_1(S1, S2, t, q2, q1, v) Y2 = d_1(S2, S1, t, q1, q2, v) part1 = S1 * Exp(-q1 * t) * (Gauss(Y1) - Henery(-X1, Y1, rho1)) part2 = S2 * Exp(-q2 * t) * (Gauss(Y2) - Henery(-X2, Y2, rho2)) part3 = K * Exp(-r * t) * Henery(-X1 + v1 * Sqr(t), -X2 + v2 * Sqr(t), rho) rainbow_2colour = part1 + part2 + part3 End Function Function rainbow_bestof2(S1, S2, t, q1, q2, v1, v2, rho) v = Sqr(v1 ^ 2 + v2 ^ 2 - 2 * v1 * v2 * rho) rho1 = (rho * v2 - v1) / v rho2 = (rho * v1 - v2) / v Y1 = d_1(S1, S2, t, q2, q1, v) Y2 = d_1(S2, S1, t, q1, q2, v) part1 = S1 * Exp(-q1 * t) * Gauss(Y1) part2 = S2 * Exp(-q2 * t) * Gauss(Y2) rainbow_bestof2 = part1 + part2 End Function