σμimplied vol · KKmax(S−K,0)udβρᵢⱼfat tailsPnL · drawdownyield · TdSₜ = μSₜ dt + σSₜ dWₜC = S·N(d₁) − K·e⁻ʳᵀ·N(d₂)σₚ² = wᵀΣwd₁ = [ln(S/K) + (r + σ²⁄2)T] ⁄ σ√T∂V/∂t + ½σ²S²·∂²V/∂S² + rS·∂V/∂S − rV = 0Sharpe = (Rₚ − R_f) ⁄ σₚVaR₉₉ = μ − 2.33σρ = Cov(X,Y) ⁄ σₓσᵧE[Rₚ] = Σ wᵢ·E[Rᵢ]φ(x) = e^(−x²/2) ⁄ √2πE[Rᵢ] = R_f + βᵢ(E[Rₘ] − R_f)dXₜ = θ(μ − Xₜ)dt + σ dWₜσ²ₜ = ω + α·ε²ₜ₋₁ + β·σ²ₜ₋₁C − P = S − K·e⁻ʳᵀΔ = ∂V/∂S Γ = ∂²V/∂S²p = (e^(rΔt) − d) ⁄ (u − d)rₜ = ln(Pₜ ⁄ Pₜ₋₁)E[Xₜ₊₁ | ℱₜ] = Xₜf* = (bp − q) ⁄ bz = (x − μ) ⁄ σP(N=k) = λᵏe^(−λ) ⁄ k!Θ = −∂V/∂Tν = S·φ(d₁)·√Tmin wᵀΣw s.t. wᵀμ = μ*∫Σ∂∞λ
σμimplied vol · KKmax(S−K,0)udβρᵢⱼfat tailsPnL · drawdownyield · TdSₜ = μSₜ dt + σSₜ dWₜC = S·N(d₁) − K·e⁻ʳᵀ·N(d₂)σₚ² = wᵀΣwd₁ = [ln(S/K) + (r + σ²⁄2)T] ⁄ σ√T∂V/∂t + ½σ²S²·∂²V/∂S² + rS·∂V/∂S − rV = 0Sharpe = (Rₚ − R_f) ⁄ σₚVaR₉₉ = μ − 2.33σρ = Cov(X,Y) ⁄ σₓσᵧE[Rₚ] = Σ wᵢ·E[Rᵢ]φ(x) = e^(−x²/2) ⁄ √2πE[Rᵢ] = R_f + βᵢ(E[Rₘ] − R_f)dXₜ = θ(μ − Xₜ)dt + σ dWₜσ²ₜ = ω + α·ε²ₜ₋₁ + β·σ²ₜ₋₁C − P = S − K·e⁻ʳᵀΔ = ∂V/∂S Γ = ∂²V/∂S²p = (e^(rΔt) − d) ⁄ (u − d)rₜ = ln(Pₜ ⁄ Pₜ₋₁)E[Xₜ₊₁ | ℱₜ] = Xₜf* = (bp − q) ⁄ bz = (x − μ) ⁄ σP(N=k) = λᵏe^(−λ) ⁄ k!Θ = −∂V/∂Tν = S·φ(d₁)·√Tmin wᵀΣw s.t. wᵀμ = μ*∫Σ∂∞λ
uantCraft AcademyParcours
Ctrl K
AO
+1,2 k apprenants
ConnexionRejoindre ↗
Parcours
AO
+1,2 k apprenants
Connexion
  • English
  • Français
  • Español
  • العربية
  • Português
  • Deutsch
  • 日本語
  • 中文
Parcours Python›Module 1 · Les bases de Python pour les quants›Sujet 1.20·~35 minDébutant

Modules et imports

Position dans le parcoursModule 1 sur 11 · Sujet 20 sur 33
1.20 Modules et imports
—Score du lab— / 100XP total—Série—

Réutiliser du code avec import

Un module est un fichier Python dont les noms (fonctions, constantes, classes) peuvent être utilisés par d'autres codes. import math charge le module math de la bibliothèque standard et le rend disponible sous ce nom : on écrit alors math.sqrt(2). Python est livré avec des centaines de modules, et tout ce que vous installerez plus tard (par exemple numpy) s'importe de la même façon. Placez les imports en haut du fichier pour qu'on voie tout de suite de quoi il dépend.

import math
import statistics

# Use a name from a module with module.name
print(math.sqrt(252))                     # 15.874507866387544
print(round(math.sqrt(252), 2))           # 15.87

returns = [0.01, -0.02, 0.015, 0.0]
print(round(statistics.stdev(returns), 4))  # 0.0155

from ... import et alias

from datetime import date n'apporte qu'un nom, d'où date(2025, 1, 2) sans préfixe. import numpy as np donne un alias plus court à un module, une convention que l'on voit partout. Évitez from module import * : il déverse des noms inconnus dans votre fichier et peut remplacer silencieusement les vôtres. Préférez des noms clairs, et gardez le préfixe quand il rend l'origine évidente.

from datetime import date
from math import sqrt as square_root
import statistics as stats

# Only the names you asked for are imported
start = date(2025, 1, 2)
end = date(2025, 3, 3)
print((end - start).days)                  # 60
print(square_root(16))                     # 4.0
print(stats.mean([1.0, 2.0, 3.0]))         # 2.0

Vos propres modules

Tout fichier .py est un module. Si fees.py est à côté de main.py et définit commission, alors main.py peut écrire import fees et appeler fees.commission(...). Quand un fichier est lancé directement, Python met son __name__ à "__main__" ; quand il est importé, __name__ est le nom du module. La garde if __name__ == "__main__": fait donc s'exécuter du code seulement quand le fichier est exécuté, pas quand il est importé, ce qui évite aux démos et aux tests de gêner.

# fees.py
RATE = 0.001

def commission(notional):
    return notional * RATE

if __name__ == "__main__":
    print(commission(10000))   # runs only with: python fees.py

# main.py (next to fees.py)
import fees

print(fees.commission(50000))  # 50.0
print(__name__)                # __main__

Où Python cherche, et un piège classique

Avec import name, Python cherche d'abord dans le dossier du script exécuté, puis dans la bibliothèque standard et les paquets installés (la liste est sys.path). La première correspondance l'emporte. C'est pourquoi un de vos fichiers nommé random.py ou statistics.py masque le vrai module, et import random charge alors votre fichier et échoue de façon déroutante. Ne nommez jamais vos fichiers comme des modules de la bibliothèque standard. Évitez aussi deux modules qui s'importent mutuellement en haut (import circulaire) ; déplacez la partie commune dans un troisième module.

import sys
import random

# Imported modules are remembered in sys.modules; sys.path is the search list
print("random" in sys.modules)               # True
print(random.__name__)                       # random
print(len(sys.path) > 0)                     # True

# A quick tour of useful standard-library modules
import collections, datetime, itertools, pathlib
print(collections.Counter("AAPL")["A"])      # 2
print(datetime.date(2025, 1, 2).weekday())   # 3  (Thursday; Monday is 0)
Cherchez d'abord dans la bibliothèque standardAvant d'écrire vous-même de l'arithmétique de dates, des statistiques ou de la gestion de CSV ou de JSON, vérifiez si un module standard le fait déjà (datetime, statistics, csv, json, collections, itertools, pathlib). Du code de bibliothèque testé est presque toujours plus sûr qu'une version maison rapide, et le lab signale l'analyse manuelle des dates comme une erreur de technique.
  • import module puis module.name ; from module import name pour un nom ; import module as short pour un alias.
  • Les imports vont en haut ; évitez import *.
  • Ne nommez pas vos fichiers comme des modules standard ; utilisez if __name__ == "__main__": pour le code qui ne doit s'exécuter que directement.

À suivre : paquets et organisation de projet, comment ranger plusieurs modules en dossiers qui s'importent proprement.

Lab : ce qui est noté

  • Mesurer la volatilité avec daily_vol25 pts
  • Ramener la volatilité à un an avec annualize_vol25 pts
  • Compter les jours entre deux dates avec days_between25 pts
  • Distinguer jours ouvrés et week-ends avec is_business_day25 pts
Explorateur · lab-20-1
▾ lab-20-1
…
bash · dans le navigateur
learner@quantcraft:~/lab-20-1$
Python pas encore chargéPythonLn 1, Col 1Spaces: 4UTF-8

Réinitialiser ce sujet ?

Tout le contenu de lab-20-1 revient aux fichiers de départ et le terminal est vidé. Votre solution actuelle sera perdue : cette action est irréversible.

Sera réinitialisé
  • main.py → code de départ
  • Historique du terminal et sortie des tests
  • Modifications non soumises
Sera conservé
  • Meilleur score du lab
  • Votre XP et votre série
  • Progression du cours et notes

Connectez-vous pour exécuter votre code.

Tous les cours sont gratuits à lire. Créez un compte ou connectez-vous pour exécuter du code, lancer les tests et soumettre ce lab.

  • IDE dans le navigateur avec terminal bash — rien à installer
  • Correction instantanée, XP et votre place dans le parcours
Créer un compteSe connecter
OU
Continuer avec GitHub