Exemple #1
0
def CarrBSCV(n, s0, K, T, model, a=100):
    '''
    input model must have vol() implemented
    '''
    s0, K, T, a = map(float, (s0, K, T, a))
    k = math.log(K)
    b = 1.5
    r = model.r

    c1, c2 = model.cumulants(1)[:2]
    modelCV = BSCV(c1, c2)
    modelCV.setIR(r)
    '''    
    intgDiff   = lambda u: ((cmath.exp(1j*(-u*k + (u-(b+1)*1j)*math.log(s0)))*math.exp(-r*T)     \
                    *model.chf(u - (b+1)*1j, T)     \
                            - cmath.exp(1j*(-u*k + (u-(b+1)*1j)*(math.log(s0) )))*math.exp(-r*T)   \
                    *modelCV.chf(u - (b+1)*1j, T))    \
                    /(b**2 + b - u**2 + (2*b+1)*u*1j)).real
    '''

    intgDiff = lambda u: (
        cmath.exp(1j * (-u * k +
                        (u -
                         (b + 1) * 1j) * math.log(s0))) * math.exp(-r * T) *
        (model.chf(u - (b + 1) * 1j, T) - modelCV.chf(u - (b + 1) * 1j, T)) /
        (b**2 + b - u**2 + (2 * b + 1) * u * 1j)).real

    return math.exp(-b * k) * fnc.trap(
        n, intgDiff, 0, a) / math.pi + modelCV.callforCarr(s0, K, T)
Exemple #2
0
def Lewis(n, s0, K, T, model, a=100):

    s0, K, T = map(float, [s0, K, T])
    r = model.r

    integrand = lambda u: (cmath.exp(u * (math.log(s0 / K)) *
                                     (1j) - 0.5 * r * T) * model.chf(
                                         u - 0.5j, T) / (u**2 + 0.25)).real
    return s0 - math.sqrt(s0 * K) * math.exp(-0.5 * r * T) * fnc.trap(
        n, integrand, 0, a) / math.pi
Exemple #3
0
def Carr(n, s0, K, T, model, a=100):
    s0, K, T, a = map(float, (s0, K, T, a))
    k = math.log(K)
    b = 1.5
    r = model.r

    integrand = lambda u: (cmath.exp(1j * (-u * k +
                                           (u - (b + 1) * 1j) * math.log(s0)))
                           * math.exp(-r * T) * model.chf(u -
                                                          (b + 1) * 1j, T) /
                           (b**2 + b - u**2 + (2 * b + 1) * u * 1j)).real

    return math.exp(-b * k) * fnc.trap(n, integrand, 0, a) / math.pi
Exemple #4
0
def CarrRealBSCV(n, s0, K, T, model, a=100):
    '''
    input model must have vol() implemented
    '''
    s0, K, T, a = map(float, (s0, K, T, a))
    k = math.log(K)
    b = 1.5
    r = model.r

    modelCV = BS(model.vol())
    modelCV.setIR(r)

    intgDiff = lambda u: (
        cmath.exp(1j * (-u * k +
                        (u -
                         (b + 1) * 1j) * math.log(s0))) * math.exp(-r * T) *
        (model.chf(u - (b + 1) * 1j, T) - modelCV.chf(u - (b + 1) * 1j, T)) /
        (b**2 + b - u**2 + (2 * b + 1) * u * 1j)).real

    return math.exp(-b * k) * fnc.trap(n, intgDiff, 0,
                                       a) / math.pi + modelCV.call(s0, K, T)