σμ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.12·~40 Min.Einsteiger

Listen

Position in der SkillModul 1 von 11 · Thema 12 von 33
1.12 Listen
—Lab-Punkte— / 100XP gesamt—Serie—

Eine geordnete Sammlung, die sich ändern lässt

Eine Liste hält Werte in Reihenfolge in eckigen Klammern: [184.0, 185.5, 183.2]. Sie kann beliebige Werte enthalten, und len(prices) sagt, wie viele. Jedes Element hat eine Position, den Index, gezählt ab 0. Ein negativer Index zählt vom Ende, -1 ist also das letzte Element. Eine nicht vorhandene Position löst einen IndexError aus.

prices = [184.0, 185.5, 183.2, 186.1]

# Reading by position
print(prices[0])    # 184.0
print(prices[-1])   # 186.1
print(len(prices))  # 4

# A list is changeable: assign to a position
prices[1] = 185.0
print(prices)       # [184.0, 185.0, 183.2, 186.1]

Slicing: ein Teil einer Liste

prices[start:stop] liefert eine neue Liste von start bis ausschließlich stop. Lassen Sie eine Grenze weg, reicht die Teilliste bis zu diesem Ende: prices[:3] sind die ersten drei, prices[-3:] die letzten drei. Ein Slice löst nie einen Fehler aus, wenn er zu weit geht, er endet einfach am Ende. Eine Falle: -0 ist gleich 0, also ist prices[-0:] die ganze Liste, nicht eine leere.

prices = [184.0, 185.0, 183.2, 186.1, 187.4]

# Slices are new lists
print(prices[1:3])   # [185.0, 183.2]
print(prices[:2])    # [184.0, 185.0]
print(prices[-2:])   # [186.1, 187.4]

# Going past the end is fine, but -0 is not "none"
print(prices[3:99])  # [186.1, 187.4]
print(prices[-0:])   # the whole list

Hinzufügen und Entfernen

append(x) hängt ein Element hinten an, extend(items) mehrere, und insert(i, x) setzt eines an Position i. pop() entfernt und liefert das letzte Element (pop(i) das an i), remove(x) löscht das erste Element, das x entspricht. Diese Methoden ändern die Liste an Ort und Stelle und liefern None; prices = prices.append(1) macht prices also zu None. Das Addieren mit + erzeugt dagegen eine neue Liste.

# Changing a list in place
fills = [100, 250]
fills.append(75)
fills.extend([40, 60])
print(fills)           # [100, 250, 75, 40, 60]

last = fills.pop()
fills.remove(250)
print(last, fills)     # 60 [100, 75, 40]

# + builds a new list and leaves the old ones alone
both = fills + [10]
print(both, fills)     # [100, 75, 40, 10] [100, 75, 40]

Sortieren

Es gibt zwei Wege zu sortieren. prices.sort() ordnet die Liste an Ort und Stelle neu und liefert None. sorted(prices) lässt das Original unberührt und liefert eine neue sortierte Liste; es akzeptiert auch jedes Iterable. Beide kennen reverse=True für „größte zuerst“ und key=..., um nach etwas anderem zu sortieren, etwa key=len. Bevorzugen Sie sorted, wenn anderer Code die ursprüngliche Reihenfolge noch braucht.

# sorted() returns a new list, sort() changes the old one
prices = [185.0, 183.2, 187.4, 184.0]

ranked = sorted(prices, reverse=True)
print(ranked)      # [187.4, 185.0, 184.0, 183.2]
print(prices)      # [185.0, 183.2, 187.4, 184.0] (unchanged)

prices.sort()
print(prices)      # [183.2, 184.0, 185.0, 187.4]

Zwei Namen, eine Liste

backup = prices kopiert die Liste nicht: Beide Namen zeigen auf dasselbe Objekt, eine Änderung an einem wirkt also auf das andere. Eine echte (flache) Kopie erzeugen Sie mit prices.copy(), list(prices) oder dem Slice prices[:]. Dasselbe gilt für Funktionen: Ruft eine Funktion .append, .sort oder .pop auf ihrem Argument auf, ändert sie auch die Liste des Aufrufers, womit dieser selten rechnet.

# A second name is not a copy
prices = [184.0, 185.0]
alias = prices
alias.append(186.0)
print(prices)   # [184.0, 185.0, 186.0]

# A real copy is independent
backup = list(prices)
backup.append(187.0)
print(prices)   # [184.0, 185.0, 186.0]
print(backup)   # [184.0, 185.0, 186.0, 187.0]
Geben Sie eine neue Liste zurück, überraschen Sie den Aufrufer nichtEine Funktion, die eine Liste erhält, sollte sie normalerweise unverändert lassen und eine neue zurückgeben. Nutzen Sie sorted(...), Slices und Comprehensions, die alle neue Listen bauen. Die Labs prüfen, dass die übergebene Liste danach unverändert ist.
  • items[i], items[-1]: ein Element; items[a:b]: eine neue Liste.
  • append, extend, insert, pop, remove ändern die Liste und liefern nichts Brauchbares.
  • sorted(items) baut eine neue sortierte Liste; items.sort() ordnet an Ort und Stelle um.

Als Nächstes: Tupel und Entpacken, das Geschwister der Liste mit fester Größe und ein sauberer Weg, Werte auseinanderzunehmen.

Lab: Was bewertet wird

  • Mit top_n die höchsten Preise auswählen25 Pkt.
  • Mit last_n die neuesten Werte nehmen25 Pkt.
  • Mit moving_average jedes Preisfenster mitteln25 Pkt.
  • Mit rotate Werte von einem Ende zum anderen verschieben25 Pkt.
Explorer · lab-12-1
▾ lab-12-1
…
bash · im Browser
learner@quantcraft:~/lab-12-1$
Python noch nicht geladenPythonLn 1, Col 1Spaces: 4UTF-8

Dieses Thema zurücksetzen?

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