ゼロラグ移動平均はどのように計算される?(公式・パラメータ・必要データ)
直接の答え
ゼロラグ移動平均(ZLMA)は、既存の移動平均の考え方(通常は価格の加重または平滑化された平均)を取り、それを修正された(“de-lagged”)入力系列に投入することで計算されます。言い換えると、ZLMAは魔法の新しいデータセットではなく、同じ種類の平均化を組み替えて、平均が直近の変化により早く反応するようにします。
それを正確に、かつ独立して検証するには、事前に次の4つを指定する必要があります:
- 価格ソース(例:終値)、
- 指標内で使う平滑化手法(多くの場合EMAですが、厳密な定義は異なります)、
- 参照(ルックバック)の長さ(一般に L と書かれます)、そして
- 元の価格系列を調整された入力に変換する、正確な “de-lag(ラグ除去)” の調整ルール。
ZLMAの定義は実装によって異なるため、あらゆる計算で最も重要なのは、あなたがテストしているものと同じ公式を使うことです。
メカニズムまたは定義
移動平均は、時系列(時間に沿った価格値)を平均することで、より滑らかな系列に変換します。トレードオフはラグです。標準的な移動平均は、基となる変化の後に反応しがちです。
“ゼロラグ”のアプローチは、平滑化によって導入される遅れなしに価格系列がどう動いたかを推定することで、そのラグを減らそうとします。その考え方を表す一般的な方法は、現在の価格とラグのかかった価格を組み合わせて調整済みの入力系列を作り、その調整済み入力に平滑化フィルタを適用することです。
よく使われる教育用の構造は、次のようになります:
- 価格系列 (P_t) を選ぶ(例:時刻 (t) の終値)。
- 長さ (L) を選ぶ。
- (L) に依存するルール(場合によっては半分の長さやラグオフセットも)を使って、de-lagされた入力 (P^{*}_t) を計算する。
- 出力を、次のような平滑化された平均として計算する(EMA風の平滑化など):
[\text{ZLMA}_t = \text{Smooth}(P^{*}_t, L)]
ZLMAのバリアントは、ステップ(3)と(4)のどの部分を選ぶかが異なります。そのため、「ゼロラグ移動平均」とラベル付けされた2つのチャートが見た目で違って見えることがあります。ラベルは同じ一般的な概念を指しているかもしれませんが、基となる公式は異なり得るのです。
定義しなければならないパラメータ
“自己完結型”の計算であっても、指標のパラメータを定義する必要があります:
- 長さ (L): 平滑化がまたがる期間数。
- ソース (P_t): 平均化される価格(終値、典型価格など)。
- ZLMA内の平滑化手法: EMAのような平滑化、SMAのような平滑化、または別の再帰フィルタ。
- de-lagルール: 元の (P_t) から (P^{*}_t) を作る、正確な調整の公式。
これらの定義を固定しないと、検証が曖昧になります。
証拠または例
以下は、ライブ市場データに頼らずに適用できる、検証しやすいアプローチです。
例の構造(前提が明確に書かれている場合)
仮定:
- 価格ソースは終値:(P_t)。
- 平滑化の長さは (L = 10)。
- ラグオフセット (d) を長さから導出し、それを使って de-lag 入力を作る。
- 最終出力は、de-lag入力に適用される平滑化フィルタ。
計算は、次のような汎用で検証可能な形で書けます:
- (d) を選ぶ(例:(L) に比例したオフセット)。
- (P^{*}t) を (P_t) と (P{t-d}) の関数として構築する。
- 平滑化を適用する:
- 平滑化がEMAのような場合、(L) に基づく重み係数 (\alpha) を使い(一般に (\alpha = 2/(L+1)))、再帰的な更新を行います。
そして、十分な履歴が存在する各時点 (t) で次を計算します: [P^{}t = f(P_t, P{t-d}, L)] [\text{ZLMA}_t = \text{EMA-like-smooth}(P^{}_t, L)]
数値的に確認すべきこと
計算したZLMAが参照実装と一致するかを確認するには、次の点を順番にチェックしてください:
- アラインメント: 時間インデックス t が両側で同じであることを確認(オフバイワンの誤りはよくあります)。
- ウォームアップ期間: 多くの移動平均計算では、値が安定するまでに複数のバーが必要です。
- 入力定義: 指標内で使われる価格は一致している必要があります(終値か、別の価格か)。
- パラメータ対応: 実装が長さを (d) に、さらに平滑化係数にどう変換しているかを確認。
これらのどれかが異なれば、上位概念が同じでも結果が分岐し得ます。
例から明らかになる制約
数学が正しくても、ZLMAは依然として平均化フィルタです。ノイズの多いデータでは、de-lag調整によって応答性が高まる一方で、出力のボラティリティが増えることがあります。急な反転では、ラグを減らすことで、従来の移動平均よりも早く指標が「反転」する可能性があり、その結果、後続の価格挙動に対してオーバーシュートが起きるかもしれません。
つまり、この制約はコーディングの問題ではなく、「ラグが少ない」フィルタが、ランダム性や急なレジーム変化と相互作用することに内在しています。
限界とリスク
-
指標の定義は普遍的ではありません。 「Zero Lag Moving Average」という用語は、異なるde-lagおよび平滑化ルールで使われます。プラットフォーム上のものとは別のバリアントを選ぶと、あなたの計算は一致しません。
-
それでも予測器ではなくフィルタです。 de-lagされた平滑化手法は、ラグを移動平均に対して減らすかもしれませんが、将来の価格が指標に従うことを保証しません。
-
ノイズが増幅される可能性があります。 入力をより早く反応させるよう調整すると、短期の変動に対する感度も高まることがあります。
-
データ要件が重要です。 一貫した過去のサンプリングが必要です。欠けたバー、異なるセッションの区切り、またはローソク足の作り方の変更は、計算された系列を変えてしまいます。
-
計算は初期条件に依存します。 再帰的な平滑化(EMA風の計算でよくある)は、開始値または初期化方法を必要とします。初期化が異なると、初期の出力に影響します。
これらの限界は、失敗モードを定義します:バリアント定義の不一致、ノイズの多い入力への感度、そしてウォームアップ/初期化の影響です。
検証または次の質問
ZLMAを独立に検証するには:
- あなたが使っている正確な公式バリアントを書き下してください。de-lagルール (P^{*}_t) と平滑化手法を含めます。
- 固定した価格ソースと長さ (L) を選びます。
- 同じ時間インデックスとウォームアップの扱いで、過去データから指標を計算します。
- ウォームアップ期間の後に、結果を点ごとに比較します。
曖昧さを減らすための次の有用な質問は:あなたが使っているZLMAの正確なバリアント定義は何ですか(de-lagルールと平滑化ステップ)? あなたが再現しようとしている特定の公式(または正確な疑似コード)を共有すれば、その計算はそれに対して正確に照合できます。
DOCUMENT END