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)