Boucles et Conditions en Python

Les boucles en Python

Les boucles sont un concept essentiel en programmation, permettant d'exécuter un bloc de code plusieurs fois en fonction d'une condition ou d'un nombre d'itérations déterminé. Dans le contexte de la finance, elles peuvent être utilisées pour analyser des données sur plusieurs périodes ou pour effectuer des calculs répétitifs. Un exemple très concret serait le backtest, le backtest est une simulation sur le passé d’une stratégie d’investissement ou de trading. Pour réaliser un backtest, nous allons parcourir chaque prix sur une période donnée, et cela se fait grâce à une boucle. En Python, on utilise principalement deux types de boucles : for et while.

La boucle for en Python

La boucle for est utilisée pour parcourir une séquence et exécuter un bloc de code pour chaque élément de cette séquence. Une séquence peut avoir plusieurs types comme une liste, un tuple, un dictionnaire ou une chaîne de caractères. Nous verrons ces types lors de la prochaine séance, pour l’instant cela n’est pas très important pour la compréhension.

Par exemple, supposons que nous avons un solde de compte actuel de 3000€, tous les mois, nous touchons un salaire de 2000€ et nous avons 1800€ de dépense. Nous souhaitons connaître à la fin de l’année (après 12 mois) le solde de notre compte :

balance = 3000
salary = 2000
expenses = 1800

for i in range(12):
	balance = balance + salary - expenses 
	print("Solde après", i+1, "mois", balance, "€")

print("Le solde de mon compte en fin d'année est :", balance, "€")

Ici, nous définissons trois variables : balance, salary et expenses. Ces variables représentent respectivement le solde de départ du compte, le salaire mensuel et les dépenses mensuelles.

Ensuite, nous utilisons une boucle for pour simuler les transactions financières sur une période de 12 mois. La fonction range(12) génère une séquence de nombres de 0 à 11 (12 éléments au total).

Vous pouvez remarquer que les 2 lignes en dessous du for ne sont pas alignées au même niveau. En effet, elles sont ce qu’on appelle indentées, c'est-à-dire espacées de 4 espaces à gauche. Les lignes indentées sont incluses par le for, alors que celles non indentées comme la dernière ne le seront pas. Concrètement, l’affichage “Solde après…” sera affiché 12 fois alors que le texte “Le solde de mon compte…” ne sera affiché qu’une seule fois.

Nous mettons par la suite à jour notre solde en lui ajoutant le salaire et en retirant les dépenses et affichons grâce à la fonction print() notre nouveau solde, ainsi que le mois de l’année. Comme nous l’avons vu plus haut, la fonction range(12) génère une séquence de nombres de 0 à 11 donc lors de l’affichage, nous ajouterons 1 à i afin de commencer au mois 1 au lieu du mois 0.

Enfin, nous affichons le solde final en fin d’année.

Python output result

La boucle while en Python

La boucle while est utilisée pour exécuter un bloc de code tant qu'une condition est vraie. Par exemple, supposons que nous voulons calculer combien de temps faut-il pour doubler un investissement avec un taux d'intérêt annuel fixe :

initial_investment = 1000
interest_rate = 0.05
years = 0
current_value = initial_investment

while current_value < initial_investment * 2:
    current_value = current_value * (1 + interest_rate)
    years += 1

print("Il faudra", years, "années pour doubler l'investissement.")

Dans cet exemple, le bloc de code à l'intérieur de la boucle while sera exécuté tant que la valeur de current_value est inférieure au double de l'investissement initial. À chaque itération, nous mettons à jour la valeur de current_value avec les intérêts et on incrémente years de 1.

Nous sortons donc de la boucle while lorsque la valeur de current_value devient supérieur à 2 fois notre investissement initial. A ce moment, nous affichons grâce à la fonction print la valeur de notre variable years qui représente le nombre d’année nécessaire pour doubler notre investissement.

Comment utiliser des conditions en Python ?

Les conditions sont également un concept important en programmation. Elles permettent d'exécuter un bloc de code si une condition est vraie, et éventuellement un autre bloc de code si cette condition est fausse. En Python, on utilise les mots-clés if, elif et else pour définir des conditions. if pour si, elif pour sinon si et enfin else pour sinon.

Voici un exemple simple :

bitcoin_price = 45000

if bitcoin_price <= 30000:
    print("Acheter")
elif bitcoin_price > 30000 and bitcoin_price <= 50000:
    print("Vendre la moitié")
elif bitcoin_price < 60000:
    print("Conserver")
else:
    print("Vendre la totalité")

Dans cet exemple, le programme va afficher "Vendre la moitié", car la valeur de bitcoin_price est 45 000, ce qui est supérieur à 30 000 et inférieur à 50 000. Vous découvrez ici le mot clé and qui représente l’opérateur et en français, il existe par ailleurs le or qui représente le ou en français.

Voici quelques autres exemples simples d’utilisation de conditions:

text = "hello"
if text == "hello" or text == "hi":
		print("text is hello or hi")
elif text != "hello":
		print("text is not hello and also no hi")

condition = True
if condition is True:
		print("My condition is true")
else:
		print("My condition is false")

Exemple combinant boucles et conditions en Python

Pour illustrer l'utilisation combinée des boucles et des conditions en Python, prenons un exemple où nous cherchons à déterminer combien de mois il vous faudra pour atteindre un objectif d'épargne, en tenant compte d'une augmentation possible de l'épargne mensuelle en fonction d'une promotion au travail.

  • Objectif d'épargne : 10 000 €
  • Épargne mensuelle actuelle : 400 €
  • Promotion prévue dans 6 mois
  • Augmentation de l'épargne mensuelle après promotion : 200 € (épargne mensuelle de 600 €)
# Variables
savings_goal = 10000
monthly_savings = 400
promotion_month = 6
savings_increase = 200

# Initialiser les compteurs
months_needed = 0
total_savings = 0

# Boucle pour atteindre l'objectif d'épargne
while total_savings < savings_goal:
    # Vérifie si la promotion a eu lieu
    if months_needed == promotion_month:
        monthly_savings += savings_increase

    # Ajoutez l'épargne mensuelle au total
    total_savings += monthly_savings

    # Incrémentez le compteur de mois nécessaires
    months_needed += 1

print(f"Il vous faudra {months_needed} mois pour atteindre votre objectif d'épargne de {savings_goal} €.")

Dans cet exemple, nous utilisons une boucle while pour simuler l'épargne mensuelle et vérifier si l'objectif d'épargne a été atteint. La condition if à l'intérieur de la boucle vérifie si la promotion a eu lieu et met à jour l'épargne mensuelle en conséquence. Le compteur months_needed permet de suivre le nombre de mois nécessaires pour atteindre l'objectif d'épargne.

Vous remarquerez également l’utilisation de += . Pour comprendre a += 1 est exactement la même chose que a = a + 1. L'opérateur += ajoute la valeur de droite à la variable de gauche, puis affecte le résultat à la variable de gauche. Les opérateurs -= ou ***= **existent également et marchent sur le même principe.

a = 5
a += 3 # a = a + 3
print(a) # Affiche 8

b = 10
b -= 1 # b = b - 1
print(b) # Affiche 9

c = 2
c *= 15 # c = c * 15
print(c) # Affiche 30

Mise en pratique

Pour mettre en pratique les concepts abordés dans cette partie, essayons de résoudre un exercice simple. Imaginons que vous avez investi 1000 € dans différents actifs financiers, et vous voulez savoir combien d'années, il faudra pour atteindre un certain objectif de capitalisation.

Supposons que vous avez les informations suivantes :

  • Investissement initial : 1000 €
  • Objectif de capitalisation : 2000 €
  • Taux d'intérêt annuel : 4 %

Questions :

  1. Combien d'années faudra-t-il pour atteindre l'objectif de capitalisation ?
  2. Modifiez le taux d'intérêt annuel et vérifiez l'impact sur le nombre d'années nécessaires pour atteindre l'objectif.
  3. Ajoutez une boucle for pour tester différents taux d'intérêt annuels (par exemple, de 2 % à 8 %, par pas de 1 %) et affichez le nombre d'années nécessaires pour atteindre l'objectif pour chaque taux.

Cet exercice devrait vous permettre de mieux comprendre l'utilisation des boucles et des conditions en Python appliquées au contexte de la finance. Un exemple de correction se trouve ici: https://github.com/RobotTraders/Python_For_Finance/blob/main/exercise_correction_chapter_2.ipynb. N'hésitez pas à adapter cet exemple à vos propres besoins et à explorer d'autres scénarios financiers.