Ich habe die Standard Monte-Carlo-Simulation implementiert und muss dies durch die lokale Volatilität ersetzen.
Ich hatte eine feste volatilität die ich mit stdev gesetzt habe.
Ich muss aber jetzt die konstante volatilität durch (stdev+ 0.001*S_{t}) ersetzen S_{t} sind die Werte aus data.
import numpy as np
import pandas as pd
from pandas_datareader import data as wb
import matplotlib as mlp
import matplotlib.pyplot as plt
from scipy.stats import norm
import statsmodels.api as sm
import pylab
ticker = 'LHA.DE'
data = pd.DataFrame()
data[ticker] = wb.DataReader(ticker, data_source='yahoo', start='2018-4-1', end='2019-4-1')['Adj Close']
log_returns = np.log(1 + data.pct_change())
log_returns.tail()
u = log_returns.mean()
u
var = log_returns.var()
var
drift = u - (0.5 * var)
drift
stdev = log_returns.std()
stdev
type(drift)
type(stdev)
np.array(drift)
drift.values
stdev.values
norm.ppf(0.95)
x = np.random.rand(10, 2)
x
norm.ppf(x)
Z = norm.ppf(np.random.rand(10,2))
Z
## m=1000
t_intervals = 252
iterations = 1000
daily_returns = np.exp(drift.values + stdev.values * norm.ppf(np.random.rand(t_intervals, iterations)))
daily_returns
S0 = data.iloc[-1]
S0
price_list = np.zeros_like(daily_returns)
price_list
price_list[0]
price_list[0] = S0
price_list
for t in range(1, t_intervals):
price_list[t] = price_list[t - 1] * daily_returns[t]
price_list
Code: Alles auswählen