Wahr und falsch
Ein Boolean (bool) hat genau zwei Werte: True und False, mit großem Anfangsbuchstaben. Jede Handelsregel endet in einem davon: „Ist der Markt gekreuzt?“, „Können wir uns diese Order leisten?“. Der Vergleich zweier Werte ergibt einen Boolean, also ist ask > bid noch keine Entscheidung, sondern ein Wert, den Sie speichern, ausgeben und kombinieren können.
bid, ask = 184.25, 184.5
print(ask > bid) # True
print(type(ask > bid)) # <class 'bool'>Vergleichsoperatoren
Python vergleicht mit == (gleich), != (ungleich), <, <=, > und >=. Ein einzelnes = ist eine Zuweisung, kein Vergleich: price = 5 speichert einen Wert, price == 5 stellt eine Frage. Vergleiche lassen sich verketten: low <= price <= high liest sich wie in der Mathematik und prüft beide Seiten zugleich.
# Comparison operators give True or False
price = 184.4
print(price == 184.4) # True
print(price != 184.25) # True
print(184.25 <= price < 185) # True (chained)Bedingungen kombinieren: and, or, not
a and b ist nur True, wenn beide es sind. a or b ist True, wenn mindestens einer es ist. not a kehrt den Wert um. Zusammen drücken sie echte Regeln aus, etwa „der Markt ist offen, die Aktie ist nicht ausgesetzt, und wir haben das Geld“.
# Combine conditions with and, or, not
market_open, halted, cash = True, False, 500.0
can_buy = market_open and not halted and cash >= 184.5
print(can_buy) # True
print(halted or cash < 100) # Falseand und or arbeiten mit Kurzschlussauswertung: Python hört auf, sobald die Antwort feststeht, und wertet den Rest nicht aus. Das ist als Schutz nützlich: Setzen Sie die sichere Prüfung zuerst, damit die riskante nur läuft, wenn sie darf.
# Short-circuit: the division never runs when quantity is 0
quantity = 0
print(quantity > 0 and 100 / quantity > 1) # FalseWahrheitswert
Jeder Wert kann als Bedingung dienen. 0, 0.0, der leere Text "" und None gelten als falsch; fast alles andere gilt als wahr. bool(value) zeigt, wie Python einen Wert liest. Vorsicht: quantity and price > 0 kann 0 statt False zurückgeben, schreiben Sie den Vergleich daher vollständig aus, wenn Sie einen echten bool brauchen.
# Zero, empty text and None count as False
print(bool(0), bool(0.0), bool(""), bool(None)) # False False False False
print(bool(200), bool("AAPL")) # True TrueTrue oder False. Schreiben Sie return quantity > 0 statt eines if, das True zurückgibt, und eines zweiten Zweigs, der False zurückgibt: Das ist kürzer und kann sich nicht widersprechen.Floats vergleichen, und None
== zwischen floats ist wegen Rundungsfehlern riskant (siehe Ganzzahlen und Gleitkommazahlen): Verwenden Sie math.isclose für „gleich genug“. == vergleicht Werte; das Wort is fragt, ob zwei Namen auf genau dasselbe Objekt zeigen, und man braucht es nur für eines: x is None, um auf „kein Wert“ zu prüfen.
# Floats need a tolerance; None is tested with "is"
import math
print(0.1 + 0.2 == 0.3) # False
print(math.isclose(0.1 + 0.2, 0.3)) # True
fill_price = None
print(fill_price is None) # TrueAls Nächstes: Bedingungen, bei denen ein Boolean entscheidet, welche Codezeilen laufen: if, elif und else.
Lab: Was bewertet wird
- Mit
is_crossedeinen gekreuzten Markt erkennen25 Pkt. - Mit
within_bandprüfen, ob ein Preis im Band liegt25 Pkt. - Mit
can_tradedie Handelsbedingungen kombinieren25 Pkt. - Mit
is_valid_ordereine Order validieren25 Pkt.