"""
gbm_sim.py
"""
import numpy as np
class GBM(object):
'''
classdocs
'''
def __init__(self, count_path=10, years=1):
S0 = 100.
r = 0.05
sigma = 0.50
T = 1
N = 252*years
i = count_path
self.path_ = self.gen_paths(S0, r, sigma, T, N, i)
def get_path(self):
return self.path_
def gen_paths(self, S0, r, sigma, T, M, I):
"""
Yves Hilpisch - Python for Finance
"""
np.random.seed(3773)
dt = float(T) / M
paths = np.zeros((M + 1, I), np.float64)
paths[0] = S0
for t in range(1, M + 1):
rand = np.random.standard_normal(I)
paths[t] = paths[t - 1] * np.exp((r - 0.5 * sigma ** 2) * dt +
sigma * np.sqrt(dt) * rand)
return paths
"""
run.py
"""
import pandas as pd
import matplotlib.pyplot as plt
from forecasting.gbm_sim import GBM
if __name__ == '__main__':
pN = 5
yN = 1
gbm = GBM(
count_path=pN,
years = yN
).get_path()
df = pd.DataFrame.from_records(gbm)
df.plot(title=f'{pN} Geometric Brownian Motions ({yN} Years)')
plt.show()