コード例 #1
0
def black_digital_delta(forward_value, strike_value, implied_vol_value,
                        time_value, is_call_bool):
    """
    Black-76 delta sensitivity for digital payoff.

    :param float forward_value: forward price of underlying at exercise date
    :param float strike_value: strike price
    :param float implied_vol_value: volatility of underlying price
    :param float time_value: year fraction until exercise date
    :param boolean is_call_bool: call -> True, put -> False
    :return: float

    """

    sigma, fms, d0, d1 = _black_param(forward_value, strike_value,
                                      implied_vol_value, time_value)

    if sigma == 0.0:
        return 0.0

    if is_call_bool:
        # call
        return normal_density(d1) / (sigma * forward_value)
    else:
        # put
        return -normal_density(-d1) / (sigma * forward_value)
コード例 #2
0
ファイル: bachelier.py プロジェクト: sonntagsgesicht/putcall
def bachelier(forward_value, strike_value, implied_vol_value, time_value,
              is_call_bool):
    """
    Bachelier formula (Black formula for normal underlying distribution).

    :param float forward_value: forward price of underlying at exercise date
    :param float strike_value: strike price
    :param float implied_vol_value: volatility of underlying price
    :param float time_value: year fraction until exercise date
    :param boolean is_call_bool: call -> True, put -> False
    :return: float

    """

    sigma, fms, d = _bachelier_param(forward_value, strike_value,
                                     implied_vol_value, time_value)

    if sigma == 0.0:
        return option_payoff(forward_value, strike_value, is_call_bool)

    # call
    # call_value = fms * normal_cdf(d) + exp(-d ** 2 / 2) * sigma / sqrt(2 * pi)  # intern version
    call_value = fms * normal_cdf(d) + sigma * normal_density(d)
    put_value = -fms * normal_cdf(-d) + sigma * normal_density(d)
    return call_value if is_call_bool else call_value - fms  # put
コード例 #3
0
def black_straddle_vega(forward_value, strike_value, implied_vol_value,
                        time_value, is_call_bool):
    """
    Black-76 vega sensitivity for straddle payoff.

    :param float forward_value: forward price of underlying at exercise date
    :param float strike_value: strike price
    :param float implied_vol_value: volatility of underlying price
    :param float time_value: year fraction until exercise date
    :param boolean is_call_bool: call -> True, put -> False
    :return: float

    """

    sigma, fms, d0, d1 = _black_param(forward_value, strike_value,
                                      implied_vol_value, time_value)

    if sigma == 0.0:
        return 0.0

    return 2.0 * forward_value * sqrt(time_value) * normal_density(d1)
コード例 #4
0
ファイル: bachelier.py プロジェクト: sonntagsgesicht/putcall
def bachelier_gamma(forward_value, strike_value, implied_vol_value, time_value,
                    is_call_bool):
    """
    gamma sensitivity for Bachelier formula.

    :param float forward_value: forward price of underlying at exercise date
    :param float strike_value: strike price
    :param float implied_vol_value: volatility of underlying price
    :param float time_value: year fraction until exercise date
    :param boolean is_call_bool: call -> True, put -> False
    :return: float

    """

    sigma, fms, d = _bachelier_param(forward_value, strike_value,
                                     implied_vol_value, time_value)

    if sigma == 0.0:
        return 0.0

    return normal_density(d) / sigma
コード例 #5
0
def black_digital_vega(forward_value, strike_value, implied_vol_value,
                       time_value, is_call_bool):
    """
    Black-76 vega sensitivity for digital payoff.

    :param float forward_value: forward price of underlying at exercise date
    :param float strike_value: strike price
    :param float implied_vol_value: volatility of underlying price
    :param float time_value: year fraction until exercise date
    :param boolean is_call_bool: call -> True, put -> False
    :return: float

    """

    sigma, fms, d0, d1 = _black_param(forward_value, strike_value,
                                      implied_vol_value, time_value)

    if sigma == 0.0:
        return 0.0

    # call
    call_value = d1 * normal_density(d0) / implied_vol_value
    return call_value if is_call_bool else -call_value  # put
コード例 #6
0
ファイル: bachelier.py プロジェクト: sonntagsgesicht/putcall
def bachelier_digital_vega(forward_value, strike_value, implied_vol_value,
                           time_value, is_call_bool):
    """
    vega sensitivity for Bachelier formula for digital option.

    :param float forward_value: forward price of underlying at exercise date
    :param float strike_value: strike price
    :param float implied_vol_value: volatility of underlying price
    :param float time_value: year fraction until exercise date
    :param boolean is_call_bool: call -> True, put -> False
    :return: float

    """

    sigma, fms, d = _bachelier_param(forward_value, strike_value,
                                     implied_vol_value, time_value)

    if sigma == 0.0:
        return 0.0

    # call
    call_value = -d * normal_density(d) / implied_vol_value
    return call_value if is_call_bool else -call_value  # put