2013-02-26 26 views
2

我正在尝试完成此代码,但我一直收到未知错误消息。我不明白我做错了什么。对不起,我是python新手!Python - 二项选项定价码

我会感谢任何帮助!

import math 

def nCr(n,r): 
    f = math.factorial 
    return f(n)/f(r)/f(n-r) 

class Option(object): 

    def __init__(self,s0,u,d,r,t,strike): 
     self.s0=s0 
     self.u=u 
     self.d=d 
     self.r=r 
     self.t=t 
     self.strike=strike 

    def price(self): 
     q = (self.r - self.d)/(self.u - self.d) 
     prc = 0 
     temp_stock = 0 
     temp_payout = 0 
     for x in range(1,self.t+1): 
      temp_stock = self.strike*(self.u**(4-x))*(self.d**(x-1)) 
      temp_payout = max(temp_stock-self.strike,0) 
      prc += nCr(self.t,x-1)*(q**(4-x))*((1-q)**(x-1))*temp_payout 
     prc = prc/(self.r**self.t) 
     return prc 


newOption = Option(100,1.07,0.93458,1.01,3,100) 
print newOption.price() 
+2

你可以显示你正在得到确切的错误信息? – munk 2013-02-26 22:06:23

+0

你的意思是'IndentationError'或TypeError:^:'float'和'int''不支持的操作数类型吗? – Bakuriu 2013-02-26 22:07:59

+0

发现错误,在def(价格)块之前有一个额外的空间,我现在会插入正确的代码 – user2113095 2013-02-26 22:09:41

回答

3

至少有你的代码存在以下问题:

  • ,你必须包含在你的程序开始的数学模块:

    进口数学

  • 你必须用“**”运算符替换“^”运算符。

(如果这是不够的检查压痕,作为您在此消息压痕有一个小问题:功能价格()被转移到左)

通过这些修正你的程序产生输出: 6.77357485848。

检查这是否是您想要的输出。

+0

..修复它.. ..他应该选择你的答案。 – 2013-02-26 23:23:15