Full Ito Script
import random
import numpy as np
def generate(iterations, time=0, vol=0.1, init=0, generator=None):
def gen(): return random.normalvariate(0,1)
if generator == None:generator = gen
if not callable(time):
_time = time
def func(ans): return _time
time = func
if not callable(vol):
_vol = vol
def func2(ans):return _vol
vol = func2
ans = [init]
for i in range(iterations):
dt = time(ans)
cvol = vol(ans)
ans.append(ans[len(ans)-1]+dt + generator()*cvol)
pass
return ans
def generate_multiple(iterations, time, vol, init):
rng = np.random.default_rng(seed=42)
if not callable(time):
_time = time
def func(ans): return _time
time = func
if not callable(vol):
_vol = vol
def func2(ans):return _vol
vol = func2
means = [0 for p in init]
ans = [init]
for i in range(iterations):
dt = time(ans)
cvol = vol(ans)
samples = rng.multivariate_normal(mean=means, cov=cvol, size=1)
for item in samples:
last = ans[-1]
next = []
for index,val in enumerate(item):
next.append(last[index]+dt[index]+val.item())
pass
ans.append(next)
pass
pass
return ans
def brownian_bridge(iterations):
series = generate(iterations)
result = []
#return series
for i in range(len(series)):
result.append(series[i]-(i/iterations)*series[-1])
return result
test = generate_multiple(10, [0,0], [[1,0],[0,1]], [0,0])
'''from davinci.python import val
test = [{"value":p} for p in brownian_bridge(100)]
val.set('data', test)'''