我刚开始学习Python,并且已经构建了二项式和三项式模型来测试我的理解,尤其是关于数组。
对于终端股票价格数组,我已经从InitialStock * u **(iSteps-i)中退出,从零开始到2 * iSteps + 1。我从最顶级的终端股票价格InitialStock * u **(iSteps)开始,一直走下去,直到我到达InitalStock * u **( - iSteps),并将TerminalStock阵列从0增至2 * iSteps + 1(即最后一个数组元素是InitialStock * u **( - iSteps)因为我来自VBA领域,我还没有拿出雄辩(因此,简短,有时难以阅读的Python风格),我的循环看起来像这样:
for i in range(0, 2*iSteps+1) :
# Terminal stock is initial with up staps and down steps
dblStockTerminal = dblStock * u ** float(iSteps - i)
# compute intrinsic values at terminal stock value
dblTrinOpt[i][iSteps] = max(dblSwitch * (dblStockTerminal - dblStrike), 0)
我已初始化dblTrinOpt阵列dblTrinOpt = np.ndarray((2个* iSteps + 1,iSteps + 1),浮动),因此它具有在终端股价2种* iSteps价元素和iStep时间步骤,其中iSteps = OptionTerm/NumberOfSteps。是的,为我笨拙的Python代码道歉!(但我必须阅读它)
在那之后,我的选择,计算的是如下(是的,再次代码是不雅):
#------------------------------------------
# steps in time from Terminal to Initial Stock price
#------------------------------------------
for i in range(iSteps-1, -1, -1) :
#------------------------------------------
# steps in price range from highest to lowest
#------------------------------------------
for j in range(0, 2*i+1) :
#------------------------------------------
# discount average of future option value
# as usual, trinomial averages three values
#------------------------------------------
dblTrinOpt[j][i] = dblDisc * (pu * dblTrinOpt[j][i+1] + pm * \
dblTrinOpt[j+1][i+1] + pd * dblTrinOpt[j+2][i+1]) 之后
,我的三项功能传递dblTrinOpt [0] [0]作为最终的折扣期权价格。
我想以更易读的形式编写这个文件,以便更容易添加两个组件: (a)美式期权工具,因此跟踪每个树节点的股票价格(因此,那些障碍和百慕大人(b)在每个末端添加两个额外的终端价格,并且在零时刻,我将拥有三个股票和期权值,以便我可以计算增量和伽马而不需要重新计算期权尽管我没有修复你的特定代码,但是解释了逻辑