σμ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 AcademySkills
Ctrl K
AO
+1,2 Tsd. Lernende
AnmeldenBeitreten ↗
Skills
AO
+1,2 Tsd. Lernende
Anmelden
  • English
  • Français
  • Español
  • العربية
  • Português
  • Deutsch
  • 日本語
  • 中文
Python-Skill›Modul 1 · Python-Grundlagen für Quants›Thema 1.11·~30 Min.Einsteiger

List Comprehensions

Position in der SkillModul 1 von 11 · Thema 11 von 33
1.11 List Comprehensions
—Lab-Punkte— / 100XP gesamt—Serie—

Von der Schleife zum einzelnen Ausdruck

Eine sehr häufige Schleife beginnt mit einer leeren Liste und hängt pro Element ein Ergebnis an. Eine List Comprehension sagt dasselbe in einem Ausdruck in eckigen Klammern: [was_gebaut_wird for item in sammlung]. Lesen Sie sie von links nach rechts: „baue dies, für jedes Element in jenem“. Sie ist kürzer und zeigt auf einen Blick, dass das Ganze eine neue Liste ist.

prices = [184.0, 185.0, 183.0]

# The loop way
notionals = []
for price in prices:
    notionals.append(price * 100)
print(notionals)  # [18400.0, 18500.0, 18300.0]

# The comprehension way: the same list in one line
notionals = [price * 100 for price in prices]
print(notionals)  # [18400.0, 18500.0, 18300.0]

Nur manche Elemente behalten: if

Hängen Sie if condition am Ende an, um nur die Elemente zu behalten, die einen Test bestehen. So filtert man: positive Renditen, Orders über einer Größe, passende Symbole. Elemente, die den Test nicht bestehen, fallen einfach weg, und die Reihenfolge der übrigen bleibt erhalten.

# Keep only the items that pass a test
returns = [0.01, -0.02, 0.005, -0.001, 0.03]
gains = [r for r in returns if r > 0]
print(gains)  # [0.01, 0.005, 0.03]

Positionen und Paare

Der for-Teil funktioniert wie eine normale Schleife: Er kann range(...) durchlaufen, um Positionen zu nutzen, und beide Hälften eines Paars benennen (for symbol, price in quotes). Nutzen Sie Positionen, wenn jedes Ergebnis von einem Nachbarn abhängt, etwa eine Rendite aus dem Vorpreis; nutzen Sie Paare, wenn jedes Element mehrere Felder enthält.

# Simple returns from a price series, using positions
prices = [100.0, 102.0, 101.0]
returns = [prices[i] / prices[i - 1] - 1 for i in range(1, len(prices))]
print([round(r, 4) for r in returns])  # [0.02, -0.0098]

# Pairs can be unpacked, and the result can be transformed
quotes = [("aapl", 184.5), ("msft", 410.2), ("goog", 171.0)]
above = [symbol.upper() for symbol, price in quotes if price > 180]
print(above)  # ['AAPL', 'MSFT']

if/else steht vorn

Ein abschließendes if entfernt Elemente. Wollen Sie jedes Element je nach Bedingung verändern, verwenden Sie den bedingten Ausdruck a if condition else b als ersten Teil. Beides zu verwechseln ist ein häufiger Fehler: if allein steht nach dem for, if ... else davor.

# if/else changes each item; a plain if (at the end) drops items
returns = [0.01, -0.02, 0.005, -0.001, 0.03]
signals = ["long" if r > 0 else "flat" for r in returns]
print(signals)  # ['long', 'flat', 'long', 'flat', 'long']
Bauen Sie Listen, führen Sie keine Aktionen ausEine Comprehension dient dazu, aus einer Liste eine andere zu erzeugen. Wenn Sie nur ausgeben, Orders senden oder etwas ändern wollen, nehmen Sie eine normale for-Schleife. Wird eine Comprehension lang oder verschachtelt, zerlegen Sie sie in eine Schleife oder Hilfsfunktion: Lesbarkeit schlägt Raffinesse.
  • [expression for item in items]: ein Ergebnis pro Element.
  • ... if condition am Ende: nur manche Elemente behalten.
  • a if condition else b vorn: jedes Element verändern.

Als Nächstes: Listen, die Sammlung, mit der diese Schleifen und Comprehensions gearbeitet haben: Indizierung, Slicing, Hinzufügen, Entfernen und Sortieren.

Lab: Was bewertet wird

  • Mit notionals jeden Trade in einem Ausdruck bewerten25 Pkt.
  • Mit simple_returns Preise in Renditen umwandeln25 Pkt.
  • Mit positive_returns nur die Gewinne behalten25 Pkt.
  • Mit symbols_above Symbole zugleich filtern und bereinigen25 Pkt.
Explorer · lab-11-1
▾ lab-11-1
…
bash · im Browser
learner@quantcraft:~/lab-11-1$
Python noch nicht geladenPythonLn 1, Col 1Spaces: 4UTF-8

Dieses Thema zurücksetzen?

Alles in lab-11-1 wird auf die Startdateien zurückgesetzt und das Terminal geleert. Ihre aktuelle Lösung geht verloren – das lässt sich nicht rückgängig machen.

Wird zurückgesetzt
  • main.py → Startcode
  • Terminal-Verlauf und Testausgabe
  • Nicht eingereichte Änderungen
Bleibt erhalten
  • Beste Lab-Punktzahl
  • Ihre XP und Ihre Serie
  • Vorlesungsfortschritt und Notizen

Melde dich an, um deinen Code auszuführen.

Alle Lektionen kannst du kostenlos lesen. Erstelle ein Konto oder melde dich an, um Code auszuführen, Tests zu starten und dieses Lab abzugeben.

  • IDE im Browser mit Bash-Terminal — nichts zu installieren
  • Sofortige Bewertung, XP und dein Platz auf der Skill
Konto erstellenAnmelden
ODER
Weiter mit GitHub