我使用的脚本给出了以下错误。我以为该错误可能与np.inf
的浮点数有关,但是尝试使用np.iinfo(np.int32).max
,但它没有执行任何操作。我没有人可以咨询,所以在这里问。
def BCC_call_value(S0,K,T,r,kappa_v,theta_v,sigma_v,rho,v0,lamb,mu,delta):
int_value=quad(lambda u:BCC_int_func(u,S0,K,T,r,kappa_v,theta_v,sigma_v,rho,v0,lamb,mu,delta),0,np.inf,limit=250)[0]
call_value=max(0,S0-np.exp(-r*T)*np.sqrt(S0*K)/np.pi*int_value)
return call_value
def BCC_int_func(u,S0,K,T,r,kappa_v,theta_v,sigma_v,rho,v0,lamb,mu,delta):
'''Valuation of European call option in BCC97 model via Lewis (2001)
Fourier-based approach:integration function.
Parameter definitions see function BCC_call_value.'''
char_func_value=BCC_char_func(u-1j*0.5,T,r,kappa_v,theta_v,sigma_v,rho,v0,lamb,mu,delta)
int_func_value=1/(u**2+0.25)*(np.exp(1j*u*np.log(S0/K))*char_func_value).real
return int_func_value
TypeError Traceback (most recent call last)
<ipython-input-5-874d91836da1> in <module>
----> 1 BCC_call_value(S0,K,T,r,kappa_v,theta_v,sigma_v,rho,v0,lamb,mu,delta)
<ipython-input-3-02bea979d7ba> in BCC_call_value(S0, K, T, r, kappa_v, theta_v, sigma_v, rho, v0, lamb, mu, delta)
68
69 '''
---> 70 int_value=quad(lambda u:BCC_int_func(u,S0,K,T,r,kappa_v,theta_v,sigma_v,rho,v0,lamb,mu,delta),0,np.inf,limit=250)[0]
71 call_value=max(0,S0-np.exp(-r*T)*np.sqrt(S0*K)/np.pi*int_value)
72 return call_value
D:\Anaconda\lib\site-packages\scipy\integrate\quadpack.py in quad(func, a, b, args, full_output, epsabs, epsrel, limit, points, weight, wvar, wopts, maxp1, limlst)
339 if weight is None:
340 retval = _quad(func, a, b, args, full_output, epsabs, epsrel, limit,
--> 341 points)
342 else:
343 retval = _quad_weight(func, a, b, args, full_output, epsabs, epsrel,
D:\Anaconda\lib\site-packages\scipy\integrate\quadpack.py in _quad(func, a, b, args, full_output, epsabs, epsrel, limit, points)
448 return _quadpack._qagse(func,a,b,args,full_output,epsabs,epsrel,limit)
449 else:
--> 450 return _quadpack._qagie(func,bound,infbounds,args,full_output,epsabs,epsrel,limit)
451 else:
452 if infbounds != 0:
<ipython-input-3-02bea979d7ba> in <lambda>(u)
68
69 '''
---> 70 int_value=quad(lambda u:BCC_int_func(u,S0,K,T,r,kappa_v,theta_v,sigma_v,rho,v0,lamb,mu,delta),0,np.inf,limit=250)[0]
71 call_value=max(0,S0-np.exp(-r*T)*np.sqrt(S0*K)/np.pi*int_value)
72 return call_value
<ipython-input-3-02bea979d7ba> in BCC_int_func(u, S0, K, T, r, kappa_v, theta_v, sigma_v, rho, v0, lamb, mu, delta)
144
145 Parameter definitions see function BCC_call_value.'''
--> 146 char_func_value=BCC_char_func(u-1j*0.5,T,r,kappa_v,theta_v,sigma_v,rho,v0,lamb,mu,delta)
147 int_func_value=1/(u**2+0.25)*(np.exp(1j*u*np.log(S0/K))*char_func_value).real
148 return int_func_value
<ipython-input-3-02bea979d7ba> in BCC_char_func(u, T, r, kappa_v, theta_v, sigma_v, rho, v0, lamb, mu, delta)
167
168 Parameter definitions see function BCC_call_value.'''
--> 169 BCC1=H93_char_func(u,T,r,kappa_v,theta_v,sigma_v,rho,v0)
170 BCC2=M76_char_func(u,T,lamb,mu,delta)
171 return BCC1 * BCC2
<ipython-input-3-02bea979d7ba> in H93_char_func(u, T, r, kappa_v, theta_v, sigma_v, rho, v0)
179 c2=-np.sqrt((rho*sigma_v*u*1j-kappa_v)**2-sigma_v**2*(-u*1j-u**2))
180 c3=(kappa_v-rho*sigma_v*u*1j+c2)/(kappa_v-rho*sigma_v*u*1j-c2)
--> 181 H1=(r*u*1j*T(c1/sigma_v**2)*((kappa_v-rho*sigma_v*u*1j+c2)*T-2*np.log((1-c3*np.exp(c2*T))/(1-c3))))
182 H2=((kappa_v - rho*sigma_v*u*1j+c2)/sigma_v**2*((1-np.exp(c2*T))/(1-c3*np.exp(c2*T))))
183 char_func_value=np.exp(H1+H2*v0)
TypeError: 'float' object is not callable
答案 0 :(得分:1)
我认为问题出在您的H93_char_func
:
H1=(r*u*1j*T(c1/sigma_v**2)*((kappa_v-rho*sigma_v*u*1j+c2)*T-2*np.log((1-c3*np.exp(c2*T))/(1-c3))))
# ^ here you attempt to call T... ^ here you use it as a number
T
是一个函数还是一个数字?从上下文来看,我认为这是一个数字,这意味着您需要将T(c1 / sigma_v ** 2)
更改为它的含义(也许是T * (c1 / sigma_v ** 2)
?)。
我也强烈建议添加空格,也许添加一个或两个变量以保存中间结果。这很难读。