import sympy as sy
from sympy import Symbol
from sympy.plotting import plot
from sympy.stats import Normal, cdf
from sympy import init_printing
def euro_vanilla_call_sym(S, X, T, r, sigma):
N = Normal('x',0,1) # define random variable
d1 = sy.ln(S/X) + ((r+0.5*sigma**2)*T)/(sigma*sy.sqrt(T))
d2 = d1 - sigma*sy.sqrt(T)
call = S*cdf(N)(d1) - X*sy.exp(-r*T) * cdf(N)(d2)
return call
^^^ код для репликации.
x = Symbol("x")
euro_price_var = euro_vanilla_call_sym(10,15,10,.02,x)
p = plot(euro_price_var, (x,0,2.1), xlabel="Stock_Price", ylabel="Option_Value")
fig = p._backend.fig
ax = p._backend.ax
ax[0].xaxis.set_label_coords(0.5,0)
ax[0].yaxis.set_label_coords(-.1,.5)
fig
Работает, но печатает график дважды, чего я не хочу. Так что я подумал, что это все исправит.
x = Symbol("x")
euro_price_var = euro_vanilla_call_sym(10,15,10,.02,x)
p = plot(euro_price_var, (x,0,2.1), xlabel="Stock_Price", ylabel="Option_Value", show=False)
fig = p._backend.fig
ax = p._backend.ax
ax[0].xaxis.set_label_coords(0.5,0)
ax[0].yaxis.set_label_coords(-.1,.5)
fig
Что потом не получается, но единственное, что изменилось, я передал в show=False