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

Boucles for et range

Position dans le parcoursModule 1 sur 11 · Sujet 6 sur 33
1.6 Boucles for et range
—Score du lab— / 100XP total—Série—

Répéter un bloc pour chaque élément

Une boucle for exécute son bloc indenté une fois pour chaque élément d'une collection, en donnant un nom à l'élément pour ce tour. Ici, la collection est une liste, écrite avec des crochets et des virgules (les listes auront leur propre sujet plus tard). La syntaxe ressemble à celle de if : deux-points à la fin de la première ligne et un bloc indenté dessous.

prices = [184.25, 184.5, 184.0]
for price in prices:
    print(price)  # 184.25, then 184.5, then 184.0

range : compter sans liste

range(n) produit les entiers de 0 à n - 1 : la valeur d'arrêt n'est pas incluse, c'est pourquoi range(5) contient cinq nombres. range(start, stop) commence où vous le dites, et range(start, stop, step) avance par pas de step, qui peut être négatif pour compter à rebours. Servez-vous-en pour répéter une action un certain nombre de fois ou parcourir des positions.

# range counts, and stops before the stop value
print(list(range(5)))          # [0, 1, 2, 3, 4]
print(list(range(2, 10, 3)))   # [2, 5, 8]
print(list(range(3, 0, -1)))   # [3, 2, 1]

Le motif de l'accumulateur

La plupart des boucles suivent un même schéma : initialiser une variable avant la boucle, la mettre à jour dans la boucle, l'utiliser après. total += price * quantity est un raccourci de total = total + price * quantity. Ici, chaque élément de la liste est une paire, et la ligne de boucle nomme les deux moitiés à la fois (les sujets suivants expliqueront correctement ce déballage).

# Accumulate a total over the trades
trades = [(184.25, 200), (185.0, 100), (183.5, 50)]
total = 0.0
for price, quantity in trades:
    total += price * quantity
print(total)  # 64525.0

Parcourir des positions

Parfois il faut comparer chaque élément au précédent. Parcourez les positions avec range(1, len(prices)) : elle commence à 1, donc prices[i - 1] est toujours valide. len() donne le nombre d'éléments et prices[i] prend l'élément à la position i, en comptant à partir de 0.

# Compare each price with the one before it
prices = [184.0, 184.5, 184.25, 185.0]
ups = 0
for i in range(1, len(prices)):
    if prices[i] > prices[i - 1]:
        ups += 1
print(ups)  # 2

Construire une liste au fil de la boucle

Pour recueillir un résultat par tour, partez d'une liste vide [] et appelez .append(value) dans la boucle. Les échelles de prix, les totaux cumulés et les signaux par jour se construisent tous ainsi. La liste est renvoyée (ou utilisée) après la fin de la boucle.

# Build a list of prices, one per tick level
start, tick = 184.0, 0.25
ladder = []
for level in range(4):
    ladder.append(start + level * tick)
print(ladder)  # [184.0, 184.25, 184.5, 184.75]
La variable de boucle reste après la boucleAprès la boucle, la variable de boucle garde sa dernière valeur, et une variable définie dans la boucle existe aussi ensuite. Si la collection est vide, le bloc ne s'exécute jamais : une variable créée seulement à l'intérieur n'existerait pas, donc initialisez-la avant la boucle.

À suivre : les boucles while, break et continue, pour répéter jusqu'à ce qu'une condition change plutôt que pour un nombre fixe d'éléments.

Lab : ce qui est noté

  • Additionner la valeur de plusieurs transactions avec total_notional25 pts
  • Dérouler des niveaux de prix avec price_ladder25 pts
  • Compter les jours de hausse du prix avec count_up_days25 pts
  • Tenir un total cumulé avec running_total25 pts
Explorateur · lab-6-1
▾ lab-6-1
…
bash · dans le navigateur
learner@quantcraft:~/lab-6-1$
Python pas encore chargéPythonLn 1, Col 1Spaces: 4UTF-8

Réinitialiser ce sujet ?

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