Python-Grundlagen für Finanzen in einer Sitzung: Datentypen, Listen, Dictionaries, Schleifen, Funktionen und Fehlermeldungen
Lernen Sie das Minimum an Kern-Python, das ein Trader braucht: Zahlen, Strings, Listen, Dictionaries, Schleifen, Funktionen und wie man einen Traceback liest.
Was Sie lernen werden
- Die Datentypen, denen Sie in Kursdaten begegnen:
int,float,str,bool,Noneunddatetime. - Wie Listen und Dictionaries eine Trade-Liste speichern und wie eine
for-Schleife sie verarbeitet. - Wie Sie eine Funktion mit Docstring und Standardargument schreiben und warum Funktionen Backtests testbar machen.
- Wie Sie einen Python-Traceback von unten nach oben lesen und die fünf häufigsten Fehler beheben.
Erklärung
Typen. Jeder Wert in Python hat einen Typ. 42 ist ein int (ganze Zahl), 42.5 ein float (binär gespeicherte Dezimalzahl), "AAPL" ein str (Text), True ein bool, und None bedeutet „kein Wert“. Floats sind Näherungswerte (0.1 + 0.2 gibt 0.30000000000000004 aus), vergleichen Sie sie daher nie mit ==; verwenden Sie round() oder eine Toleranz. Für Datumsangaben verwenden Sie pandas-Timestamps (Lektion 3).
Listen sind geordnete Sammlungen in eckigen Klammern: closes = [100.0, 102.0, 101.5]. Die Indizierung beginnt bei null (closes[0] ist 100.0), negative Indizes zählen vom Ende (closes[-1] ist der letzte Schlusskurs), und Slicing closes[1:3] liefert die Elemente 1 und 2, aber nicht 3. Dieselbe Regel, nach der das Ende ausgeschlossen ist, gilt für pandas-iloc.
Dictionaries ordnen Schlüsseln Werte zu: trade = {"symbol": "AAA", "entry": 50.0, "qty": 100}. Der Zugriff erfolgt mit trade["entry"]; ein fehlender Schlüssel löst einen KeyError aus, während trade.get("fee", 0.0) einen Standardwert zurückgibt.
Schleifen und Bedingungen. Eine for-Schleife durchläuft jedes Element: for t in trades:, gefolgt von einem eingerückten Block. Die Einrückung (vier Leerzeichen) definiert den Block. if, elif und else verzweigen nach Bedingungen, und die Vergleichsoperatoren sind ==, !=, <, >=.
Funktionen bündeln Logik, damit sie wiederverwendet und getestet werden kann. Das Schlüsselwort def leitet eine Definition ein, Parameter stehen in Klammern, und return gibt einen Wert zurück:
def r_multiple(entry, exit_price, stop, side="long"):
'''Gibt den Gewinn in Einheiten des Anfangsrisikos (R) zurück.'''
risk = abs(entry - stop)
pnl = exit_price - entry if side == "long" else entry - exit_price
return pnl / risk
Der String in dreifachen Anführungszeichen ist ein Docstring (Dokumentation), und side="long" ist ein Standardargument. Halten Sie Funktionen klein, explizit in ihren Eingaben und frei von Seiteneffekten; genau das ermöglicht es, sie in Lektion 9 mit Unit-Tests zu prüfen.
Fehler lesen. Wenn etwas fehlschlägt, gibt Python einen Traceback aus. Lesen Sie zuerst die letzte Zeile: Sie nennt Fehlertyp und Meldung. Sehen Sie sich dann die Zeile direkt darüber an, die zeigt, wo in Ihrem Code der Fehler auftrat. Die häufigsten Fehler: NameError (Sie haben eine Variable verwendet, bevor Sie sie definiert haben, oft weil eine Notebook-Zelle nicht ausgeführt wurde); TypeError (zum Beispiel wird ein String aus einer CSV-Datei zu einer Zahl addiert; Abhilfe mit float()); KeyError (eine Spalte oder ein Dictionary-Schlüssel ist anders geschrieben; achten Sie auf Leerzeichen und Großbuchstaben); IndexError (Sie haben Element 10 einer Liste mit 10 Elementen angefordert; denken Sie an die nullbasierte Indizierung); und ZeroDivisionError (ein Stop, der dem Einstieg entspricht, ergibt ein Risiko von null).
Durchgerechnetes Beispiel
Hypothetisches Beispiel: drei geschlossene Long-Trades, alle in Euro, Provisionen und Steuern werden ignoriert.
trades = [
{"symbol": "AAA", "entry": 50.0, "exit": 53.0, "stop": 48.0, "qty": 100},
{"symbol": "BBB", "entry": 20.0, "exit": 19.0, "stop": 19.0, "qty": 250},
{"symbol": "CCC", "entry": 80.0, "exit": 78.0, "stop": 76.0, "qty": 60},
]
total = 0.0
for t in trades:
pnl = (t["exit"] - t["entry"]) * t["qty"]
r = r_multiple(t["entry"], t["exit"], t["stop"])
total += pnl
print(t["symbol"], pnl, round(r, 2))
print("Total:", total)
Gewinn AAA = (53 − 50) × 100 = €300; Risiko pro Aktie €2, also R = 3 ÷ 2 = 1.5. BBB = (19 − 20) × 250 = −€250; Risiko €1 pro Aktie, R = −1.0 (exakt ausgestoppt). CCC = (78 − 80) × 60 = −€120; Risiko €4, R = −0.5. Summe = 300 − 250 − 120 = −€70. Ausgabezeilen: AAA 300.0 1.5, BBB -250.0 -1.0, CCC -120.0 -0.5, Total: -70.0.
total += pnl ist die Kurzform für total = total + pnl. Drei Trades sagen nichts über eine Methode aus; es geht hier um die Mechanik.
Häufiger Fehler
trades und führen Sie nur die Schleifenzelle erneut aus, fließt unbemerkt ein veralteter Wert in ein Ergebnis ein; nach einem Kernel-Neustart erhalten Sie stattdessen einen NameError. Bevor Sie einer Zahl vertrauen, verwenden Sie „Restart kernel and run all cells“ und stellen Sie sicher, dass alles fehlerfrei von oben nach unten durchläuft.Übungsaufgabe
Schreiben Sie auf Papier eine Funktion position_size(account, risk_pct, entry, stop), die die ganze Anzahl Aktien (abgerundet) zurückgibt und einen klaren ValueError auslöst, wenn der Stop dem Einstieg entspricht. Notieren Sie dann das Ergebnis für Konto €8,000, Risiko 1.25%, Einstieg €32.50, Stop €30.00. Nennen Sie schließlich den Fehlertyp, den Python auslösen würde, wenn Sie die Funktion mit entry="32.50" (einem String) aufrufen und ihn nicht umwandeln.
Lösung anzeigen
def position_size(account, risk_pct, entry, stop):
per_share = abs(entry - stop)
if per_share == 0:
raise ValueError("Stop muss sich vom Einstieg unterscheiden")
return int(account * risk_pct // per_share)
Zahlen: Risikobudget = 8,000 × 0.0125 = €100; Risiko pro Aktie = 32.50 − 30.00 = €2.50; 100 ÷ 2.50 = genau 40 Aktien, die Funktion gibt also 40 zurück (geplantes Risiko €100, Positionswert €1,300).
Mit entry="32.50" löst der Ausdruck "32.50" - 30.0 den Fehler TypeError: unsupported operand type(s) for -: 'str' and 'float' aus. Wandeln Sie mit float(entry) um.
Einschränkungen: Die Funktion ignoriert Mindest-Losgrößen, Provisionen und die Tatsache, dass eine Kurslücke mehr als die geplanten €100 kosten kann.
Kernaussagen
- Floats sind Näherungswerte, die Indizierung beginnt bei null und Slices schließen das Ende aus; diese drei Fakten verhindern die meisten Anfängerfehler.
- Eine Liste von Dictionaries ist vor pandas die natürliche Form für Trades; Schleifen verarbeiten sie, Funktionen geben ihr wiederverwendbare Logik.
- Schreiben Sie kleine, reine Funktionen mit Docstrings; sie sind die Einheiten, die Sie in Lektion 9 testen werden.
- Lesen Sie Tracebacks von unten nach oben, und führen Sie „Neustart und alles ausführen“ durch, bevor Sie einem Notebook-Ergebnis vertrauen.
Nächster Schritt
Lektion 3 führt in pandas ein: Series, DataFrames, den DatetimeIndex, das Auswählen und Filtern von Zeilen und die Umwandlung von Tagesbalken in Wochenbalken mit resample.
Selbsttest
Beantworten Sie die Fragen und prüfen Sie dann Ihre Antworten. Sie können es so oft wiederholen, wie Sie möchten.
Automatischer Selbsttest zur eigenen Wiederholung. Ihre Antworten werden in Ihrem Browser geprüft und von uns weder eingesehen noch bewertet. Es ist keine Prüfung und kein Abschluss.
Ihr Fortschritt
„Erledigt“ bedeutet nur, dass Sie die Lektion als abgeschlossen markiert haben. Es ist kein Test Ihres Verständnisses. Fortschritt und Notizen werden nur in diesem Browser auf diesem Gerät gespeichert — nicht in einem Konto.