True 与 False
布尔值(bool)只有两个取值:True 和 False,首字母大写。每条交易规则最终都归结为其中之一:“市场是否交叉?”“这笔订单我们付得起吗?”比较两个值会得到一个布尔值,所以 ask > bid 还不是一个决定,而是一个可以保存、打印和组合的值。
bid, ask = 184.25, 184.5
print(ask > bid) # True
print(type(ask > bid)) # <class 'bool'>比较运算符
Python 用 ==(等于)、!=(不等于)、<、<=、>、>= 进行比较。单个 = 是赋值而不是比较:price = 5 保存一个值,而 price == 5 是在提问。比较可以连写:low <= price <= high 读起来就像数学式,并一次检查两侧。
# 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)组合条件:and、or、not
a and b 仅当两者都为真时才是 True。a or b 只要有一个为真就是 True。not a 取反。组合起来就能表达真实的规则,例如“市场开放、该股票未停牌,并且我们有足够的现金”。
# 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 和 or 采用短路求值:一旦结果已定,Python 就停止,不再计算后面的部分。这可以用作保护:把安全的检查放在前面,风险较大的检查才只会在允许时执行。
# Short-circuit: the division never runs when quantity is 0
quantity = 0
print(quantity > 0 and 100 / quantity > 1) # False真值判断
任何值都可以当作条件。0、0.0、空文本 "" 和 None 视为假,几乎其他所有值都视为真。bool(value) 可以看到 Python 如何理解一个值。注意:quantity and price > 0 可能返回 0 而不是 False,因此在需要真正的 bool 时请把比较完整写出来。
# 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 True直接返回条件本身比较本身就是
True 或 False。写 return quantity > 0,不要写一个返回 True 的 if 再加一个返回 False 的分支:更短,也不会自相矛盾。比较 float 与 None
float 之间用 == 比较有风险,因为存在舍入误差(见整数与浮点数):想表达“足够相等”请用 math.isclose。== 比较的是值;is 询问两个名字是否指向完全相同的对象,你只需要在一种情况下用它:x is None,用来判断“没有值”。
# 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) # True下一节:条件语句,由布尔值决定执行哪些代码行:if、elif 和 else。
实验:评分内容
- 用
is_crossed检测交叉市场25 分 - 用
within_band检查价格是否在区间内25 分 - 用
can_trade组合交易条件25 分 - 用
is_valid_order校验订单25 分