Verdadeiro e falso
Um booleano (bool) tem exatamente dois valores: True e False, com inicial maiúscula. Toda regra de trading termina em um: «o mercado está cruzado?», «podemos pagar esta ordem?». Comparar dois valores produz um booleano, então ask > bid ainda não é uma decisão, é um valor que você pode guardar, imprimir e combinar.
bid, ask = 184.25, 184.5
print(ask > bid) # True
print(type(ask > bid)) # <class 'bool'>Operadores de comparação
O Python compara com == (igual), != (diferente), <, <=, > e >=. Um único = é atribuição, não comparação: price = 5 guarda um valor, enquanto price == 5 faz uma pergunta. As comparações podem ser encadeadas: low <= price <= high lê-se como na matemática e verifica os dois lados de uma 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 condições: and, or, not
a and b é True apenas quando os dois são. a or b é True quando pelo menos um é. not a inverte o valor. Juntos expressam regras reais, como «o mercado está aberto, o ativo não está suspenso e temos o dinheiro».
# 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 e or fazem curto-circuito: o Python para assim que a resposta é conhecida e não avalia o resto. É útil como proteção: coloque a verificação segura primeiro para que a arriscada só execute quando puder.
# Short-circuit: the division never runs when quantity is 0
quantity = 0
print(quantity > 0 and 100 / quantity > 1) # FalseValor de verdade
Qualquer valor pode ser usado como condição. 0, 0.0, o texto vazio "" e None contam como falso; quase todo o resto conta como verdadeiro. bool(value) mostra como o Python lê um valor. Cuidado: quantity and price > 0 pode devolver 0 em vez de False, então escreva a comparação completa quando precisar de um bool de verdade.
# 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 ou False. Escreva return quantity > 0, e não um if que devolve True e outro ramo que devolve False: é mais curto e não pode se contradizer.Comparar floats, e None
== entre floats é arriscado por causa do erro de arredondamento (veja inteiros e floats): use math.isclose para «igual o bastante». == compara valores; a palavra is pergunta se dois nomes apontam exatamente para o mesmo objeto, e você só precisa dela para uma coisa: x is None, para testar «nenhum 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 seguir: condicionais, em que um booleano decide quais linhas de código executam: if, elif e else.
Lab: o que é avaliado
- Detectar um mercado cruzado com
is_crossed25 pts - Verificar se um preço está dentro de uma faixa com
within_band25 pts - Combinar as condições de trading com
can_trade25 pts - Validar uma ordem com
is_valid_order25 pts