Verdadero y falso
Un booleano (bool) tiene exactamente dos valores: True y False, con mayúscula. Toda regla de trading termina en uno: «¿está cruzado el mercado?», «¿podemos pagar esta orden?». Comparar dos valores produce un booleano, así que ask > bid aún no es una decisión, es un valor que puedes guardar, imprimir y combinar.
bid, ask = 184.25, 184.5
print(ask > bid) # True
print(type(ask > bid)) # <class 'bool'>Operadores de comparación
Python compara con == (igual), != (distinto), <, <=, > y >=. Un solo = es una asignación, no una comparación: price = 5 guarda un valor mientras que price == 5 hace una pregunta. Las comparaciones se pueden encadenar: low <= price <= high se lee como en matemáticas y comprueba ambos lados a la vez.
# 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)Combinar condiciones: and, or, not
a and b es True solo cuando ambos lo son. a or b es True cuando al menos uno lo es. not a invierte el valor. Juntos expresan reglas reales, como «el mercado está abierto, el valor no está suspendido y tenemos el efectivo».
# 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 y or hacen cortocircuito: Python se detiene en cuanto conoce la respuesta y no evalúa el resto. Es útil como guarda: pon primero la comprobación segura para que la arriesgada solo se ejecute cuando se puede.
# Short-circuit: the division never runs when quantity is 0
quantity = 0
print(quantity > 0 and 100 / quantity > 1) # FalseVeracidad
Cualquier valor puede usarse como condición. 0, 0.0, el texto vacío "" y None cuentan como falso; casi todo lo demás cuenta como verdadero. bool(value) muestra cómo lee Python un valor. Cuidado: quantity and price > 0 puede devolver 0 en lugar de False, así que escribe la comparación completa cuando necesites un bool real.
# 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 o False. Escribe return quantity > 0, no un if que devuelve True y otra rama que devuelve False: es más corto y no puede contradecirse.Comparar floats, y None
== entre floats es arriesgado por el error de redondeo (ver enteros y flotantes): usa math.isclose para «suficientemente igual». == compara valores; la palabra is pregunta si dos nombres apuntan exactamente al mismo objeto, y solo la necesitas para una cosa: x is None, para comprobar «ningún valor».
# 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) # TrueA continuación: condicionales, donde un booleano decide qué líneas de código se ejecutan: if, elif y else.
Lab: qué se califica
- Detectar un mercado cruzado con
is_crossed25 pts - Comprobar que un precio está dentro de una banda con
within_band25 pts - Combinar las condiciones de trading con
can_trade25 pts - Validar una orden con
is_valid_order25 pts