Python for Finance: Analyze Big Financial Data

(Elle) #1

systematically:


In  [ 62 ]: func_list   =   [‘f_py’,    ‘f_np’, ‘f_nb’]
data_list = 3 * [‘I, J’]
In [ 63 ]: perf_comp_data(func_list, data_list)
Out[63]: function: f_nb, av. time sec: 0.02022, relative: 1.0
function: f_np, av. time sec: 1.67494, relative: 82.8
function: f_py, av. time sec: 15.82375, relative: 782.4

The Numba version of the nested loop implementation is by far the fastest; much faster


even than the NumPy vectorized version. The pure Python version is much slower than the


other two versions.


QUICK WINS

Many approaches for performance improvements (of numerical algorithms) involve considerable effort. With

Python and Numba you have an approach available that involves only the smallest effort possible — in general,

importing the library and a single additional line of code. It does not work for all kinds of algorithms, but it is

often worth a (quick) try and sometimes indeed yields a quick win.

Binomial Option Pricing


The previous section uses Monte Carlo simulation to value European call options, using a


parallel computing approach. Another popular numerical method to value options is the


binomial option pricing model pioneered by Cox, Ross, and Rubinstein (1979). In this


model, as in the Black-Scholes-Merton setup, there is a risky asset, an index or stock, and


a riskless asset, a bond. As with Monte Carlo, the relevant time interval from today until


the maturity of the option is divided into generally equidistant subintervals, t. Given an


index level at time s of Ss, the index level at t = s + t is given by St = Ss · m, where m is


chosen randomly from from {u,d} with as well as . r is


the constant, riskless short rate. The risk-neutral probability for an up-movement is given


as .


Consider that a parameterization for the model is given as follows:


In  [ 64 ]: #   model   &   option  parameters
S0 = 100. # initial index level
T = 1. # call option maturity
r = 0.05 # constant short rate
vola = 0.20 # constant volatility factor of diffusion

#   time    parameters
M = 1000 # time steps
dt = T / M # length of time interval
df = exp(-r * dt) # discount factor per time interval

#   binomial    parameters
u = exp(vola * sqrt(dt)) # up-movement
d = 1 / u # down-movement
q = (exp(r * dt) - d) / (u - d) # martingale probability

An implementation of the binomial algorithm for European options consists mainly of


these parts:


Index level simulation


Simulate step by step the index levels.


Inner value calculation


Calculate the inner values at maturity and/or at every time step.

Free download pdf