2016-09-18 3 views
0

を定義していません。これは私のPythonコードで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 

この私が書いたモジュール:

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 

sys.path.pyファイル自体へのパスを追加するモジュールをインポートしません。

+0

この "v0"は私のドキュメントの値ですが、定義されていないエラーです。どのようにインポートできますか@Martjin Pieters – taylor

+0

@taylor: "v0"は私のドキュメントの価値です*。サンプルコードのどこにでも定義されていないことがわかります。 –

関連する問題