Example #1
0
def undiscounted_black(F, K, sigma, t, flag):
    """Calculate the **undiscounted** Black option price.

    :param F: underlying futures price
    :type F: float
    :param K: strike price
    :type K: float
    :param sigma: annualized standard deviation, or volatility
    :type sigma: float
    :param t: time to expiration in years
    :type t: float   

    >>> F = 100
    >>> K = 100
    >>> sigma = .2
    >>> flag = 'c'
    >>> t = .5
    >>> undiscounted_black(F, K, sigma, t, flag)
    5.637197779701664
    
    """

    q = binary_flag[flag]
    F = float(F)
    K = float(K)
    sigma = float(sigma)
    t = float(t)

    return lets_be_rational.black(F, K, sigma, t, q)
Example #2
0
def undiscounted_black(F, K, sigma, t, flag):

    """Calculate the **undiscounted** Black option price.

    :param F: underlying futures price
    :type F: float
    :param K: strike price
    :type K: float
    :param sigma: annualized standard deviation, or volatility
    :type sigma: float
    :param t: time to expiration in years
    :type t: float   

    >>> F = 100
    >>> K = 100
    >>> sigma = .2
    >>> flag = 'c'
    >>> t = .5
    >>> undiscounted_black(F, K, sigma, t, flag)
    5.637197779701664
    
    """

    q = binary_flag[flag]
    F = float(F)
    K = float(K)
    sigma = float(sigma)
    t = float(t)
    
    return lets_be_rational.black(F, K, sigma, t, q)
def black_scholes_merton(flag, S, K, t, r, sigma, q):

    """Return the Black-Scholes-Merton option price.

    :param S: underlying asset price
    :type S: float
    :param K: strike price
    :type K: float
    :param sigma: annualized standard deviation, or volatility
    :type sigma: float
    :param t: time to expiration in years
    :type t: float
    :param r: risk-free interest rate
    :type r: float
    :param q: annualized continuous dividend rate
    :type q: float 

    From Espen Haug, The Complete Guide To Option Pricing Formulas
    Page 4

    >>> S=100
    >>> K=95
    >>> q=.05
    >>> t = 0.5
    >>> r = 0.1
    >>> sigma = 0.2

    >>> p_published_value = 2.4648
    >>> p_calc = black_scholes_merton('p', S, K, t, r, sigma, q)
    >>> abs(p_published_value - p_calc) < 0.0001
    True
    
    >>> c1 = bsm_call(S, K, t, r, sigma, q)
    >>> c2 = black_scholes_merton('c', S, K, t, r, sigma, q)
    >>> abs(c1-c2) < .0001
    True
    """
    
    S = S * numpy.exp((r-q)*t)
    p = black(S, K, sigma, t, binary_flag[flag])
    conversion_factor = numpy.exp(-r*t)
    return p * conversion_factor
_q = [-1 if random.randint(0, 1) == 0 else 1 for _ in range(TestCases)]

data = {}
data['input'] = []
data['output'] = []

for i in range(TestCases):
    F = _F[i]
    K = _K[i]
    sigma = _sigma[i]
    T = _T[i]
    q = _q[i]
    z = _z[i]
    N = _N[i]

    black = lets_be_rational.black(F, K, sigma, T, q)
    iv = lets_be_rational.implied_volatility_from_a_transformed_rational_guess(
        black, F, K, T, q)
    ivi = lets_be_rational.implied_volatility_from_a_transformed_rational_guess_with_limited_iterations(
        black, F, K, T, q, N)

    x = _x[i]
    s = _s[i]
    nblack = lets_be_rational.normalised_black(x, s, q)
    nblackcall = lets_be_rational.normalised_black_call(x, s)
    niv = lets_be_rational.normalised_implied_volatility_from_a_transformed_rational_guess(
        nblack, x, q)
    nivi = lets_be_rational.normalised_implied_volatility_from_a_transformed_rational_guess_with_limited_iterations(
        nblack, x, q, N)
    vega = lets_be_rational.normalised_vega(x, s)
    norm_cdf = lets_be_rational.norm_cdf(z)

data = {}
data['input'] = []
data['output'] = []

for i in range(TestCases):
    F = _F[i]
    K = _K[i]
    sigma = _sigma[i]
    T = _T[i]
    q = _q[i]
    z = _z[i]
    N = _N[i]

    black = lets_be_rational.black(F, K, sigma, T, q)
    iv = lets_be_rational.implied_volatility_from_a_transformed_rational_guess(black, F, K, T, q)
    ivi = lets_be_rational.implied_volatility_from_a_transformed_rational_guess_with_limited_iterations(black, F, K, T, q, N)

    x = _x[i]
    s = _s[i]
    nblack = lets_be_rational.normalised_black(x, s, q)
    nblackcall = lets_be_rational.normalised_black_call(x, s)
    niv = lets_be_rational.normalised_implied_volatility_from_a_transformed_rational_guess(nblack, x, q)
    nivi = lets_be_rational.normalised_implied_volatility_from_a_transformed_rational_guess_with_limited_iterations(nblack, x, q, N)
    vega = lets_be_rational.normalised_vega(x, s)
    norm_cdf = lets_be_rational.norm_cdf(z)

    data['input'].append({'F':F,
                          'K':K,
                          'sigma':sigma,