Имитация цены акций на основе заданного уравнения в Python - PullRequest
0 голосов
/ 31 марта 2020

Как я могу сгенерировать временной ряд цены, используя следующее уравнение:

p (t) = p0 (1 + A * sin (ωt + 0.5η (t)))

, где t в диапазоне от 0 до 1 в 1000 временных шагах, p0 = 100 , A = 0,1 и ω = 100 . η (t) - это последовательность iid гауссовых случайных величин с нулевым средним и единичной дисперсией .

I использовать код для генерации цены следующим образом, но это не так, как требуется. Поэтому мне нужна помощь от сообщества. Заранее спасибо.

from scipy.stats import norm
import numpy as np
import matplotlib.pyplot as plt
mu = 0
sigma = 1
np.random.seed(2020)

dist = norm(loc = mu,scale=sigma)
sample = dist.rvs(size = 1000)
stock_price = np.exp(sample.cumsum())
print(stock_price)
plt.plot(stock_price)
plt.xlabel("Day")
plt.ylabel("Price")
plt.title("Simulated Stock price")
plt.show()

Ответы [ 2 ]

1 голос
/ 31 марта 2020

Если я ничего не пропустил, это должно сработать

import numpy as np
import matplotlib.pyplot as plt

n_t = np.random.normal(0, 1, 1000)
t = np.arange(0, 1, 1/1000)

p_0, A, w = 100, 0.1, 100
ts = p_0 * (1 + A * np.sin(w * t + 0.5 * n_t))

plt.plot(t, ts)
plt.xlabel("Day")
plt.ylabel("Price")
plt.show()

, что дает сюжет enter image description here

0 голосов
/ 31 марта 2020

Моя пробная версия, не уверен, что она правильная, пожалуйста, дайте мне несколько комментариев.

import numpy as np
import math
np.random.seed(2020)

mu = 0
sigma = 1
dt = 0.01
p0 = 100
A = 0.1
w = 100
N = 1000
for t in np.linspace(0, 1, 1000):
    X = np.random.normal(mu * dt, sigma* np.sqrt(dt), N)
    X = np.cumsum(X)
    pt = p0 * (1+ A*np.sin(w*t + 0.5*X))
#     print(pt)
plt.plot(pt)
plt.xlabel("Day")
plt.ylabel("Price")
plt.title("Simulated Stock price")
plt.show()

Out:

enter image description here

...