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)

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.