У меня есть элегантный код от других участников для Монте-Карло (случайное блуждание) с использованием numpy. Однако в настоящее время объем, или стандартное отклонение, является предоставляемой константой. В идеале оно должно меняться в зависимости от этапа во времени. Есть ли способ адаптировать этот код, чтобы сделать «vol» функцией индекса numpy? Я мог бы сделать это с помощью цикла for, но я стараюсь сохранить его векторизованным из соображений производительности.
import numpy as np
def montecarlo_brownian(start_value, T_years, steps, vol, rate = 0, sims = 1000):
""" generate random walks from a starting value for Monte Carlo analysis
Args:
start_value (float): starting value for random walks
T_year (float): number of years in question
steps (int): substeps within each year
vol (float): annualized standard deviation (ie, implied volatility)
rate (float): risk free interest rate
sims (int): number of simulations to execute
Returns:
(np.array) columns of random walks
"""
times = np.linspace(0, T_years, steps+1)
dt = times[1] - times[0]
B = np.random.normal(0, np.sqrt(dt), size=(sims, steps)).T
S = np.exp((rate - vol ** 2/ 2) * dt + vol * B)
S = start_value * S.cumprod(axis=0)
return S
комментатор Джаред запросил образец логики цикла for. Я бы определил функцию
def get_vol(t):
pass
#some function that calculates vol based on how much time is left
затем используйте что-то вроде:
def monte_carlo_with_changing_vol(S0, r, T, num_sims, num_steps, volatility):
dt = T / num_steps
paths = np.zeros((num_sims, num_steps + 1))
paths[:, 0] = S0
for i in range(num_sims):
for j in range(1, num_steps + 1):
current_vol = vol(j)
paths[i, j] = paths[i, j - 1] * np.exp((r - 0.5 * current_vol ** 2) * dt + current_vol * np.sqrt(dt) * np.random.normal(0, 1))
return paths
Подробнее здесь: https://stackoverflow.com/questions/791 ... onte-carlo
Динамический ввод для заполнения массива Numpy без цикла for для Монте-Карло ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Динамический ввод для заполнения массива Numpy без цикла for для Монте-Карло
Anonymous » » в форуме Python - 0 Ответы
- 11 Просмотры
-
Последнее сообщение Anonymous
-