Path: blob/master/src/FMNM/CF.py
1700 views
#!/usr/bin/env python31# -*- coding: utf-8 -*-2"""3Created on Mon Oct 7 17:57:19 201945@author: cantaro866"""78import numpy as np91011def cf_normal(u, mu=1, sig=2):12"""13Characteristic function of a Normal random variable14"""15return np.exp(1j * u * mu - 0.5 * u**2 * sig**2)161718def cf_gamma(u, a=1, b=2):19"""20Characteristic function of a Gamma random variable21- shape: a22- scale: b23"""24return (1 - b * u * 1j) ** (-a)252627def cf_poisson(u, lam=1):28"""29Characteristic function of a Poisson random variable30- rate: lam31"""32return np.exp(lam * (np.exp(1j * u) - 1))333435def cf_mert(u, t=1, mu=1, sig=2, lam=0.8, muJ=0, sigJ=0.5):36"""37Characteristic function of a Merton random variable at time t38mu: drift39sig: diffusion coefficient40lam: jump activity41muJ: jump mean size42sigJ: jump size standard deviation43"""44return np.exp(45t * (1j * u * mu - 0.5 * u**2 * sig**2 + lam * (np.exp(1j * u * muJ - 0.5 * u**2 * sigJ**2) - 1))46)474849def cf_VG(u, t=1, mu=0, theta=-0.1, sigma=0.2, kappa=0.1):50"""51Characteristic function of a Variance Gamma random variable at time t52mu: additional drift53theta: Brownian motion drift54sigma: Brownian motion diffusion55kappa: Gamma process variance56"""57return np.exp(t * (1j * mu * u - np.log(1 - 1j * theta * kappa * u + 0.5 * kappa * sigma**2 * u**2) / kappa))585960def cf_NIG(u, t=1, mu=0, theta=-0.1, sigma=0.2, kappa=0.1):61"""62Characteristic function of a Normal Inverse Gaussian random variable at time t63mu: additional drift64theta: Brownian motion drift65sigma: Brownian motion diffusion66kappa: Inverse Gaussian process variance67"""68return np.exp(69t * (1j * mu * u + 1 / kappa - np.sqrt(1 - 2j * theta * kappa * u + kappa * sigma**2 * u**2) / kappa)70)717273def cf_Heston(u, t, v0, mu, kappa, theta, sigma, rho):74"""75Heston characteristic function as proposed in the original paper of Heston (1993)76"""77xi = kappa - sigma * rho * u * 1j78d = np.sqrt(xi**2 + sigma**2 * (u**2 + 1j * u))79g1 = (xi + d) / (xi - d)80cf = np.exp(811j * u * mu * t82+ (kappa * theta) / (sigma**2) * ((xi + d) * t - 2 * np.log((1 - g1 * np.exp(d * t)) / (1 - g1)))83+ (v0 / sigma**2) * (xi + d) * (1 - np.exp(d * t)) / (1 - g1 * np.exp(d * t))84)85return cf868788def cf_Heston_good(u, t, v0, mu, kappa, theta, sigma, rho):89"""90Heston characteristic function as proposed by Schoutens (2004)91"""92xi = kappa - sigma * rho * u * 1j93d = np.sqrt(xi**2 + sigma**2 * (u**2 + 1j * u))94g1 = (xi + d) / (xi - d)95g2 = 1 / g196cf = np.exp(971j * u * mu * t98+ (kappa * theta) / (sigma**2) * ((xi - d) * t - 2 * np.log((1 - g2 * np.exp(-d * t)) / (1 - g2)))99+ (v0 / sigma**2) * (xi - d) * (1 - np.exp(-d * t)) / (1 - g2 * np.exp(-d * t))100)101return cf102103104