首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mibian返回"NameError: name 'norm‘未定义.“当与xlwing一起使用时

Mibian返回"NameError: name 'norm‘未定义.“当与xlwing一起使用时
EN

Stack Overflow用户
提问于 2020-05-31 07:26:59
回答 3查看 5.8K关注 0票数 0

我试图编写一个Excel,使用xlwing从Mibian库返回财务选项计算。我已经试过下面的代码了。

代码语言:javascript
复制
import xlwings as xw
import mibian

@xw.func
def BSPutOptionImpVol(underlyingPrice,strike,interestRate,expiryDays,premium):
    c = mibian.BS([underlyingPrice, strike, interestRate, expiryDays], putPrice=premium)
    return c.impliedVolatility

然后,我使用下面的=BSPutOptionImpVol(45,32,1,127,0.95)调用该函数

它返回以下错误:

""C:\Users...\anaconda3\lib\site-packages\mibian__init__.py"",

"NameError:名称'norm‘是未定义的call = self.underlyingPrice * norm.cdf(self.d1) -\ File NameError行307,在_price self.callPrice中,self.putPrice = self._price() File ""C:\Users...\anaconda3\lib\site-packages\mibian__init__.py"",第276行,在""C:\Users...\anaconda3\lib\site-packages\mibian__init__.py"",第29行中,在init估计=(ClassName)( args,volatility=mid,performance=True)中,在impliedVolatility args,putPrice=self.putPrice中,文件""C:\Users...\anaconda3\lib\site-packages\mibian__init__.py"",第293行,在init c= mibian.BS(underlyingPrice,strike,interestRate,expiryDays,putPrice=premium)文件“c:\user.\\pythonscripts\BSPutImVol.py”中,第6行在BSPutOptionImpVol ret = func(* args ) File 第298行中,在call_udf res =call_udf(脚本、fname、args、this_workbook )中(调用者)文件""C:\Users...\anaconda3\lib\site-packages\xlwings\server.py"",第195行,在CallUDF返回函数( args )文件""C:\Users...\anaconda3\lib\site-packages\win32com\server\policy.py"",行586中,在_invokeex_返回S_OK中,-1,self._invokeex_(dispid,lcid,wFlags,args),无,(无)文件""C:\Users...\anaconda3\lib\site-packages\win32com\server\policy.py"",行283,在_invoke_中返回self._invoke_(dispid,lcid,wFlags,args)文件""C:\Users...\anaconda3\lib\site-packages\win32com\server\policy.py"",第278行(_Invoke_)“

我还尝试过只调用函数而不传递参数(即输入值在python代码中),但仍然会出现相同的错误。

但是,如果我注释掉xlwing,然后按下面的方式从Spyder运行Python代码,它就能工作。

代码语言:javascript
复制
#import xlwings as xw
import mibian

#@xw.func
def BSPutOptionImpVol(underlyingPrice,strike,interestRate,expiryDays,premium):
    c = mibian.BS([underlyingPrice, strike, interestRate, expiryDays], putPrice=premium)
 #   return c.impliedVolatility
    print(c.impliedVolatility)

我是Python的新手,所以感谢您的帮助和建议。谢谢。

EN

回答 3

Stack Overflow用户

发布于 2020-12-03 22:43:08

试试..。

代码语言:javascript
复制
from scipy.stats import norm
票数 3
EN

Stack Overflow用户

发布于 2020-08-06 06:59:27

试着添加

代码语言:javascript
复制
import scipy

你的密码。这解决了我的“规范”问题。

票数 0
EN

Stack Overflow用户

发布于 2022-10-10 14:39:49

这对我来说很管用

代码语言:javascript
复制
pip uninstall numpy scipy

然后

代码语言:javascript
复制
pip install -U numpy scipy
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62112930

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档