有没有办法从头开始创建/生成 Pandas DataFrame,这样每条记录都遵循特定的数学函数?
背景:在金融数学中,非常基本的金融衍生品(例如看涨期权和看跌期权)具有封闭式定价公式(例如 Black Scholes)。这些定价公式可以称为随机函数(因为它们涉及随机项)
我正在尝试创建股票价格的蒙特卡罗模拟(以及随后基于股票价格的期权收益和价格)。比如说,我需要 1000 个路径(行)和 100 个时间步(列)。我想“启动”一个 1000 x 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)