2016-09-18 41 views
0

這在IPython的筆記本NameError:我的功能還沒有被定義

import sys 
sys.path.append('C:/Users/dell/.ipynb_checkpoints/bsm_functions.py') 
tol=0.5 
for option in options_data.index: 
forward=futures_data[futures_data['MATURITY']==\ 
        options_data.loc[option]['MATURITY']]['PRICE'].values[0] 
if(forward*(1-tol)<options_data.loc[option]['STRIKE'] 
          <forward*(1+tol)): 
    imp_vol=bsm_call_imp_vol(v0, 
       options_data.loc[option]['STRIKE'], 
    options_data.loc[option]['TTM'],r, 
    options_data.loc[option]['PRICE'], 
    sigma_est=2,it=100) 
    options_data['IMP_VOL'].loc[option]=imp_vol 

我的Python代碼這個模塊,我寫:

def bsm_call_value(S0,K,T,r,sigma): 
    from math import log,sqrt,exp 
    from scipy import stats 
    S0=float(S0) 
    d1=(log(S0/K)+(r+0.5*sigma**2)*T)/(sigma*sqrt(T)) 
    d2=(log(S0/K)+(r-0.5*sigma**2)*T)/(sigma*sqrt(T)) 
    value=(S0*stats.norm.cdf(d1,0.0,1.0)-K*exp(-r- T)*stats.norm.cdf(d2,0.0,1.0)) 
    return value 
def bsm_vega(S0,K,T,r,sigma): 
    from math import log,sqrt 
    from scipy import stats 
    S0=float(S0) 
    d1 = (log(S0/K) + (r + 0.5 * sigma ** 2) * T)/(sigma * sqrt(T)) 
    vega=S0*stats.norm.cdf(d1,0.0,1.0)*sqrt(T) 
    return vega 
def bsm_call_imp_vol(S0,K,T,r,C0,sigma_est,it=100): 
    for i in range(it): 
     sigma_est-=((bsm_call_value(S0,K,T,r,sigma_est)-C0)/bsm_vega(S0,K,T,r,sigma_est))  
     return sigma_est 

我的錯誤是:

name 'bsm_call_imp_vol' is not defined 

我不知道這個錯誤的原因

回答

2

您需要導入您的模塊。您從模塊添加一個模塊的父目錄sys.path,然後導入名稱:

sys.path.append('C:/Users/dell/.ipynb_checkpoints') 
from bsm_functions import bsm_call_imp_vol 

添加路徑爲.py文件本身sys.path不導入模塊。

+0

這個「v0」是我的文檔的值,它也是一個沒有定義的錯誤。我怎麼才能導入它@Martjin Pieters – taylor

+0

@taylor:我不知道你的意思是什麼*「v0」是我的文檔的值*。我可以看到它在示例代碼中沒有定義,不。 –

相關問題