σμimplied vol · KKmax(S−K,0)udβρᵢⱼfat tailsPnL · drawdownyield · TdSₜ = μSₜ dt + σSₜ dWₜC = S·N(d₁) − K·e⁻ʳᵀ·N(d₂)σₚ² = wᵀΣwd₁ = [ln(S/K) + (r + σ²⁄2)T] ⁄ σ√T∂V/∂t + ½σ²S²·∂²V/∂S² + rS·∂V/∂S − rV = 0Sharpe = (Rₚ − R_f) ⁄ σₚVaR₉₉ = μ − 2.33σρ = Cov(X,Y) ⁄ σₓσᵧE[Rₚ] = Σ wᵢ·E[Rᵢ]φ(x) = e^(−x²/2) ⁄ √2πE[Rᵢ] = R_f + βᵢ(E[Rₘ] − R_f)dXₜ = θ(μ − Xₜ)dt + σ dWₜσ²ₜ = ω + α·ε²ₜ₋₁ + β·σ²ₜ₋₁C − P = S − K·e⁻ʳᵀΔ = ∂V/∂S Γ = ∂²V/∂S²p = (e^(rΔt) − d) ⁄ (u − d)rₜ = ln(Pₜ ⁄ Pₜ₋₁)E[Xₜ₊₁ | ℱₜ] = Xₜf* = (bp − q) ⁄ bz = (x − μ) ⁄ σP(N=k) = λᵏe^(−λ) ⁄ k!Θ = −∂V/∂Tν = S·φ(d₁)·√Tmin wᵀΣw s.t. wᵀμ = μ*∫Σ∂∞λ
σμimplied vol · KKmax(S−K,0)udβρᵢⱼfat tailsPnL · drawdownyield · TdSₜ = μSₜ dt + σSₜ dWₜC = S·N(d₁) − K·e⁻ʳᵀ·N(d₂)σₚ² = wᵀΣwd₁ = [ln(S/K) + (r + σ²⁄2)T] ⁄ σ√T∂V/∂t + ½σ²S²·∂²V/∂S² + rS·∂V/∂S − rV = 0Sharpe = (Rₚ − R_f) ⁄ σₚVaR₉₉ = μ − 2.33σρ = Cov(X,Y) ⁄ σₓσᵧE[Rₚ] = Σ wᵢ·E[Rᵢ]φ(x) = e^(−x²/2) ⁄ √2πE[Rᵢ] = R_f + βᵢ(E[Rₘ] − R_f)dXₜ = θ(μ − Xₜ)dt + σ dWₜσ²ₜ = ω + α·ε²ₜ₋₁ + β·σ²ₜ₋₁C − P = S − K·e⁻ʳᵀΔ = ∂V/∂S Γ = ∂²V/∂S²p = (e^(rΔt) − d) ⁄ (u − d)rₜ = ln(Pₜ ⁄ Pₜ₋₁)E[Xₜ₊₁ | ℱₜ] = Xₜf* = (bp − q) ⁄ bz = (x − μ) ⁄ σP(N=k) = λᵏe^(−λ) ⁄ k!Θ = −∂V/∂Tν = S·φ(d₁)·√Tmin wᵀΣw s.t. wᵀμ = μ*∫Σ∂∞λ
uantCraft Academyロードマップ
Ctrl K
AO
+1.2k 人の学習者
ログイン参加する ↗
ロードマップ
AO
+1.2k 人の学習者
ログイン
  • English
  • Français
  • Español
  • العربية
  • Português
  • Deutsch
  • 日本語
  • 中文
Python ロードマップ›モジュール 1 · クオンツのためのPython基礎›トピック 1.1·~45 分初級

Pythonの構文と最初のプログラム

ロードマップ上の位置モジュール 1/11 · トピック 1/33
1.1 Pythonの構文と最初のプログラム
—ラボスコア— / 100合計XP—連続日数—

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.25
注意スペースが1つ足りなかったり多かったりすると IndentationError、コロンを忘れると 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 points

printで結果を表示する

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点
エクスプローラー · lab-1-1
▾ lab-1-1
…
bash · ブラウザ内
learner@quantcraft:~/lab-1-1$
Pythonは未読み込みPythonLn 1, Col 1Spaces: 4UTF-8

このトピックをリセットしますか?

lab-1-1 の内容はすべてスターターファイルに戻り、ターミナルも消去されます。現在の解答は失われ、元に戻せません。

リセットされるもの
  • main.py → スターターコード
  • ターミナル履歴とテスト出力
  • 未提出の変更
保持されるもの
  • ラボの最高スコア
  • XPと連続日数
  • 講義の進捗とメモ

コードを実行するにはログインしてください。

レクチャーはすべて無料で読めます。コードの実行、テスト、ラボの提出にはアカウントの作成かログインが必要です。

  • ブラウザ内IDEとbashターミナル。インストール不要
  • 即時採点、XP、ロードマップでの現在地
アカウントを作成ログイン
または
GitHubで続ける