import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from scipy.stats import norm
from matplotlib.ticker import FormatStrFormatter
%matplotlib inline
N = norm.cdf
def BS_CALL(S, K, T, r, sigma):
d1 = (np.log(S/K) + (r + sigma**2/2)*T) / (sigma*np.sqrt(T))
d2 = d1 - sigma * np.sqrt(T)
return S * N(d1) - K * np.exp(-r*T)* N(d2)
def BS_PUT(S, K, T, r, sigma):
d1 = (np.log(S/K) + (r + sigma**2/2)*T) / (sigma*np.sqrt(T))
d2 = d1 - sigma* np.sqrt(T)
return K*np.exp(-r*T)*N(-d2) - S*N(-d1)
K = 100
r = 0.1
T = 1
sigma = 0.3
S = np.arange(1,300,.1)
calls = [BS_CALL(s, K, T, r, sigma) for s in S]
call_intrinsic = [s-K if(s>K) else 0 for s in S]
puts = [BS_PUT(s, K, T, r, sigma) for s in S]
plt.figure(figsize=(10,6))
plt.plot( calls, label='Call Value')
plt.plot(call_intrinsic, label="Intrinsic Value")
plt.xlabel('$S_0$')
plt.ylabel(' Value')
plt.legend()
看到X刻度了吗
我希望X刻度的数字从0.1到300。我希望图的X轴有相同的范围,但似乎0.1的范围是工作的事情了。
1条答案
按热度按时间h7appiyu1#
将
S
作为plot
的x
参数传递:如果你不传递2个数据值,
plot
认为这些值是y
(你的代码)的值。如果你传递两个,第一个是x
,第二个是y
(上面的代码)。输出: