在python中如何调用此函数
我是python方面的新手。我试图复制我在一本书中找到的一些代码。在python中如何调用此函数,python,list,Python,List,我是python方面的新手。我试图复制我在一本书中找到的一些代码。 如何调用def plot\u值(函数)。当我尝试调用plot\u values()时,应该插入什么作为函数?我发现了错误 TypeError: plot_values() missing 1 required positional argument: 'function' 以下是我尝试运行的代码: import math import numpy as np import matplotlib as mpl import ma
如何调用
def plot\u值(函数)
。当我尝试调用plot\u values()
时,应该插入什么作为函数?我发现了错误
TypeError: plot_values() missing 1 required positional argument: 'function'
以下是我尝试运行的代码:
import math
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
from scipy.integrate import quad
mpl.rcParams['font.family'] = 'serif'
#
# Helper Functions
#
def dN(x):
''' Probability density function of standard normal random variable x. '''
return math.exp(-0.5 * x ** 2) / math.sqrt(2 * math.pi)
def N(d):
''' Cumulative density function of standard normal random variable x. '''
return quad(lambda x: dN(x), -20, d, limit=50)[0]
def d1f(St, K, t, T, r, sigma):
''' Black-Scholes-Merton d1 function.
Parameters see e.g. BSM_Call function. '''
d1 = (math.log(St / K) + (r + (0.5 * sigma ** 2)) * (T - t)) / (sigma * math.sqrt(T - t))
return d1
#
# Valuation Functions
#
def BSM_call_value(St, K, t, T, r, sigma):
''' Calculates Black-Scholes-Merton European call option value.
Parameters
==========
St : float
stock/index level at time t
K : float
strike price
t : float
valuation date
T : float
date of maturity/time-to-maturity if t = 0; T > t
r : float
constant, risk-less short rate
sigma : float
volatility
Returns
=======
call : float
European call present value at t
'''
d1 = d1f(St, K, t, T, r, sigma)
d2 = d1 - sigma * math.sqrt(T - t)
call = St * N(d1) - math.exp(-r * (T - t)) * K * N(d2)
print(call)
return call
def BSM_put_value(St, K, t, T, r, sigma):
''' Calculates Black-Scholes-Merton European put option value.
Parameters
==========
St : float
stock/index level at time t
K : float
strike price
t : float
valuation date
T : float
date of maturity/time-to-maturity if t = 0; T > t
r : float
constant, risk-less short rate
sigma : float
volatility
Returns
=======
put : float
European put present value at t
'''
put = (BSM_call_value(St, K, t, T, r, sigma) -
St + math.exp(-r * (T - t)) * K)
return put
#
# Plotting European Option Values
#
def plot_values(function):
''' Plots European option values for different parameters c.p. '''
plt.figure(figsize=(10, 8.3))
points = 100
#
# Model Parameters
#
St = 100.0 # index level
K = 100.0 # option strike
t = 0.0 # valuation date
T = 1.0 # maturity date
r = 0.05 # risk-less short rate
sigma = 0.2 # volatility
# C(K) plot
plt.subplot(221)
klist = np.linspace(80, 120, points)
vlist = [function(St, K, t, T, r, sigma) for K in klist]
plt.plot(klist, vlist)
plt.xlabel('strike $K$')
plt.ylabel('present value')
# C(T) plot
plt.subplot(222)
tlist = np.linspace(0.0001, 1, points)
vlist = [function(St, K, t, T, r, sigma) for T in tlist]
plt.plot(tlist, vlist)
plt.xlabel('maturity $T$')
# C(r) plot
plt.subplot(223)
rlist = np.linspace(0, 0.1, points)
vlist = [function(St, K, t, T, r, sigma) for r in rlist]
plt.plot(tlist, vlist)
plt.xlabel('short rate $r$')
plt.ylabel('present value')
plt.axis('tight')
# C(sigma) plot
plt.subplot(224)
slist = np.linspace(0.01, 0.5, points)
vlist = [function(St, K, t, T, r, sigma) for sigma in slist]
plt.plot(slist, vlist)
plt.xlabel('volatility $\sigma$')
plt.tight_layout()
St = 200.00
K = 210.00
t = 1/252
T = 1.00
r = 0.05
sigma = 0.10
BSM_call_value(St, K, t, T, r, sigma)
plot_values()
您的错误
TypeError:plot_values()缺少1个必需的位置参数:“function”
提供您所需的所有信息
plot_values()缺少1个必需的位置参数
意味着您必须向函数plot_values发送另一个参数。缺少的参数是一个名为function
(位置参数,因为您不必通过关键字传递它。例如fonction=
)
您必须理解,在Python中,一切都是一个对象。
你可以做:
>>> print('a')
a
>>> my_print = print
>>> my_print('a')
a
这是因为变量my_print
现在是另一个名称的函数print。你可以像其他变量一样发送函数给函数
print
是一个函数,但您可以像处理任何其他变量一样操作此函数。见:
>>> print(print)
<built-in function print>
或遵守此定义的其他功能:
def any_fun(St, K, t, T, r, sigma):
其中包括d1f
、BSM\u调用值
和BSM\u放置值
def any_fun(St, K, t, T, r, sigma):