Bonjour chère communauté,
J'ai récemment intégré votre forum pour parfaire mes connaissances excel mais j'aurais toutefois besoin d'une conséquente aide sur un projet.
J'étudie la finance et j'ai pu retranscrire un exercice de mon cours sur Python car mon professeur de Python est génial, j'ai quasiment tout compris du premier coup. Toutefois en VBA ce n'est pas du tout la même histoire, ma professeure était sans cesse absente et ne m'a enseigné que quelques pseudo-codes (très investie dans son job elle était...).
Revenons donc à nos moutons, je vous montre mon exercice :
Je devais donc retranscrire sur Python et VBA cet exemple 22.1 en considérant les deux équations 22.3 et 22.4 pour qu'elles déterminent les valeurs V0 et Sigma_V permettant de trouver d1 et d2, et à terme la probabilité de défaut tant recherchée de 12,7% (j'obtiens certes 12,63, ce qui à l'arrondi n'est pas la valeur correcte mais il me semble que dans l'exemple, l'auteur a du arrondi les résultats de ses équations avant de calculer la probabilité de défaut, ce qui expliquerai ce tout petit écart).
Enfin bref, voici le code python que j'ai créé pour retranscrire cet exemple :
L'un de vous pourrait donc me convertir ou m'aider à convertir ce code python en code VBA ?
Je remercie d'avance celles et ceux qui auront jeté un oeil à ma demande.
Bien à vous
RAUCHVANT
J'ai récemment intégré votre forum pour parfaire mes connaissances excel mais j'aurais toutefois besoin d'une conséquente aide sur un projet.
J'étudie la finance et j'ai pu retranscrire un exercice de mon cours sur Python car mon professeur de Python est génial, j'ai quasiment tout compris du premier coup. Toutefois en VBA ce n'est pas du tout la même histoire, ma professeure était sans cesse absente et ne m'a enseigné que quelques pseudo-codes (très investie dans son job elle était...).
Revenons donc à nos moutons, je vous montre mon exercice :
Je devais donc retranscrire sur Python et VBA cet exemple 22.1 en considérant les deux équations 22.3 et 22.4 pour qu'elles déterminent les valeurs V0 et Sigma_V permettant de trouver d1 et d2, et à terme la probabilité de défaut tant recherchée de 12,7% (j'obtiens certes 12,63, ce qui à l'arrondi n'est pas la valeur correcte mais il me semble que dans l'exemple, l'auteur a du arrondi les résultats de ses équations avant de calculer la probabilité de défaut, ce qui expliquerai ce tout petit écart).
Enfin bref, voici le code python que j'ai créé pour retranscrire cet exemple :
Python:
import numpy as np
import scipy.optimize
from scipy import integrate as intg
# valeurs donnees
E0 = 3
sE = 0.8
r = 0.05
T = 1
D = 10
# fonctions intermediaires :
def g(u):
return np.exp(-u*u/2)/np.sqrt(np.pi*2)
def N(d):
res = intg.quad(g, -np.inf, d)
return res[0]
def d1(V0, sV):
return (np.log(V0/D)+T*(r + sV*sV/2)) / (sV*np.sqrt(T))
def d2(V0, sV):
return d1(V0, sV) - sV*np.sqrt(T)
# FONCTION A MINIMISER : obligation avoir 1 variable mais X = vecteur à 2 coordonnées
def F(X):
V0 = X[0]
sV = X[1]
return np.abs(E0 - V0*N(d1(V0, sV)) + D*np.exp(-r*T)*N(d2(V0, sV))) + np.abs(sE * E0 - N(d1(V0, sV))*sV*V0)
# Valeurs de départ X0: il faut donner des valeurs initiales, l'algo va chercher à minimiser la fonction de proche en proche.
X0 = np.array([12.4, 0.21])
resultat = scipy.optimize.least_squares(F, X0, ftol=1e-20)
Xfinal = resultat.x
print('Current asset value and volatility are', Xfinal)
print('Valeur de F en ce point : ', F(Xfinal))
print('d1=', d1(Xfinal[0], Xfinal[1]))
print('d2=', d2(Xfinal[0], Xfinal[1]))
print('The default probability is', (1-N(d2(Xfinal[0], Xfinal[1])))*100, '%')
L'un de vous pourrait donc me convertir ou m'aider à convertir ce code python en code VBA ?
Je remercie d'avance celles et ceux qui auront jeté un oeil à ma demande.
Bien à vous
RAUCHVANT