TrueとFalse
真偽値(bool)の値は True と False のちょうど2つで、先頭は大文字です。トレードルールはどれも最後はこの値になります。「板は交差しているか」「この注文を出せるか」といった具合です。2つの値を比較すると真偽値が得られます。つまり ask > bid はまだ決定ではなく、保存・表示・組み合わせができる「値」です。
bid, ask = 184.25, 184.5
print(ask > bid) # True
print(type(ask > bid)) # <class 'bool'>比較演算子
Pythonでは ==(等しい)、!=(等しくない)、<、<=、>、>= で比較します。= 1つは代入であって比較ではありません。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 は False ではなく 0 を返すことがあるので、本物の 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 TrueTrue か False です。True を返す if と False を返す別の分岐ではなく、return quantity > 0 と書きましょう。短くなり、食い違いも起きません。floatの比較とNone
float同士の == は丸め誤差のため危険です(整数と浮動小数点数を参照)。「十分に等しい」には math.isclose を使いましょう。== は値を比べ、is は2つの名前がまったく同じオブジェクトを指すかを問います。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点