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

forループとrange

ロードマップ上の位置モジュール 1/11 · トピック 6/33
1.6 forループとrange
—ラボスコア— / 100合計XP—連続日数—

要素ごとにブロックを繰り返す

for ループは、コレクションの要素ごとにインデントされたブロックを1回ずつ実行し、その回の要素に名前を付けます。ここでのコレクションは、角かっことカンマで書くリストです(リストはあとで独立したトピックになります)。構文は if と似ており、1行目の末尾にコロン、その下にインデントされたブロックを書きます。

prices = [184.25, 184.5, 184.0]
for price in prices:
    print(price)  # 184.25, then 184.5, then 184.0

range:リストなしで数える

range(n) は 0 から n - 1 までの整数を作ります。終了値は含まれないので、range(5) の要素は5個です。range(start, stop) は指定した値から始まり、range(start, stop, step) は step ずつ進み、負にすればカウントダウンになります。何回か繰り返したいときや、位置を順にたどるときに使います。

# range counts, and stops before the stop value
print(list(range(5)))          # [0, 1, 2, 3, 4]
print(list(range(2, 10, 3)))   # [2, 5, 8]
print(list(range(3, 0, -1)))   # [3, 2, 1]

アキュムレータのパターン

多くのループは同じ型に従います。ループの前に変数を用意し、ループの中で更新し、ループの後で使います。total += price * quantity は total = total + price * quantity の省略形です。ここではリストの各要素がペアになっていて、ループの行で両方の名前を一度に付けています(この「アンパック」はあとのトピックでしっかり説明します)。

# Accumulate a total over the trades
trades = [(184.25, 200), (185.0, 100), (183.5, 50)]
total = 0.0
for price, quantity in trades:
    total += price * quantity
print(total)  # 64525.0

位置をたどるループ

各要素を直前の要素と比べたいことがあります。range(1, len(prices)) で位置を順にたどりましょう。1から始まるので、prices[i - 1] は常に有効です。len() は要素数を返し、prices[i] は0から数えて i 番目の要素を取り出します。

# Compare each price with the one before it
prices = [184.0, 184.5, 184.25, 185.0]
ups = 0
for i in range(1, len(prices)):
    if prices[i] > prices[i - 1]:
        ups += 1
print(ups)  # 2

ループしながらリストを作る

1回ごとに結果を1つ集めるには、空のリスト [] から始め、ループの中で .append(value) を呼びます。価格のはしご、累計、日ごとのシグナルはどれもこうして作ります。リストはループが終わってから返す(または使う)ことになります。

# Build a list of prices, one per tick level
start, tick = 184.0, 0.25
ladder = []
for level in range(4):
    ladder.append(start + level * tick)
print(ladder)  # [184.0, 184.25, 184.5, 184.75]
ループ変数はループ後も残るループが終わっても、ループ変数は最後の値を保持し、ループ内で設定した変数も残ります。コレクションが空だとブロックは一度も実行されず、その中だけで作った変数は存在しません。ループの前に用意しておきましょう。

次は while ループ、break、continue です。決まった個数ではなく、条件が変わるまで繰り返します。

ラボ:採点される内容

  • total_notional で複数の約定の金額を合計する25点
  • price_ladder で価格の階段を作る25点
  • count_up_days で価格が上がった日を数える25点
  • running_total で累計を作る25点
エクスプローラー · lab-6-1
▾ lab-6-1
…
bash · ブラウザ内
learner@quantcraft:~/lab-6-1$
Pythonは未読み込みPythonLn 1, Col 1Spaces: 4UTF-8

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

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

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

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

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

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