2016-03-18 4 views
1

Я прогнозирую цену акции St1, начинающуюся с 'Stt = 10' в момент времени t. Даты не важны. Я хочу найти следующие 100 цены, используя следующую формулу:Использование R для цикла для создания временного ряда

St1 <- Stt*exp((r-0.5*sigma^2)*T/n+sigma*E*sqrt(T/n)) 

Так я начинаю с 10, а затем понадобятся следующие 100 значений и поместить его в data.frame или что-то легко. Как мне это сделать? Я застрял, пытаясь это ...

Stt = 10 
r = 0.15 
sigma = 0.2 
T = 1 
n = 100 
E = 0.15 

St1 = Stt 
for (i in 1:100) 
{ 
    St1[i] <- Stt*exp((r-0.5*sigma^2)*T/n+sigma*E*sqrt(T/n)) 
} 
+0

Пожалуйста, добавьте воспроизводимый пример – Thierry

ответ

1

Один из способов это

r = 0.15 
sigma = 0.2 
T = 1 
n = 100 
E = 0.15 

Stt<- rep(NA,n) # preallocate 
Stt[1] <- 10 
for (i in 2:100) 
{ 
    Stt[i] <- Stt[i-1]*exp((r-0.5*sigma^2)*T/n+sigma*E*sqrt(T/n)) 
} 

Без for петли, и для того, чтобы использовать rnorm для E, этот код может работать:

# for fixed E of length one 
Stt <- cumprod(c(10,rep(exp((r-0.5*sigma^2)*T/n+sigma*E*sqrt(T/n)), n-1))) 

# for random vector E 
E <- rnorm(n-1, mean=0.15, sd=0.01) 
Stt <- cumprod(c(10, exp((r-0.5*sigma^2)*T/n+sigma*E*sqrt(T/n)))) 
+0

Работает как шарм, tnx много! – cJc

+0

Что делать, если я хотел сделать E нормальным случайным переменным? rnorm (100) - дает мне сообщение об ошибке «количество элементов для замены не кратно замещающей длины» – cJc

+0

В формуле замените E на E [i], так как E - вектор. Кстати, я бы рекомендовал вам векторизовать всю формулу. – jlesuffleur