def random_empty_book(maturity, dimension, rate, drift, volatility, seed=None): tf.random.set_seed(seed) rate = float(rate) drift = _fit_to_dimension(dimension, drift) volatility = _fit_to_dimension(dimension, volatility) # scale diffusion to have row norms equal to volatility diffusion = tf.random.uniform((dimension, dimension), minval=-1, maxval=1) norm = tf.linalg.norm(diffusion, axis=1) diffusion *= (volatility / norm)[:, tf.newaxis] init_instruments = _fit_to_dimension(dimension, 100.0) init_numeraire = tf.constant([1.0], FLOAT_DTYPE) instrument_simulator = simulators.GBM(rate, drift, diffusion) numeraire_simulator = simulators.ConstantBankAccount(rate) book = books.DerivativeBook( maturity, instrument_simulator, numeraire_simulator) return init_instruments, init_numeraire, book
def random_basket_book(maturity, dimension, volatility, seed=None): tf.random.set_seed(seed) volatility = _fit_to_dimension(dimension, volatility) spot = strike = 1.0 # scale diffusion to have row norms equal to volatility diffusion = tf.random.uniform((dimension, dimension), minval=-1, maxval=1) norm = tf.linalg.norm(diffusion, axis=1) diffusion *= (volatility / norm)[:, tf.newaxis] init_instruments = _fit_to_dimension(dimension, spot) init_numeraire = tf.constant([1.0], FLOAT_DTYPE) instrument_simulator = simulators.BrownianMotion(diffusion) numeraire_simulator = simulators.ConstantBankAccount(0.0) book = books.BasketBook( maturity, instrument_simulator, numeraire_simulator) weights = tf.random.uniform((dimension, )) derivative = derivatives.BachelierBasketCall( maturity, strike, diffusion, weights) book.add_derivative(derivative, 0, 1.0) return init_instruments, init_numeraire, book
cost = False spot = 1 strike = 1 timesteps = 14 sigma = 0.2 maturity = timesteps / 250 if cost: instrument_simulator = simulators.GBM(0.0, 0.0, [[sigma]]) derivative = derivatives.PutCall(maturity, strike, 0.0, sigma, 1) else: instrument_simulator = BrownianMotion(sigma) derivative = BachelierBinary(maturity, strike, sigma) numeraire_simulator = simulators.ConstantBankAccount(0.0) book = books.DerivativeBook(maturity, instrument_simulator, numeraire_simulator) book.add_derivative(derivative, 0, 1.0) init_instruments = tf.constant([spot], FLOAT_DTYPE) init_numeraire = tf.constant([1.0], FLOAT_DTYPE) driver = utils.HedgeDriver( timesteps=timesteps, frequency=0, # no need for frequency for non-path dependent derivatives. init_instruments=init_instruments, init_numeraire=init_numeraire, book=book,