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

whileループ、break、continue

ロードマップ上の位置モジュール 1/11 · トピック 7/33
1.7 whileループ、break、continue
—ラボスコア— / 100合計XP—連続日数—

条件が成り立つ間、繰り返す

while ループは、1回ごとに条件を確認し、条件が True の間ブロックを実行します。何回必要かが事前にわからない場面で使います。たとえば、注文が十分小さくなるまで半分にする、価格があるラインを超えるまで待つ、残高が目標に届くまで増やす、といった場合です。ブロックの中で条件を変える処理がなければ、ループは永遠に終わりません。

# Halve an order until it is small enough to trade at once
quantity, limit = 1000, 100
steps = 0
while quantity > limit:
    quantity = quantity / 2
    steps += 1
print(steps, quantity)  # 4 62.5

forとwhile、どちらを使う?

要素がすでにある、または個数がわかっているなら for を使います。for が無限に回り続けることはありません。止まる位置がループ中の出来事で決まるなら while を使います。判断のコツは、「これらの各々について」と言えるなら for、「これが真になるまで」と言うなら while です。

ループが終われるようにするwhile ループを実行する前に3点を確認しましょう。条件がループ内で変わる変数を使っていること、その変更が毎回行われること、そしてその変更が条件を False に近づけることです。ここでループが長く続くと、10秒で止められます。

break:今すぐループを抜ける

break はその場でループを終わらせ、直後の行から続けます。最初に上限を超えた価格のように、答えが見つかった時点で止めるための方法です。ここでは、ループ自身が増やすインデックスで位置をたどっています。

# break leaves the loop at once
prices = [184.25, 184.5, 186.0, 185.0]
limit = 185.5
index = 0
while index < len(prices):
    if prices[index] > limit:
        print("breach at", index)  # breach at 2
        break
    index += 1

continue:次の周回へ進む

continue は現在の周回の残りを飛ばして、条件の判定に戻ります。不正なデータを無視するのに便利で、本来の処理を if の中に入れ子にせずに済みます。while ループでは、ループ変数を continue の前に更新しましょう。そうしないと、同じ要素に永遠に戻ってきます。

# continue skips the rest of the pass; step first, or it never moves on
fills = [100, -5, 250, 0, 75]
total = 0
index = 0
while index < len(fills):
    value = fills[index]
    index += 1
    if value <= 0:
        continue
    total += value
print(total)  # 425

探索や収束のループ

クオンツの仕事には「〜まで続ける」型のものが多くあります。目標まで複利で増やす、変化しなくなるまで推定値を改良する、成功するまでリクエストを再試行する、などです。終了判定が処理の途中にあるときは、while True: の途中に break を置く形がよく使われます。

# How many years until 10,000 grows to 15,000 at 7% a year?
balance, target, rate = 10_000, 15_000, 0.07
years = 0
while balance < target:
    balance = balance * (1 + rate)
    years += 1
print(years)  # 6

# while True + break: the exit test sits in the middle
attempt = 0
while True:
    attempt += 1
    if attempt * 25 >= 100:
        break
print(attempt)  # 4
  • 条件が、ループ内で変わる変数を使っている
  • その変更は毎回行われる(continue の前でも)
  • 答えがわかったらすぐに break を使う

次は関数の定義と呼び出しです。コードのまとまりに名前を付けて再利用します。

ラボ:採点される内容

  • halving_steps で注文を半分にする回数を数える25点
  • first_breach で上限を最初に超える価格を見つける25点
  • sum_until_zero で終了マーカーまで有効な約定を合計する25点
  • years_to_target で残高が目標に届くまで複利で増やす25点
エクスプローラー · lab-7-1
▾ lab-7-1
…
bash · ブラウザ内
learner@quantcraft:~/lab-7-1$
Pythonは未読み込みPythonLn 1, Col 1Spaces: 4UTF-8

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

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

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

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

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

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