У меня есть элегантный код от других участников для Монте-Карло (случайное блуждание) с использованием броуновского движения. Однако в настоящее время объем, или стандартное отклонение, является предоставляемой константой. В идеале он должен варьироваться в зависимости от этапа во времени и на основе абсолютного уровня. Есть ли способ адаптировать этот код, чтобы сделать 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
Подробнее здесь: https://stackoverflow.com/questions/791 ... l-in-numpy
Добавить динамическую дисперсию в модель Монте-Карло в numpy ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Динамический ввод для заполнения массива Numpy без цикла for для Монте-Карло
Anonymous » » в форуме Python - 0 Ответы
- 15 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Динамический ввод для заполнения массива Numpy без цикла for для Монте-Карло
Anonymous » » в форуме Python - 0 Ответы
- 11 Просмотры
-
Последнее сообщение Anonymous
-