Есть ли способ создать / сгенерировать Pandas DataFrame с нуля, чтобы каждая запись выполняла определенную математическую функцию?
Справочная информация. В финансовой математике очень простые производные финансовые инструменты (например, колл и пут)имеют закрытые формулы ценообразования (например, Black Scholes).Эти формулы ценообразования можно назвать стохастическими функциями (потому что они включают в себя случайный термин)
Я пытаюсь создать симуляцию Монте-Карло цены акций (и впоследствии выплату опционов и цену, основанную на цене акций),Мне нужно, скажем, 1000 путей (строк) и 100 временных шагов (столбцов).Я хочу «инициировать» фрейм данных, который равен 1000 на 100 и следует стохастическому уравнению.
# Psuedo-code
MonteCarloDF = DataFrame(rows=1000, columns=100, customFunc=TRUE,
appliedBy='by column',
FUNC={s0=321;
s_i=prev*exp(r-q*sqrt(sigma))*T +
(etc)*NormDist(rnd())*sqr(deltaT)}
)
Столбец 0 в каждой строке будет иметь значение 321, и каждый последующий столбец будет вычисляться на основе FUNC
выше.
Это пример чего-то подобного, сделанного в VBA
Function MonteCarlo_Vanilla_call(S, K, r, q, vol, T, N)
sum = 0
payoff = 0
For i = 1 To N
S_T = S * Exp((r - q - 0.5 * vol ^ 2) * T + vol * Sqr(T) * Application.NormSInv(Rnd()))
payoff = Application.Max(S_T - K, 0)
sum = sum + payoff
Next i
MonteCarlo_Vanilla_call = Exp(-r * T) * sum / N
End Function
Каждый переданный в переменной является константой.В моем случае я хочу, чтобы каждый следующий столбец в той же строке был похож на S_T
в коде VBA.Это действительно единственное, что имеет значение.Я хочу применить такую функцию, как S_T = S * Exp((r - q - 0.5 * vol ^ 2) * T + vol * Sqr(T) * Application.NormSInv(Rnd()))
.Каждый S_T
является следующим столбцом в той же строке.Есть N
столбцов, делающих одно моделирование.У меня будет, например, 1000 симуляций.
321 | 322.125 | 323.277 | ... | column 100 value
321 | 320.704 | 319.839 | ... | column 100 value
321 | 321.471 | 318.456 | ... | column 100 value
...
row 1000| etc | etc | ... | value (1000,100)