tfutures.py

Created by matthieumorvant

Created on February 09, 2024

2.42 KB


def calculer_futures(nb_contrats, cours_initial, cours_echeance, dg_par_contrat, nominal_contrat, cours_par_dates):
    dg_initial = nb_contrats * dg_par_contrat
    print("Dépôt de garantie initial (DG): {:.2f} €".format(dg_initial))

    dg_courant = dg_initial
    cours_precedent = cours_initial
    print("\nLigne\tCC\t\tRésultat\tAppel de Marge\tDG")

    for i, cc in enumerate(cours_par_dates, 1):
        resultat = nb_contrats * (cours_precedent - cc) * nominal_contrat / 100
        dg_courant += resultat

        appel_marge = 0
        if dg_courant < dg_initial:
            appel_marge = dg_initial - dg_courant
            dg_courant = dg_initial

        print("{}\t\t{:.2f}\t\t{:.2f}\t\t{:.2f}\t\t\t{:.2f}".format(i, cc, resultat, appel_marge, dg_courant))
        cours_precedent = cc

    # Montant encaissé à la vente des contrats
    montant_encaisse = nb_contrats * cours_initial * nominal_contrat / 100
    detail_encaisse = "Montant encaissé = {} * {:.2f} * {} / 100 = {:.2f} €".format(nb_contrats, cours_initial, nominal_contrat, montant_encaisse)

    # Montant décaissé lors du dénouement de l'opération
    montant_decaisse = nb_contrats * cours_echeance * nominal_contrat / 100
    detail_decaisse = "Montant décaissé = {} * {:.2f} * {} / 100 = {:.2f} €".format(nb_contrats, cours_echeance, nominal_contrat, montant_decaisse)

    # Calcul du résultat global
    resultat_global = montant_encaisse - montant_decaisse
    detail_resultat_global = "Résultat global = {:.2f} - {:.2f} = {:.2f} €".format(montant_encaisse, montant_decaisse, resultat_global)

    return detail_encaisse, detail_decaisse, detail_resultat_global

# Paramètres d'entrée
nb_contrats = int(input("Nombre de contrats : "))
cours_initial = float(input("Cours initial : "))
cours_echeance = float(input("Cours à l'échéance : "))
dg_par_contrat = float(input("DG par contrat : "))
nominal_contrat = float(input("Nominal du contrat : "))
nb_dates = int(input("Nombre de cours à entrer : "))
cours_par_dates = [float(input("Cours {}: ".format(i + 1))) for i in range(nb_dates)]

# Exécution des calculs
detail_encaisse, detail_decaisse, detail_resultat_global = calculer_futures(nb_contrats, cours_initial, cours_echeance, dg_par_contrat, nominal_contrat, cours_par_dates)

# Affichage des détails des calculs et du résultat global
print("\nDétails des calculs:")
print(detail_encaisse)
print(detail_decaisse)
print(detail_resultat_global)