σμ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.15·~30 Min.Einsteiger

Sets

Position in der SkillModul 1 von 11 · Thema 15 von 33
1.15 Sets
—Lab-Punkte— / 100XP gesamt—Serie—

Eine Sammlung ohne Wiederholungen

Eine Menge (set) enthält jeden Wert höchstens einmal und hat keine Position: {"AAPL", "MSFT", "GOOG"}. Einen schon vorhandenen Wert hinzuzufügen ändert nichts. set(items) macht aus jedem Iterable eine Menge, der schnellste Weg, Duplikate zu entfernen, und len zählt dann die verschiedenen Werte. Da eine Menge keine Ordnung hat, lässt sie sich nicht indizieren, und auf die beim Ausgeben sichtbare Reihenfolge darf man sich nicht verlassen. Die leere Menge ist set(): {} ist ein leeres Dictionary.

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'>

Schnelle Zugehörigkeitstests

x in some_set antwortet fast sofort, selbst bei Millionen von Werten, weil eine Menge einen Wert über seinen Hash findet, statt alles abzusuchen. Derselbe Test auf einer Liste prüft die Elemente nacheinander und wird langsamer, je größer die Liste wird. Fragen Sie also oft mit in dieselbe Sammlung ab, etwa jede eingehende Order gegen eine Liste gesperrter Symbole, wandeln Sie sie einmal in eine Menge um. Mitglieder einer Menge müssen hashbar sein, wie Dictionary-Schlüssel.

# 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)

Mengenarithmetik

Mengen lassen sich wie in der Schulmathematik verknüpfen. a | b ist die Vereinigung (in einer von beiden), a & b der Durchschnitt (in beiden), a - b die Differenz (in a, aber nicht in b) und a ^ b die symmetrische Differenz (in genau einer). Jede gibt es auch als Methode, etwa a.union(b), die jedes Iterable akzeptiert. Alle liefern eine neue Menge und lassen a und b unverändert. Genau das braucht man, um zwei Symboluniversen oder zwei Bestandslisten zu vergleichen.

# 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']

Eine Menge ändern und die Reihenfolge behalten

add(x) fügt einen Wert ein, update(items) mehrere, discard(x) entfernt einen Wert, falls vorhanden (stillschweigend), und remove(x) entfernt ihn, löst aber KeyError aus, wenn er fehlt. Eine Menge vergisst die Reihenfolge; kommt es auf sie an, braucht man eine Liste: sorted(some_set) liefert eine sortierte Liste, und um Duplikate unter Beibehaltung der Reihenfolge des ersten Auftretens zu entfernen, durchlaufen Sie die Werte und merken sich in einer Menge, was Sie schon gesehen haben (seen). Die Prüfung ist schnell, weil es eine Menge ist.

# 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")
Mengen haben keine Ordnung: Sortieren Sie vor Anzeige oder VergleichZwei gleiche Mengen können in verschiedener Reihenfolge ausgegeben werden; verlassen Sie sich nie auf diese Reihenfolge. Wenn Sie das Ergebnis einer Mengenoperation zurückgeben oder ausgeben, verpacken Sie es in sorted(...), um eine stabile Liste zu erhalten. Die Labs verlangen genau deshalb sortierte Listen.
  • set(items): jeden Wert einmal behalten; len(set(items)) zählt die verschiedenen Werte.
  • x in s ist schnell; a | b, a & b, a - b, a ^ b bauen neue Mengen.
  • Mengen haben keine Ordnung: Nehmen Sie sorted(s), wenn Sie eine Liste brauchen.

Als Nächstes: Textdateien lesen und schreiben, damit Ihre Programme Daten zwischen Läufen behalten.

Lab: Was bewertet wird

  • Mit distinct_count verschiedene Symbole zählen25 Pkt.
  • Mit new_listings neu erschienene Symbole erkennen25 Pkt.
  • Mit common_symbols die Schnittmenge zweier Portfolios finden25 Pkt.
  • Mit dedupe_keep_order Wiederholungen entfernen und die Reihenfolge behalten25 Pkt.
Explorer · lab-15-1
▾ lab-15-1
…
bash · im Browser
learner@quantcraft:~/lab-15-1$
Python noch nicht geladenPythonLn 1, Col 1Spaces: 4UTF-8

Dieses Thema zurücksetzen?

Alles in lab-15-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