tfuturesach.py

Created by matthieumorvant

Created on February 09, 2024

2.66 KB


def calculer_futures_achat(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  # Pour le premier calcul, le 'cours d'avant' est le cours initial
    print("\nLigne\tCC\t\tRésultat\tAppel de Marge\tDG")

    for i, cc in enumerate(cours_par_dates, 1):
        # Pour l'achat, le résultat est calculé comme la différence entre le cours actuel et le cours précédent
        resultat = nb_contrats * (cc - cours_precedent) * nominal_contrat / 100

        # Mise à jour du DG et gestion de l'appel de marge
        dg_temp = dg_courant + resultat  # DG théorique après le résultat
        appel_marge = 0
        if dg_temp < dg_initial:
            appel_marge = dg_initial - dg_temp  # Calcul de l'appel de marge si nécessaire
            dg_courant = dg_initial  # Réajuster le DG au minimum initial
        else:
            dg_courant = dg_temp  # Sinon, mise à jour du DG avec le résultat

        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  # Mise à jour du 'cours d'avant' pour le prochain calcul

    # Montant décaissé à l'achat des contrats
    montant_decaisse = nb_contrats * cours_initial * nominal_contrat / 100

    # Montant encaissé lors du dénouement de l'opération
    montant_encaisse = nb_contrats * cours_echeance * nominal_contrat / 100

    # Calcul du résultat global
    resultat_global = montant_encaisse - montant_decaisse

    # Affichage des formules avec les valeurs
    print("\nMontant décaissé = {} * {:.2f} * {} / 100 = {:.2f} €".format(nb_contrats, cours_initial, nominal_contrat, montant_decaisse))
    print("Montant encaissé = {} * {:.2f} * {} / 100 = {:.2f} €".format(nb_contrats, cours_echeance, nominal_contrat, montant_encaisse))
    print("Résultat global = {:.2f} - {:.2f} = {:.2f} €".format(montant_encaisse, montant_decaisse, 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
calculer_futures_achat(nb_contrats, cours_initial, cours_echeance, dg_par_contrat, nominal_contrat, cours_par_dates)