Pythonプログラムが実行される仕組み
Pythonプログラムは文で構成されたテキストファイルです。Pythonは上から下へ読み、1つずつ文を実行します。余計な決まり文句は不要で、main.py というファイルがそのままプログラムです。Runを押すか、ターミナルで python main.py と入力します。
bid = 184.25
ask = 184.50
print(ask - bid) # 0.25文と式
式は ask - bid や 2 * 3 のように値を生み出します。文は bid = 184.25 や print(bid) のように何かを実行します。文は1行に1つ書き、行末が文の終わりです。セミコロンは不要です。文が長すぎるときは括弧で囲み、次の行へ続けます。
total_cost = (
price * quantity
+ commission
+ exchange_fee
)コメントとdocstring
# から行末まではコメントで、Pythonは無視します。コメントには、コードが何をしているかではなく、なぜそうしているかを書きましょう。ファイルや関数の先頭に置いた三連引用符の文字列はdocstringで、ツールや help() が表示する公式の説明になります。
# Mid price: the fair value halfway between bid and ask.
mid = (bid + ask) / 2 # average of the two quotesインデントは構文の一部です
他の言語が波括弧を使う場所で、Pythonはインデントを使います。コロンで終わる行はブロックの開始で、その下のインデントされた行がブロックの中身です。インデントは半角スペース4つにし、タブとスペースを混ぜてはいけません。左端に書かれたコードがトップレベルのコードです。
def spread(bid, ask):
# both lines below are the block: indented by four spaces
width = ask - bid
return width
print(spread(184.25, 184.50)) # back at the left margin: 0.25IndentationError、コロンを忘れると SyntaxError になります。Pythonは何も実行する前に停止するので、まずメッセージの行番号を読みましょう。Tabキーでスペースが入力されるようエディタを設定しておくと安心です。変数と代入
名前 = 値 は、名前を値に結び付けます。= は「等しい」ではなく「代入」を意味します。Pythonはまず右辺を計算し、その結果に名前を付けます。名前は大文字と小文字が区別され、英数字とアンダースコアが使えますが、数字で始めることや if、for のような予約語は使えません。Pythonでは last_price のような snake_case が標準です。
price = 184.25
quantity = 200
notional = price * quantity
price = 185.00 # rebinds price; notional is unchanged
quantity += 50 # shorthand for quantity = quantity + 50
print(notional) # 36850.0算術演算と演算子の優先順位
+、-、*は足し算、引き算、掛け算です。/は真の割り算で、結果は常に小数になります。7 / 2は3.5です。//は割って切り捨て、%は余りを返します。7 // 2は3、7 % 2は1です。**はべき乗です。1.05 ** 10は5%を10回複利で増やします。
Pythonは数学と同じ順序で計算します。まず **、次に * と /、最後に + と - です。そのため 2 + 3 * 4 は 14 ですが、(2 + 3) * 4 は 20 です。迷ったら括弧を付けましょう。コストはゼロで、意図がはっきりします。10_000 のように数字の中のアンダースコアは無視され、大きな数を読みやすくしてくれます。
spread = ask - bid # 0.25
mid = (bid + ask) / 2 # 184.375
spread_bps = spread / mid * 10_000 # the spread in basis pointsprintで結果を表示する
print() は値をスペース区切りでターミナルに出力します。引用符で囲んだテキストは文字列です。文字列と数値は次のトピックで詳しく学びます。今のところ print は、プログラムの中身をのぞく手段です。値を表示し、手計算で確かめてから先へ進みましょう。
print("bid", bid, "ask", ask)
print("mid", mid)ラボでは、このページの内容だけ、つまり代入、算術演算、括弧を使って、小さな価格の計算式を書きます。次回は、Pythonが数値をどう保持するのか、そして 0.1 + 0.2 が正確には 0.3 にならない理由を学びます。
ラボ:採点される内容
notionalでポジションの金額を計算する25点midpointで仲値を求める25点spreadでビッドとアスクの差を測る25点spread_bpsでスプレッドをベーシスポイントで表す25点