Ich versuche die implizite Volatilität der Black-Scholes-Formel mit Python zu berechnen. Ich habe jedoch ein Problem mit meinem Code. Ich erhalte diese Fehlermeldung, wenn ich den Code ausgeführt wird:Ungültiger Wert in true_divide gefunden
RuntimeWarning: divide by zero encountered in true_divide
v = sigmaOld - bs_option_call(v, s, k, r, t, call_price1)/fprime(sigmaOld, s, k, r, t)e here
und hier ist mein Code:
while True:
for (v, k, s, t, call_price1) in zip(sigma, K, S, Ta, call_price_list):
sigmaOld = v
v = sigmaOld - bs_option_call(v, s, k, r, t, call_price1)/fprime(sigmaOld, s, k, r, t)
if scipy.absolute(v - sigmaOld) < epsilon:
break
print(sigma)
wo fprime
ist
def fprime(sigma, S, K, r, T):
logSoverK = log(S/K)
numerd1 = logSoverK + (r + sigma**2/2) * T
d1 = numerd1/(sigma*sqrt(T))
return S * sqrt(T) * norm.pdf(d1) * exp(-r * T)
und K, Ta, S, Sigma , call_price_list sind Listen und r ist nur eine Zahl.
Ich habe versucht, aus irgendeinem Grund
import numpy as np
np.seterr(divide='ignore', invalid='ignore')
aber es war nicht nützlich für mich zu verwenden!
Kann mir bitte jemand meinen Code ansehen und mir sagen, was ist mein Fehler! Vielen Dank im Voraus
Ich denke, 'fprime()' gibt Null (es?). Was ist 'fprime()' Code? Was sind die Werte von "sigmaOld", "s", "k", "r" und "t", wenn der Fehler auftritt? Welche Python-Version verwendest du? – abukaj
Ich habe meine Frage oben bearbeitet, um Ihre Frage zu beantworten. Vielen Dank. – roby
"nur eine Zahl" - "float", "int" oder "numpy.array"? auch, wo 'log' und' sqrt' importiert werden? Die Python-Version könnte ebenfalls wichtig sein. – abukaj