σμ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.24·~35 Min.Einsteiger

Jupyter-Notebooks

Position in der SkillModul 1 von 11 · Thema 24 von 33
1.24 Jupyter-Notebooks
—Lab-Punkte— / 100XP gesamt—Serie—

Code, Ergebnisse und Notizen in einem Dokument

Ein Jupyter-Notebook ist ein Dokument aus Zellen. Eine Codezelle enthält ausführbares Python; ihre Ausgabe (Zahlen, Tabellen, Diagramme) erscheint direkt darunter. Eine Markdown-Zelle enthält formatierten Text für Erklärungen, Gleichungen und Überschriften. Ein Hintergrundprozess namens Kernel führt den Code aus und merkt sich jede Variable zwischen den Zellen. Notebooks sind ideal, um Daten zu erkunden und eine Analyse zu erklären, weshalb sie in der quantitativen Forschung allgegenwärtig sind.

# Inside your project's virtual environment
python -m pip install jupyterlab

# Start it; a browser tab opens
jupyter lab

# Keyboard shortcuts you will use all day
#   Shift+Enter   run the cell and move on
#   Esc then A/B  insert a cell above/below
#   Esc then M/Y  turn a cell into markdown/code

Der Kernel merkt sich alles, und das ist die Gefahr

Zellen lassen sich in beliebiger Reihenfolge und beliebig oft ausführen, und der Kernel behält den letzten Wert jeder Variablen. Ein Notebook kann deshalb auf dem Bildschirm richtig aussehen und doch von einer gelöschten Zelle oder von ungeordneter Ausführung abhängen, und niemand sonst (auch Sie morgen nicht) kann es reproduzieren. Der Ausführungszähler neben jeder Codezelle ([3], [7]) zeigt die wahre Reihenfolge. Bevor Sie einem Notebook trauen oder es teilen, nutzen Sie Kernel neu starten und alle Zellen ausführen: Scheitert es oder ändern sich die Zahlen, war das Notebook nicht reproduzierbar.

# Cell [1]
fee = 0.001

# Cell [2]
cost = 10000 * fee
print(cost)          # 10.0

# Cell [3]: you edit this to fee = 0.002 but never re-run cell [2]
fee = 0.002
print(cost)          # still 10.0: the notebook now says fee=0.002 but shows the old cost

Ein Notebook ist nur JSON

Eine .ipynb-Datei ist ein JSON-Dokument mit einer Liste cells. Jede Zelle hat einen cell_type ("code", "markdown" oder "raw") und eine source (Liste von Zeilen oder ein String); Codezellen speichern außerdem outputs und execution_count. Da es schlichtes JSON ist, lassen sich Notebooks mit dem Modul json lesen und bearbeiten, so wandeln Werkzeuge sie in Skripte um oder entfernen ihre Ausgaben. Das erklärt auch, warum Notebooks verrauschte Git-Diffs erzeugen: Ausgaben und Zähler ändern sich bei jedem Lauf.

import json

notebook = {
    "nbformat": 4, "nbformat_minor": 5, "metadata": {},
    "cells": [
        {"cell_type": "markdown", "metadata": {}, "source": ["# Fee study\n", "Does the fee matter?"]},
        {"cell_type": "code", "metadata": {}, "execution_count": 2,
         "source": ["fee = 0.001\n", "print(10000 * fee)"],
         "outputs": [{"output_type": "stream", "name": "stdout", "text": ["10.0\n"]}]},
    ],
}

# What the file looks like, and how to walk it
print(len(json.dumps(notebook, indent=1).splitlines()) > 10)     # True
for cell in notebook["cells"]:
    print(cell["cell_type"], "".join(cell["source"]).splitlines()[0])
# markdown # Fee study
# code fee = 0.001

Gewohnheiten für saubere, verlässliche Notebooks

Halten Sie Notebooks kurz und linear: von oben nach unten, Importe und Einstellungen in der ersten Zelle, eine Idee pro Abschnitt mit Markdown-Überschrift. Verlagern Sie wiederverwendbare Logik in Funktionen eines normalen .py-Moduls (siehe Pakete) und importieren Sie sie, damit sie testbar ist; das Notebook ruft dann nur auf und zeichnet. Starten Sie vor jedem Commit neu und führen Sie alles aus. Unter Git leeren Sie zuerst die Ausgaben (ein Werkzeug wie nbstripout kann das automatisch), sonst committen Sie Megabytes an Diagrammen und unlesbare Diffs. Lassen Sie nie API-Schlüssel in einer Zelle oder Ausgabe stehen.

# Keep notebooks tidy under Git
python -m pip install nbstripout
nbstripout --install           # strips outputs automatically on every commit

# Run a notebook top to bottom from the terminal (a reproducibility check)
jupyter nbconvert --to notebook --execute study.ipynb --output checked.ipynb

# Turn a notebook into a plain script
jupyter nbconvert --to script study.ipynb
Erkundung im Notebook, wiederverwendbarer Code in ModulenEine gute Regel: Sobald ein Stück Notebook-Code funktioniert und Sie es erneut brauchen, machen Sie daraus eine Funktion in einer .py-Datei mit einem Test. Notebooks dienen dem Fragenstellen; Module den Antworten, auf die Sie sich verlassen. Das Lab behandelt Notebook-JSON als schlichte Dictionaries, genau so werden solche Werkzeuge geschrieben.
  • Zellen laufen in beliebiger Reihenfolge und der Kernel merkt sich alles: vor Vertrauen oder Teilen neu starten und alles ausführen.
  • Ein .ipynb ist JSON: cells, jede mit cell_type, source und bei Code outputs und execution_count.
  • Logik in Module, Ausgaben vor dem Commit leeren, Geheimnisse draußen halten.

Als Nächstes: reproduzierbare Forschungsabläufe, die Seeds, Umgebungen, Versionen und Datenprüfungen zusammenbringen, damit jeder ein Ergebnis neu erzeugen kann.

Lab: Was bewertet wird

  • Mit code_cells den Code aus einem Notebook holen25 Pkt.
  • Mit count_cells die Zellarten zählen25 Pkt.
  • Mit clear_outputs die Ausgaben vor dem Commit entfernen25 Pkt.
  • Mit to_script ein Notebook in ein Skript umwandeln25 Pkt.
Explorer · lab-24-1
▾ lab-24-1
…
bash · im Browser
learner@quantcraft:~/lab-24-1$
Python noch nicht geladenPythonLn 1, Col 1Spaces: 4UTF-8

Dieses Thema zurücksetzen?

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