σμ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
  • 日本語
  • 中文
σμ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
  • 日本語
  • 中文
SciPy スキル›モジュール 3 · 行列・信号・構造›トピック 3.6·~45 分中級

売買シグナルのための因果フィルタ

スキル上の位置モジュール 3/3 · トピック 6/10
3.6 売買シグナルのための因果フィルタ
—ラボスコア— / 100合計XP—連続日数—

未来を見てしまった滑らかな線

フィルタは、入力列 xₜ を、最近の入力と最近の出力の重み付き和として出力 yₜ に変えます。指数移動平均が最も単純で、yₜ=αxₜ+(1-α)yₜ₋₁ です。scipy.signal ではフィルタは係数リストの組で、b が入力用、a が出力用です。ここでは b = [alpha]、a = [1, -(1 - alpha)] のとき yₜ=b₀xₜ-a₁yₜ₋₁ になります。signal.lfilter(b, a, x) は実際のシステムのように時間の前向きに実行するので、yₜ は s≤t の xₛ だけに依存します。既定では静止状態(状態ゼロ)から始まり、100付近の価格では最初の値がずれます。zi = signal.lfilter_zi(b, a) * x[0] を渡せば最初の値から始められます。結果は pd.Series(x).ewm(alpha=alpha, adjust=False).mean() と機械精度で一致します。

signal.filtfilt(b, a, x) は同じフィルタを前向きと後ろ向きに実行します。遅れが打ち消されるので、滑らかな線はデータにぴったり重なり、チャート上は完璧に見えますが、各出力はそれより後の入力に依存します。売買シグナルの作成に使えばリークです。トレンドシグナル、つまり対数価格からその平均を引いたものを翌日のリターンと相関させます。SPYの2,501日、α=0.1 では、因果フィルタのシグナルの相関は -0.055(弱い平均回帰)、ゼロ位相では -0.33 です。α=0.3 では -0.076 と -0.54 です。ゼロ位相の数字は、フィルタ後の値がすでに明日の価格を含んでいるので、どのトレーダーにも稼げません。シグナルの検査は簡単で、ある日付でデータを切り詰め、それより前の値が変わらないことを確かめます。

  • lfilter はリアルタイム、filtfilt は後知恵:トレーディングデスクで動かせるのは前者だけ。
  • 初期状態を設定する:lfilter_zi(b, a) * x[0] が立ち上がりの過渡を消す。
  • 切り詰めテスト:ある日付でデータを切る。有効なシグナルはそれより前で変わらない。

ラボ:採点される内容

  • フィルタ係数10点
  • 因果的な平均20点
  • pandas版10点
  • ゼロ位相の平均15点
  • シグナルと翌日のリターン25点
  • SPYの研究20点
エクスプローラー · lab-sp-21
▾ lab-sp-21
▾ data
…
bash · ブラウザ内
learner@quantcraft:~/lab-sp-21$
Pythonは未読み込みPythonLn 1, Col 1Spaces: 4UTF-8

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

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

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

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

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

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