σμ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.15·~30 minDébutant

Les ensembles

Position dans le parcoursModule 1 sur 11 · Sujet 15 sur 33
1.15 Les ensembles
—Score du lab— / 100XP total—Série—

Une collection sans doublons

Un ensemble (set) contient chaque valeur au plus une fois et n'a pas de position : {"AAPL", "MSFT", "GOOG"}. Ajouter une valeur déjà présente ne change rien. set(items) transforme n'importe quel itérable en ensemble, ce qui est le moyen le plus rapide de supprimer les doublons, et len compte alors les valeurs distinctes. Comme un ensemble n'a pas d'ordre, on ne peut pas l'indexer, et l'ordre affiché ne doit pas servir de référence. Un ensemble vide s'écrit set() : {} est un dictionnaire vide.

symbols = ["AAPL", "MSFT", "AAPL", "GOOG", "MSFT"]

# set() removes repeats
unique = set(symbols)
print(len(symbols), len(unique))      # 5 3

# Adding something already there changes nothing
unique.add("AAPL")
unique.add("TSLA")
print(len(unique))                    # 4

# {} is a dict; an empty set is set()
print(type({}), type(set()))          # <class 'dict'> <class 'set'>

Des tests d'appartenance rapides

x in some_set répond presque instantanément, même avec des millions de valeurs, car un ensemble trouve une valeur par son hachage au lieu de balayer. Le même test sur une liste examine les éléments un par un et ralentit quand la liste grandit. Si vous posez souvent in sur la même collection, par exemple pour vérifier chaque ordre entrant contre une liste de symboles interdits, transformez cette collection en ensemble une seule fois. Les membres d'un ensemble doivent être hachables, comme les clés d'un dictionnaire.

# Membership: a set is the fast structure for "is it in there?"
banned = {"GME", "AMC", "BBBY"}
orders = ["AAPL", "GME", "MSFT", "AMC"]

allowed = [symbol for symbol in orders if symbol not in banned]
print(allowed)                       # ['AAPL', 'MSFT']

# Sets only keep hashable values
try:
    {["AAPL"]}
except TypeError as error:
    print("not hashable:", error)

L'arithmétique des ensembles

Les ensembles se combinent comme en mathématiques. a | b est l'union (dans l'un ou l'autre), a & b l'intersection (dans les deux), a - b la différence (dans a mais pas dans b) et a ^ b la différence symétrique (dans un seul). Chacune existe aussi comme méthode, par exemple a.union(b), qui accepte n'importe quel itérable. Toutes renvoient un nouvel ensemble et laissent a et b intacts. C'est exactement ce qu'il faut pour comparer deux univers de symboles ou deux listes de positions.

# Comparing yesterday's and today's universe
yesterday = {"AAPL", "MSFT", "GOOG", "IBM"}
today = {"AAPL", "MSFT", "TSLA"}

print(sorted(yesterday | today))   # ['AAPL', 'GOOG', 'IBM', 'MSFT', 'TSLA']
print(sorted(yesterday & today))   # ['AAPL', 'MSFT']
print(sorted(today - yesterday))   # ['TSLA']   (new listings)
print(sorted(yesterday - today))   # ['GOOG', 'IBM']   (dropped)
print(sorted(yesterday ^ today))   # ['GOOG', 'IBM', 'TSLA']

Modifier un ensemble et garder l'ordre

add(x) insère une valeur, update(items) en insère plusieurs, discard(x) retire une valeur si elle est présente (sans bruit), et remove(x) la retire mais lève KeyError si elle est absente. Un ensemble oublie l'ordre : quand l'ordre compte, il faut une liste. sorted(some_set) donne une liste triée, et pour supprimer les doublons en gardant l'ordre de première apparition, parcourez les valeurs en mémorisant dans un ensemble ce que vous avez déjà vu (seen). Ce test est rapide parce que c'est un ensemble.

# Remove repeats and keep the first-seen order
symbols = ["MSFT", "AAPL", "MSFT", "GOOG", "AAPL"]
seen = set()
ordered = []
for symbol in symbols:
    if symbol not in seen:
        seen.add(symbol)
        ordered.append(symbol)
print(ordered)             # ['MSFT', 'AAPL', 'GOOG']

# discard is quiet, remove is strict
seen.discard("TSLA")
try:
    seen.remove("TSLA")
except KeyError:
    print("TSLA was not in the set")
Les ensembles sont sans ordre : triez avant d'afficher ou de comparerDeux ensembles égaux peuvent s'afficher dans des ordres différents : ne dépendez jamais de cet ordre. Quand vous renvoyez ou affichez le résultat d'une opération ensembliste, entourez-le de sorted(...) pour obtenir une liste stable. Les labs demandent des listes triées précisément pour cela.
  • set(items) : garder chaque valeur une fois ; len(set(items)) compte les valeurs distinctes.
  • x in s est rapide ; a | b, a & b, a - b, a ^ b construisent de nouveaux ensembles.
  • Les ensembles n'ont pas d'ordre : utilisez sorted(s) quand il faut une liste.

À suivre : lire et écrire des fichiers texte, pour que vos programmes conservent des données d'une exécution à l'autre.

Lab : ce qui est noté

  • Compter les symboles différents avec distinct_count25 pts
  • Repérer les symboles apparus avec new_listings25 pts
  • Trouver le recoupement de deux portefeuilles avec common_symbols25 pts
  • Supprimer les doublons en gardant l'ordre avec dedupe_keep_order25 pts
Explorateur · lab-15-1
▾ lab-15-1
…
bash · dans le navigateur
learner@quantcraft:~/lab-15-1$
Python pas encore chargéPythonLn 1, Col 1Spaces: 4UTF-8

Réinitialiser ce sujet ?

Tout le contenu de lab-15-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