σμ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.3·~50 分中級

信号のフィルタリングとスペクトル

スキル上の位置モジュール 3/3 · トピック 3/5
3.3 信号のフィルタリングとスペクトル
—ラボスコア— / 100合計XP—連続日数—

ノイズのある系列を滑らかにしてリズムを見つける

フィルタは、各値を近隣の値と混ぜて、ある系列を別の系列に変えます。NNN 日の移動平均が最も簡単なフィルタで、出力は直近 NNN 個の入力の平均なので、ノイズは減りますが出力は遅れます。指数移動平均(EMA)は最近の日により大きな重みを与えます:yt=αxt+(1−α)yt−1y_t=\alpha x_t+(1-\alpha)y_{t-1}yt​=αxt​+(1−α)yt−1​、ここで α=2/(N+1)\alpha=2/(N+1)α=2/(N+1) が平滑化の重みです。signal.lfilter(b, a, x) は過去と現在の値だけを使って、こうしたフィルタを系列に適用します。EMAの平均遅れは (1−α)/α(1-\alpha)/\alpha(1−α)/α 日、NNN 日移動平均の遅れは (N−1)/2(N-1)/2(N−1)/2 日なので、19日平均と α=0.1\alpha=0.1α=0.1 のEMAはどちらも約9日遅れます。

2つ目の仕事は周期を見つけることです。signal.periodogram(x) は系列の分散を、1日あたりの周期数で測った周波数ごとに分けます。周波数 fff のピークは、周期 1/f1/f1/f 日の繰り返しパターンを意味します。1日1回の観測では、0.50.50.5 周期/日(ナイキスト限界)までの周波数しか見えません。より速い周期はより遅い周期と区別できないからです。取引では非常に重要な注意があります。signal.filtfilt はフィルタを順方向、次に逆方向に通して遅れをなくしますが、そのとき各出力は未来の値を使います。filtfilt で作ったシグナルはバックテストでは完璧に見えますが、明日のデータは今日は手に入らないので取引できません。取引するものには lfilter のような因果的なフィルタだけを使ってください。

yt=αxt+(1−α)yt−1,α=2N+1,lag=1−αα  (moving average: N−12),period=1fy_t=\alpha x_t+(1-\alpha)y_{t-1},\quad \alpha=\frac{2}{N+1},\quad \text{lag}=\frac{1-\alpha}{\alpha}\ \ \Big(\text{moving average: }\frac{N-1}{2}\Big),\qquad \text{period}=\frac1fyt​=αxt​+(1−α)yt−1​,α=N+12​,lag=α1−α​  (moving average: 2N−1​),period=f1​(1)
3つの数と1つの周期系列 10,12,1110,12,1110,12,11 を α=0.5\alpha=0.5α=0.5 で扱い、EMAを最初の値から始めます。すると y0=10y_0=10y0​=10、y1=0.5⋅12+0.5⋅10=11y_1=0.5\cdot12+0.5\cdot10=11y1​=0.5⋅12+0.5⋅10=11、y2=0.5⋅11+0.5⋅11=11y_2=0.5\cdot11+0.5\cdot11=11y2​=0.5⋅11+0.5⋅11=11 です。10,12,11,1310,12,11,1310,12,11,13 の3日移動平均は 111111、次に 121212 です。19日の窓は α=2/20=0.1\alpha=2/20=0.1α=2/20=0.1 で、遅れは (1−0.1)/0.1=9(1-0.1)/0.1=9(1−0.1)/0.1=9 日です。1日に 0.050.050.05 回繰り返す純粋な周期は周期 1/0.05=201/0.05=201/0.05=20 日で、ピリオドグラムはちょうどそこにピークを持ちます。実データでは、SPYの日次リターンのラグ1自己相関は −0.10-0.10−0.10 しかありませんが、その2乗はラグ1で 0.270.270.27、ラグ5で 0.300.300.30 です。大きな日は大きな日に続き、これがボラティリティのクラスタリングです。重み α=0.06\alpha=0.06α=0.06(RiskMetricsの λ=0.94\lambda=0.94λ=0.94)で2乗リターンのEMAを取ると、2026年8月21日は日 0.75%0.75\%0.75%(年 11.9%11.9\%11.9%)で、全期間の 1.20%1.20\%1.20% をかなり下回りました。未来を見ずに、過去のゆっくりした平均が教えてくれることです。
  • 平滑化には遅れが伴う:窓が長いほど、また α\alphaα が小さいほど、ノイズは減るが信号は遅れる。
  • ピークから周期を読む:周波数 fff のピークは周期 1/f1/f1/f 日を意味し、上限は0.5周期/日。
  • 取引には因果的フィルタだけ:filtfilt は未来を使うので分析用で、実際のシグナルには使えない。

ラボ:採点される内容

  • EMAの1歩10点
  • 移動平均10点
  • 窓に対応する重み10点
  • 周波数から周期10点
  • EMAの遅れ10点
  • 各ルーチンの働き15点
  • なぜfiltfiltは取引できないか35点
0/ 7問回答済み
問題
1数値で答える10点未回答

α=0.5\alpha=0.5α=0.5、y0=10y_0=10y0​=10、次の値 x1=12x_1=12x1​=12 のとき、y1=αx1+(1−α)y0y_1=\alpha x_1+(1-\alpha)y_0y1​=αx1​+(1−α)y0​ はいくつですか。

y=y =y=許容:± 0.01
2数値で答える10点未回答

系列は 10, 12, 11, 1310,\ 12,\ 11,\ 1310, 12, 11, 13 です。最終日の3日移動平均はいくつですか。

m=m =m=許容:± 0.01
3数値で答える10点未回答

EMAを N=19N=19N=19 日平均に似せたいとき、α=2/(N+1)\alpha=2/(N+1)α=2/(N+1) はいくつですか。

a=a =a=許容:± 0.002
4数値で答える10点未回答

日次系列のピリオドグラムが f=0.05f=0.05f=0.05 周期/日でピークを持ちます。1周期は何日ですか。

p=p =p=許容:± 0.1
5数値で答える10点未回答

EMAの α=0.1\alpha=0.1α=0.1 です。平均の遅れは (1−α)/α(1-\alpha)/\alpha(1−α)/α 日です。何日ですか。

l=l =l=許容:± 0.05
6対応づけ15点未回答

scipy.signalの各ルーチンを、その働きに結び付けてください。

左の各項目に対応するものを選んでください。

lfilter
filtfilt
periodogram
detrend
7言葉で説明する35点未回答

filtfilt で作ったシグナルは遅れがなく、素晴らしいバックテストになります。それが取引できない理由を1〜2文で説明してください。

数学モードキーボードまたは LaTeX で入力問題1/7 · Ctrl ⏎ で確認

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

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

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