May-29-2020, 04:34 AM
Hi,
I'm trying to write a simple UDF using xlwings. Note that I don't have much experience with Python.
The Python code that I'm trying to call via xlwings is:
Unfortunately, it's returning a very long error message
I'm trying to write a simple UDF using xlwings. Note that I don't have much experience with Python.
The Python code that I'm trying to call via xlwings is:
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.impliedVolatilityI have then called the function on Excel (via xlwings) with the formula =BSPutOptionImpVol(45,32,1,127,0.95)
Unfortunately, it's returning a very long error message
Error:"NameError: name 'norm' is not defined
call = self.underlyingPrice * norm.cdf(self._d1_) - \
File ""C:\Users\...\anaconda3\lib\site-packages\mibian\__init__.py"", line 307, in _price
[self.callPrice, self.putPrice] = self._price()
File ""C:\Users\...\anaconda3\lib\site-packages\mibian\__init__.py"", line 276, in __init__
estimate = eval(className)(args, volatility=mid, performance=True).putPrice
File ""C:\Users\...\anaconda3\lib\site-packages\mibian\__init__.py"", line 29, in impliedVolatility
self.__class__.__name__, args, putPrice=self.putPrice)
File ""C:\Users\...\anaconda3\lib\site-packages\mibian\__init__.py"", line 293, in __init__
c = mibian.BS([underlyingPrice, strike, interestRate, expiryDays], putPrice=premium)
File ""c:\users\...\documents\python scripts\BSPutImVol.py"", line 6, in BSPutOptionImpVol
ret = func(*args)
File ""C:\Users\...\anaconda3\lib\site-packages\xlwings\udfs.py"", line 298, in call_udf
res = call_udf(script, fname, args, this_workbook, FromVariant(caller))
File ""C:\Users\...\anaconda3\lib\site-packages\xlwings\server.py"", line 195, in CallUDF
return func(*args)
File ""C:\Users\...\anaconda3\lib\site-packages\win32com\server\policy.py"", line 586, in _invokeex_
return S_OK, -1, self._invokeex_(dispid, lcid, wFlags, args, None, None)
File ""C:\Users\...\anaconda3\lib\site-packages\win32com\server\policy.py"", line 283, in _invoke_
return self._invoke_(dispid, lcid, wFlags, args)
File ""C:\Users\...\anaconda3\lib\site-packages\win32com\server\policy.py"", line 278, in _Invoke_"
Any one has an idea what I've done wrong? Thanks.