Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL pour MAC Credit Risk program - Convertir code PYTHON to VBA

Rauchvant

XLDnaute Nouveau
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 :

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
 

Staple1600

XLDnaute Barbatruc
Bonsoir le fil, Rauchvant

=>Rauchvant
Je n'ai pas de Mac.
Je n'ai pas de vivarium pour y mettre du python
Mais j'ai un navigateur connecté très souvent (comme beaucoup) sur le G de GAFA
Et donc, au détour d'un résultat, on peut tomber sur ceci entre autres choses.
Je ne sais si cela t'aidera mais en tout en creusant la piste tu trouveras d'autres exemples.
 
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…