PyMPDATA_examples.utils.financial_formulae.asian_option

Closed-forms for geometric Asian options are taken from: Derivatives Markets Appendix 19A

 1# pylint: disable=line-too-long
 2"""
 3Closed-forms for geometric Asian options are taken from:
 4[Derivatives Markets Appendix 19A](https://media.pearsoncmg.com/ph/bp/bridgepages/teamsite/mcdonald/McDonald-web-19-A.pdf)
 5"""
 6
 7import numpy as np
 8
 9from .Black_Scholes_1973 import c_euro_with_dividend, p_euro_with_dividend
10
11# for fun in (c_euro_with_dividend, p_euro_with_dividend):
12#     locals()['geometric_asian_average_price_'+fun.__name__[0]] = lambda **args: fun(
13#         **{key:value for key, value in args.items() if key not in ('sgma', 'dividend_yield')},
14#         sgma=args['sgma']/np.sqrt(3),
15#         dividend_yield=0.5*(args['r'] + args['dividend_yield'] + args['sgma']**2/6),
16#     )
17
18
19def geometric_asian_average_price_c(S, K, T, r, sgma, dividend_yield):
20    return c_euro_with_dividend(
21        S=S,
22        K=K,
23        T=T,
24        r=r,
25        sgma=sgma / np.sqrt(3),
26        dividend_yield=0.5 * (r + dividend_yield + sgma**2 / 6),
27    )
28
29
30def geometric_asian_average_price_p(S, K, T, r, sgma, dividend_yield):
31    return p_euro_with_dividend(
32        S=S,
33        K=K,
34        T=T,
35        r=r,
36        sgma=sgma / np.sqrt(3),
37        dividend_yield=0.5 * (r + dividend_yield + sgma**2 / 6),
38    )
39
40
41def geometric_asian_average_strike_c(S, K, T, r, sgma, dividend_yield):
42    return c_euro_with_dividend(
43        S=S,
44        K=K,
45        T=T,
46        dividend_yield=dividend_yield,
47        sgma=sgma * np.sqrt(T / 3),
48        r=0.5 * (r + dividend_yield + sgma**2 / 6),
49    )
50
51
52def geometric_asian_average_strike_p(S, K, T, r, sgma, dividend_yield):
53    return p_euro_with_dividend(
54        S=S,
55        K=K,
56        T=T,
57        dividend_yield=dividend_yield,
58        sgma=sgma * np.sqrt(T / 3),
59        r=0.5 * (r + dividend_yield + sgma**2 / 6),
60    )
def geometric_asian_average_price_c(S, K, T, r, sgma, dividend_yield):
20def geometric_asian_average_price_c(S, K, T, r, sgma, dividend_yield):
21    return c_euro_with_dividend(
22        S=S,
23        K=K,
24        T=T,
25        r=r,
26        sgma=sgma / np.sqrt(3),
27        dividend_yield=0.5 * (r + dividend_yield + sgma**2 / 6),
28    )
def geometric_asian_average_price_p(S, K, T, r, sgma, dividend_yield):
31def geometric_asian_average_price_p(S, K, T, r, sgma, dividend_yield):
32    return p_euro_with_dividend(
33        S=S,
34        K=K,
35        T=T,
36        r=r,
37        sgma=sgma / np.sqrt(3),
38        dividend_yield=0.5 * (r + dividend_yield + sgma**2 / 6),
39    )
def geometric_asian_average_strike_c(S, K, T, r, sgma, dividend_yield):
42def geometric_asian_average_strike_c(S, K, T, r, sgma, dividend_yield):
43    return c_euro_with_dividend(
44        S=S,
45        K=K,
46        T=T,
47        dividend_yield=dividend_yield,
48        sgma=sgma * np.sqrt(T / 3),
49        r=0.5 * (r + dividend_yield + sgma**2 / 6),
50    )
def geometric_asian_average_strike_p(S, K, T, r, sgma, dividend_yield):
53def geometric_asian_average_strike_p(S, K, T, r, sgma, dividend_yield):
54    return p_euro_with_dividend(
55        S=S,
56        K=K,
57        T=T,
58        dividend_yield=dividend_yield,
59        sgma=sgma * np.sqrt(T / 3),
60        r=0.5 * (r + dividend_yield + sgma**2 / 6),
61    )