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

関数の定義と呼び出し

ロードマップ上の位置モジュール 1/11 · トピック 8/33
1.8 関数の定義と呼び出し
—ラボスコア— / 100合計XP—連続日数—

コードのまとまりに名前を付ける

関数は、何度でも実行できる名前付きのコードのまとまりです。def、名前、かっこ、コロンで一度だけ定義し、その下のインデントされたブロックが本体になります。return は関数を呼び出した側へ値を返します。呼び出すとは、名前に続けてかっこと処理したい値を書くことです。

def gross_value(price, quantity):
    return price * quantity

print(gross_value(184.25, 200))  # 36850.0

パラメータと引数

def のかっこの中の名前がパラメータで、入力のための置き場所です。呼び出すときに渡す値が引数で、順番にパラメータへ入ります。順番を入れ替えると結果が変わります。引数の数が違うとエラーになります。呼び出しごとに、パラメータは新しく用意されます。

# Arguments fill the parameters in order
def spread(bid, ask):
    return ask - bid

print(spread(184.25, 184.5))  # 0.25
print(spread(184.5, 184.25))  # -0.25

returnはprintではない

print は人のために画面に表示します。return は呼び出し元のコードに値を渡し、その値を使い続けられるようにします。return のない関数は「何もない」を意味する None を返します。計算する関数は返すものです。表示するかどうかは呼び出し側が決めます。

# A function with no return gives back None
def show(price):
    print("price", price)

result = show(184.25)   # price 184.25
print(result)           # None

小さな関数を積み重ねる

関数は別の関数を呼び出せるので、小さくテストしやすい部品から大きな動作を組み立てられます。1つの関数には1つの仕事と、それを表す名前を付けましょう。def の直下に書く文字列のdocstringは、次に読む人への説明になります。関数は、それを呼ぶ行が実行される前に定義しておきます。

# Small functions build bigger ones
def gross_value(price, quantity):
    """Value of a position before costs."""
    return price * quantity


def commission(gross):
    """0.1% of the value, but never less than 1.0."""
    return max(1.0, gross * 0.001)


def net_cost(price, quantity):
    """What the position really costs: value plus commission."""
    gross = gross_value(price, quantity)
    return gross + commission(gross)


print(net_cost(184.25, 200))  # 36886.85

複数の値を返す

return a, b は2つの値をタプル(カンマで書く順序付きのペア)として一度に返します。タプルはまもなく独立したトピックで扱います。呼び出し側はすぐに各要素へ名前を付けられます。1,000株の注文を // と % で3分割すると、1回分の数量と余りが返ってきます。

# return several values as a tuple
def split_fill(quantity, slices):
    return quantity // slices, quantity % slices

size, leftover = split_fill(1000, 3)
print(size, leftover)  # 333 1
returnで関数は終わるPythonは最初に到達した return で関数を抜け、その経路で後ろにある行は実行されません。パラメータと関数内で作った変数は、呼び出しの間だけ存在し、外のコードからは見えません(詳しくはスコープのトピックで)。
  • 1つの関数に1つの仕事。名前は何を返すかを表す
  • 計算して return し、表示は呼び出し側に任せる
  • 入力と出力を説明するdocstringを付ける

次は関数の引数とデフォルト値です。名前付き引数、省略可能な値、任意の数の引数で関数を呼び出します。

ラボ:採点される内容

  • gross_value でポジションを評価する関数を定義する25点
  • commission で下限付きの手数料を計算する25点
  • net_cost で2つの関数から実際のコストを組み立てる25点
  • split_fill で2つの値を一度に返す25点
エクスプローラー · lab-8-1
▾ lab-8-1
…
bash · ブラウザ内
learner@quantcraft:~/lab-8-1$
Pythonは未読み込みPythonLn 1, Col 1Spaces: 4UTF-8

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

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

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

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

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

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