2016-09-18 4 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 

내 파이썬 코드 정의되지 않은이 모듈은 내가 쓴 :

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"은 내 문서의 가치가 무엇인지 알지 못합니다. *. 샘플 코드에서 아무 것도 정의되어 있지 않다는 것을 알 수 있습니다. –

관련 문제