jupyter笔记本中的交互功能和滑块存在问题

时间:2020-11-09 03:56:26

标签: python jupyter-notebook widget interactive figure

我使用用于将滑块绑定到函数的交互函数遇到一个奇怪的错误。我知道该函数可正确使用输入,但在被交互调用时它将停止工作。这是重现该错误的代码:

%matplotlib inline

# Import libraries
import matplotlib.pyplot as plt
import numpy as np
import scipy.stats as stats
import math

from ipywidgets import widgets
from ipywidgets import interact, interactive, fixed
from IPython.display import display

# Libraries
from scipy.stats import norm

# Other example: Black-Scholes-Merton
def d1f(St, K, tau, r, sigma):

   d1 = (np.log(St/K) + (r + 0.5*sigma**2)*tau)/    \
     (sigma*np.sqrt(tau))
   return d1

def BSM_call_value(St=100,K=100,tau=60,r=0.05/252,sigma=0.2/np.sqrt(252)):

   d1 = d1f(St, K, tau, r, sigma)
   d2 = d1 - sigma*np.sqrt(tau)
   call_value = St*norm.cdf(d1) - np.exp(-r*tau)*K*norm.cdf(d2)
   return call_value

# Sliders
s_slider = widgets.IntSlider(
   value=100,
   min=90,
   max=110,
   step=1,
   description='Price'
)

k_slider = widgets.IntSlider(
   value=100,
   min=90,
   max=110,
   step=1,
   description='Strike'
)

tau_slider = widgets.IntSlider(
   value=60,
   min=30,
   max=180,
   step=15,
   description='Maturity'
)

r_slider = widgets.IntSlider(
   value=0.05/252,
   min=0.01/252,
   max=0.20/252,
   step=0.005,
   description='Maturity'
)

sigma_slider = widgets.IntSlider(
   value=0.2/np.sqrt(252),
   min=0.05/np.sqrt(252),
   max=0.5/np.sqrt(252),
   step=0.01/np.sqrt(252),
   description='Volatility'
 )

interact(d1f, St=s_slider, K=k_slider, tau=tau_slider, 
              r=r_slider, sigma=sigma_slider)

我知道上面的d1f有效。您可以检查我为滑块提供的网格中的任何点,但看不到为什么它不起作用。如您所想,所有输入都必须严格为正,并且顾名思义,这是Black-Scholes-Merton模型中看涨期权价格的一部分。我最终想用它来制作交互式人物,但是我需要首先进行这一步骤!

因此,为了清楚起见,我将其标记为交互式和数字,因为这是最终目标。我只是想念一个包装函数,用BSM_call_value输出一个正确的图,但是当我调用这个函数时,d1f出现了错误,因此这篇文章。

0 个答案:

没有答案
相关问题