σμ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.5·~30 分初級

条件分岐:if、elif、else

ロードマップ上の位置モジュール 1/11 · トピック 5/33
1.5 条件分岐:if、elif、else
—ラボスコア— / 100合計XP—連続日数—

実行するコードを選ぶ

ここまでは、すべての行が上から下へ実行されてきました。if 文は、条件が True のときだけコードのブロックを実行します。さらに条件を足すには elif(「そうでなくて〜なら」)、残りすべてには else を使います。Pythonは順番に確認し、条件が真になった最初のブロックだけを実行します。条件の行はコロンで終わります。

position, target = 100, 250
if target > position:
    print("buy", target - position)   # buy 150
elif target < position:
    print("sell", position - target)
else:
    print("hold")

インデントが構造をつくる

if の下でインデントされた行が、その if に属するブロックです。左端に戻った最初の行はブロックの外です。1段につき半角スペース4つを、いつも同じ方法で使いましょう。Pythonに波かっこはなく、インデントがそのまま構造なので、インデントを誤るとプログラムの動作が変わります。

# The indented lines are the block that belongs to the if
price = 184.5
if price > 184:
    print("above 184")           # above 184
    print("still inside the if")
print("always runs")             # back at the left margin

順序が大事:最初に当てはまった分岐が勝つ

真になった最初の分岐だけが実行されるので、elif の連なりではしきい値が使えます。各分岐は「新しく加わる条件」だけを書けばよいのです。手数料の段階表が典型例です。最も狭い(具体的な)条件を先に置きましょう。そうしないと、上にある広い条件がそのケースを取り込んでしまいます。

# elif branches are checked top to bottom; the first True wins
monthly_volume = 3_500_000
if monthly_volume < 1_000_000:
    rate = 0.0010
elif monthly_volume < 10_000_000:
    rate = 0.0007
else:
    rate = 0.0004
print(rate)  # 0.0007

早めに return する

関数の中では、return がその場で関数を終わらせます。そのため、ケースごとに if と return を書けば、else も深いネストも不要になり、最後の行が既定の結果になります。こう書いたコードは平らなままで、ルールの一覧のように読めます。

# Early returns keep a function flat
def side(position, target):
    if target > position:
        return "buy"
    if target < position:
        return "sell"
    return "hold"

print(side(100, 250), side(250, 100), side(100, 100))  # buy sell hold

1行で選ぶ

if が2つの値のどちらかを選ぶだけなら、条件式のほうが短く書けます。value_if_true if condition else value_if_false の形です。式なので、f文字列や return の中にも置けます。単純な選択にはこれを、処理が増えたら通常の if を使いましょう。

# A one-line choice between two values
cash = 40.0
status = "ok" if cash >= 0 else "overdrawn"
print(status)  # ok
真偽値を True と比べないis_open がすでに真偽値なら、if is_open: や if not is_open: と書きます。if is_open == True: は同じことをぎこちなく言っているだけです。数値や文字列の if x: も同様で、「0でない」「空でない」を判定します。
  • 結果が2つ:if/else、または1行の条件式
  • 順序のある複数の範囲:elif の連なり(最も狭い条件を先に)
  • 特殊なケースや不正な入力:早めの return、通常のケースは最後に

次は for ループと range です。要素ごとにコードのブロックを繰り返します。

ラボ:採点される内容

  • order_side で買い・売り・保有を判断する25点
  • fee_tier で取引量に応じた手数料率を選ぶ25点
  • clamp で値を2つの上下限の間に収める25点
  • crossover_signal で2本の平均をシグナルに変える25点
エクスプローラー · lab-5-1
▾ lab-5-1
…
bash · ブラウザ内
learner@quantcraft:~/lab-5-1$
Pythonは未読み込みPythonLn 1, Col 1Spaces: 4UTF-8

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

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

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

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

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

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