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

整数と浮動小数点数

ロードマップ上の位置モジュール 1/11 · トピック 2/33
1.2 整数と浮動小数点数
—ラボスコア— / 100合計XP—連続日数—

整数と小数

Pythonには日常的に使う数値の型が2つあります。int は 200 株のような整数、float は価格 184.25 のような小数です。type() で値の型を確認できます。株数・ロット数・日数のような「数えるもの」はint、価格・リターン・比率はfloatです。

shares = 200
price = 184.25
print(type(shares), type(price))  # <class 'int'> <class 'float'>

3種類の割り算

+・-・* は期待どおりに動きます。割り算は3種類あります。/ は 10 / 2 でも常にfloat(5.0)を返します。// は切り捨て除算で、割った結果を小さい方へ丸めて整数にします。% は余りを返し、** はべき乗です。

# Division, floor division, remainder and power
print(7 / 2)    # 3.5
print(7 // 2)   # 3
print(7 % 2)    # 1
print(2 ** 10)  # 1024
floorは「下へ」// は負の無限大の方向へ丸めるため、-7 // 2 は -3 ではなく -4 です。正の数では小数部の切り捨てに見えますが、負の数では異なります。

何株まで買えるか

切り捨て除算は「いくつ入るか」に答えます。現金1,000、価格184.25なら、cash // price が買える整数株数、cash - shares * price が残りの現金です。floatに対する // はfloat(5.0)を返すので、本当の個数が必要なときは int() で包みます。

# Whole shares for a cash budget, and the cash left over
cash, price = 1000, 184.25
shares = int(cash // price)
left = cash - shares * price
print(shares, left)  # 5 78.75

floatは近似値

floatは数を2進数で保持するため、0.1 のような多くの小数は2進数で正確に表せません。Pythonは最も近い値を保存するので、ごくわずかな誤差が出ます。これはどの言語でも起きることで、Pythonのバグではありません。クオンツの鉄則はfloatを == で比較しないことです。わずかな許容誤差を認める math.isclose を使いましょう。

# Floats are approximate: compare with isclose, not ==
import math

print(0.1 + 0.2)                      # 0.30000000000000004
print(0.1 + 0.2 == 0.3)               # False
print(math.isclose(0.1 + 0.2, 0.3))   # True

ティックに丸める

round(x, n) は小数第 n 位に丸めます。取引所はティック(たとえば0.05刻み)に乗った価格しか受け付けないので、ティックで割り、整数のティック数に丸めてから、元に掛け戻します。なお round はちょうど半分の値を最も近い偶数へ丸めるため、round(2.5) は 2、round(3.5) は 4 になります。

# Snap a price to the nearest 5-cent tick
price, tick = 184.267, 0.05
ticks = round(price / tick)
print(ticks, ticks * tick)     # 3685 184.25
print(round(2.5), round(3.5))  # 2 4

お金は整数のセントで

floatは近似値なので、正確さが必要なシステムではお金を整数のセントで持ちます。変換は100倍して丸めるだけです。int() は小数部を切り捨てるだけなので、実際には 1998.9999999999998 である 19.99 * 100 は1セント失われてしまいます。

# Dollars to integer cents: round, do not truncate
amount = 19.99
print(amount * 100)          # 1998.9999999999998
print(int(amount * 100))     # 1998  (a cent is lost)
print(round(amount * 100))   # 1999
  • 個数(株数・ロット・日数):int
  • 価格・リターン・比率:float(比較は math.isclose)
  • 正確なお金:整数のセント(または decimal モジュール)

次は文字列とf文字列です。これらの数値を AAPL 184.25 x 184.50 のような読みやすい文字にします。

ラボ:採点される内容

  • shares_for_cash で予算で買える整数株数を数える25点
  • leftover_cash で残りの現金を求める25点
  • round_to_tick で価格を最も近いティックに合わせる25点
  • cents でドルを正確な整数セントに変換する25点
エクスプローラー · lab-2-1
▾ lab-2-1
…
bash · ブラウザ内
learner@quantcraft:~/lab-2-1$
Pythonは未読み込みPythonLn 1, Col 1Spaces: 4UTF-8

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

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

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

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

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

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