Я моделирую азиатский вариант (производную от финансовых инструментов), используя R. Для этой задачи необходимо смоделировать случайные числа и какой-то случайный обход. Результаты должны быть чрезвычайно точными.
Таким образом, n = 2 * 10 ^ 8 путей и 360 промежуточных точек должны быть рассмотрены. Это составляет 2 * 10 ^ 8 * 360 случайных чисел, которые должны быть сгенерированы. Это явно превышает максимальный размер матрицы в R .
До сих пор я использовал следующий код. Объявив ST как глобальную переменную, я смог запустить функцию несколько раз и выполнить задачу.
library(fOptions)
set.seed(123)
MC.C = function(n=2*10^8,
d = 360,
Time = 1,
r = 0.05,
sigma = 0.25,
S0 = 100
){
delta.t = Time/d
Payoff = 0
St = 0
log.St = log(S0)
Z = 0
ST <<- 0
Z = matrix(rnorm.pseudo(n=n, dimension = d), byrow = TRUE, ncol = d)
for(i in 1:d){
log.St = log.St+(r-0.5*sigma^2)*delta.t + sigma*sqrt(delta.t)*Z[,i]
St = St + exp(log.St)
}
ST <<- append(0, St/d)
}
Однако это занимает очень много времени.
Моя цель - как можно быстрее найти решение. У меня есть два вопроса:
- Как бороться с симуляциями, которые превышают память матрицы в R?
- Как еще больше ускорить код?
Я был бы очень благодарен за любые ответы или за указание на ошибки, которые я сделал.