DPOの計算方法: 公式、入力、および検証
直接回答
DPO(Detrended Price Oscillator)は、現在の価格から時間的に後方にシフトされた移動平均値を引くことで計算されます。正確な結果は、2つのユーザーが選択するパラメータ、すなわち移動平均の長さとシフトオフセット(しばしば移動平均の長さから導かれる)に依存します。
このメカニズムを表現する一般的な方法は次の通りです。
- 選択した価格シリーズの長さ L にわたる移動平均を計算します。
- シフトオフセットを計算します。これは多くのDPO定義で offset = floor(L/2) + 1 として表されます。
- 各時間インデックス t に対して、以下を計算します。
- DPO(t) = Price(t) − MA(t − offset)
簡単に言えば、現在の価格を、その移動平均「基準」が過去のある時点であった場所と比較し、長期的なトレンド成分を効果的に除去(分離)します。
メカニズムと定義
ここでの「Detrended」の意味
DPOにおける「Detrended」とは、統計的なトレンド回帰を実行することを意味するわけではありません。DPOは減算と時間シフトを使用します。移動平均は、長さ L にわたる価格の滑らかなバージョンを表します。その移動平均値を後方にシフトすることで、DPOはゼロの周りのサイクリック成分を分離しようとします。
選択しなければならない入力
DPOを計算するには、以下が必要です。
- 価格シリーズ: 例えば、各時間期間の終値。計算は、使用する価格に依存します。
- 移動平均の方法: 典型的には単純移動平均(SMA)ですが、一部の実装では他の移動平均を使用します。
- 移動平均の長さ (L): 移動平均を計算するために使用される期間の数。
- シフトオフセット (offset): 移動平均に適用される時間シフト。多くの説明では offset = floor(L/2) + 1 を使用しますが、実装によって異なるため、データやプラットフォームで使用されている定義を確認する必要があります。
ステップバイステップ(明示的な仮定付き)
以下を使用すると仮定します。
- 価格 = Close(t)
- 移動平均 = L 期間の SMA
- シフトオフセット = offset = floor(L/2) + 1
それでは:
- 各時間 t について、十分な履歴が存在する場合、SMA(t) を計算します:
- SMA(t) = (1/L) * sum_{i=0..L-1} Close(t − i)
- 与えられた時間 t について、SMA(t − offset) が存在する場合、以下を計算します:
- DPO(t) = Close(t) − SMA(t − offset)
これにより、データ要件が明示的になります: L + offset 期間の履歴があれば、DPOを計算できないことになります。
証拠または例(自己検証可能)
小さな仮想データセットを使用した例
以下を想定します。
- L = 5
- offset = floor(5/2) + 1 = 3
- 価格は Close
- 移動平均は SMA
時間インデックス t で:
- (t − 3) から (t − 3 − 4) までのクローズを使用して SMA(t − 3) を計算します。合計5つの値です。
- そのSMAを Close(t) から引きます。
したがって、DPOは Close(t) − SMA(t) ではありません。違いは シフト です。 SMA(t − offset) を使用します。
独自の計算を独立して検証する方法
プラットフォームの出力に依存せずにDPO実装を検証するには:
- 使用する L と offset の定義を選択します。
- 価格データから直接移動平均シリーズ MA(t) を計算します。
- その移動平均を offset で後方にシフトして MA_shifted(t) = MA(t − offset) を作成します。
- DPO(t) = Price(t) − MA_shifted(t) を計算します。
結果が一致すれば、計算メカニズムを確認できます。
制限とリスク(重要な故障モード)
1) 実装の違いが数値出力を変える
DPOは計算しやすいですが、オフセットルール と時には 移動平均の種類 が定義間で異なることがあります。公式が似ていても、オフセット を1期間変えるだけでオシレーターが変わることがあります。
2) データの利用可能性が「ウォームアップ」期間を作る
DPOはシフトされた移動平均を使用するため、MA(t − offset) を計算するために十分な歴史的ポイントが必要です。初期の値は未定義または、ツールが欠落した履歴をどのように処理するかに依存します。
3) サイクルの仮定が崩れたときにDPOは予測不可能に振る舞うことがある
DPOはしばしばゼロの周りのサイクリックな振る舞いを分離するものと解釈されます。しかし、価格動態が変化した場合(例えば、ボラティリティレジムが変化したりトレンド振る舞いが変化したりする場合)、減算とシフトはもはや同じ成分を分離しなくなる可能性があります。これにより、ゼロクロスや振幅の振動の解釈が誤解を招くことがあります。
4) 市場コストと実行は、ダウンストリームの使用に影響を与える可能性がある
この記事は計算についてのものですが、実用的な故障モードを指摘することは重要です: 誰かがDPOを決定に使用する場合、実際の結果は取引コスト、ビッド/アスクスプレッド、実行に影響を受けます。これらの要因はインジケータ数学の一部ではなく、見かけのシグナルを支配する可能性があります。
検証または次の質問
有用な次のステップは、2つの独立した実装を比較することです。
- 1つは、スプレッドシートを使用して DPO(t) = Price(t) − MA(t − offset) で手動計算されたもの
- もう1つは、選択したチャーティングツールで生成されたもの
その後、ツールが同じ 価格フィールド、同じ 移動平均の種類、同じ オフセット定義 を使用しているかどうかを確認します。結果が異なる場合、最も可能性の高い原因は定義の不一致ではなく数学的なエラーです。
必要に応じて、L の異なる値がオシレーターのタイミングと滑らかさにどのように影響を与えるかを調べることもできます。DPOの振る舞いは、選択されたパラメータに大きく依存します。