eshap.py

Created by matthieumorvant

Created on December 08, 2024

3.7 KB


def calcul_taux_rendement_fonds_propres(rf_pct, beta, prime_pct):
    """
    Calcule le taux de rendement des fonds propres selon le MEDAF.
    Formule : E(Ri) = rf + β × prime
    """
    rf = rf_pct / 100.0
    prime = prime_pct / 100.0
    rFP = rf + beta * prime
    return rFP, rf, prime

def calcul_croissance_moyenne(DPA_ancienne, DPA_recente, nb_annees):
    """
    Calcule le taux de croissance moyen des dividendes.
    Formule : g = (DPA_recente / DPA_ancienne)^(1/nb_annees) - 1
    """
    g = (DPA_recente / DPA_ancienne)**(1.0/nb_annees) - 1
    return g

def valeur_titre_gordon(D0, rFP, g):
    """
    Calcule la valeur du titre selon Gordon.
    Formule : P0 = D1 / (rFP - g)
    avec D1 = D0 × (1+g)
    """
    D1 = D0 * (1 + g)
    P0 = D1 / (rFP - g)
    return P0, D1

def croissance_implicite(P0, D0, rFP):
    """
    Calcule la croissance implicite g.
    Formule de Gordon : P0 = (D0 × (1 + g)) / (rFP - g)
    On résout pour g : g = (rFP*P0 - D0) / (P0 + D0)
    """
    g_implicite = (rFP*P0 - D0) / (P0 + D0)
    return g_implicite

# Programme principal
# On affiche les paramètres et on récupère les données de l'utilisateur
nb_actions = float(input("Nb d'actions : "))
capitalisation = float(input("Capitalisation : "))
beta = float(input("bêta : "))
taux_sans_risque_pct = float(input("Taux sans risque (%): "))
prime_risque_pct = float(input("Prime de risque (%): "))
DPA_1 = float(input("DPA 1 : "))
DPA_2 = float(input("DPA 2 : "))
nb_annees = float(input("Nb d'années entre les deux DPA : "))

# Calcul du cours actuel à partir de la capitalisation et du nb d'actions
P0_actuel = capitalisation / nb_actions

# 1) Taux de rendement des fonds propres (rFP) selon MEDAF
rFP, rf, prime = calcul_taux_rendement_fonds_propres(taux_sans_risque_pct, beta, prime_risque_pct)

# 2) Taux de croissance moyen des dividendes
# On considère DPA_2 comme la DPA la plus récente
DPA_ancienne = DPA_1
DPA_recente = DPA_2
g = calcul_croissance_moyenne(DPA_ancienne, DPA_recente, nb_annees)

# 3) Valeur du titre selon le modèle de Gordon
P0_gordon, D1 = valeur_titre_gordon(D0=DPA_recente, rFP=rFP, g=g)

# 4) Croissance implicite à partir du cours actuel
g_implicite = croissance_implicite(P0_actuel, D0=DPA_recente, rFP=rFP)

# Affichage des résultats et formules avec substitutions
print("\n----- RÉSULTATS -----")

# a) Taux de rendement des fonds propres
print("1) Taux rendement fonds propres (MEDAF) :")
print("Formule : E(Ri) = rf + β × prime")
print("Substitution :")
print("rf = {}% => {:.4f}".format(taux_sans_risque_pct, rf))
print("prime = {}% => {:.4f}".format(prime_risque_pct, prime))
print("E(Ri) = {:.4f} + ({:.2f} × {:.4f})".format(rf, beta, prime))
print("E(Ri) = {:.2f}%".format(rFP*100))

# b) Taux de croissance moyen des dividendes
print("\n2) Taux croissance moyen des dividendes :")
print("Formule : g = (DPA_recente / DPA_ancienne)^(1/nb_annees) - 1")
print("Substitution : g = ({:.2f} / {:.2f})^(1/{:.0f}) - 1".format(DPA_recente, DPA_ancienne, nb_annees))
print("g = {:.2f}%".format(g*100))

# c) Valeur du titre selon Gordon
print("\n3) Valeur du titre avec Gordon :")
print("Formule : P0 = D1 / (rFP - g) avec D1 = D0 × (1+g)")
print("Substitution de D1 : D1 = {:.2f} × (1 + {:.4f}) = {:.4f}".format(DPA_recente, g, D1))
print("Substitution de P0 : P0 = {:.4f} / ({:.4f} - {:.4f})".format(D1, rFP, g))
print("P0 = {:.2f}".format(P0_gordon))

# d) Croissance implicite
print("\n4) Croissance implicite :")
print("Formule : P0 = (D0 × (1 + g)) / (rFP - g)")
print("=> g = (rFP*P0 - D0)/(P0 + D0)")
print("Substitution : g_implicite = (({:.4f} × {:.2f}) - {:.2f}) / ({:.2f} + {:.2f})".format(rFP, P0_actuel, DPA_recente, P0_actuel, DPA_recente))
print("g implicite = {:.2f}%".format(g_implicite*100))





During your visit to our site, NumWorks needs to install "cookies" or use other technologies to collect data about you in order to:

With the exception of Cookies essential to the operation of the site, NumWorks leaves you the choice: you can accept Cookies for audience measurement by clicking on the "Accept and continue" button, or refuse these Cookies by clicking on the "Continue without accepting" button or by continuing your browsing. You can update your choice at any time by clicking on the link "Manage my cookies" at the bottom of the page. For more information, please consult our cookies policy.