学校的期权定价课程都是基于MATLAB,想自己转化为Python。看了全网的方法几乎都要先算股价,但老师上课说不需要的,所以想最简便计算。因为不擅长循环,写了很通俗易懂的傻瓜循环思路呜呜。
def btm_EurCall(S,X,r,sigma,T,N,q):dt=T/N;u=np.exp(sigma*np.sqrt(dt));d=1/up=(np.exp((r-q)*dt)-d)/(u-d)c_values = [np.maximum(S*u**(2*j-N)-X,0) for j in range(0,N+1)] #计算最后一列的期权价值for j in range(N,0,-1): #Step 3:根据以下计算逐列往前,已知j的范围应该是从N到1,所以是range(N,0,-1)for i in range(j): #Step 1:每列逐点向上计算,位置0与1产生新0……位置N-1与N产生新N-1,所以i为0~N-1即range(N)开始c_values[i]=(p*c_values[i+1]+(1-p)*c_values[i])/np.exp(r*dt) #Step 2:最后一步是位置0与1产生新0,所以i只有0即range(1)结束return c_values[0]