移動平均戦略はどのように計算されるのか
「移動平均戦略」の計算が意味するもの
移動平均戦略とは、価格系列の移動平均を用いる戦略です。「計算される」とは通常、次の2つを意味します。
- 移動平均の値が過去データからどのように計算されるか、そして
- それらの移動平均の値が、状態を追跡するルール(たとえば、ある閾値より上/下、または別の系列とのクロス)にどのように変換されるか。
移動平均はそれ自体では予測ではありません。これは、(終値などの)系列を平滑化して短期のノイズを減らすための表現です。
中核となる計算:価格データからの移動平均
手順1:入力系列を選ぶ
各時点の価格の時系列を選びます。たとえば:
- 各時間ステップごとの終値
- 典型価格(高値・安値・終値の関数)
- 別の一貫した価格定義
計算の前提:その系列は時間ステップで等間隔であること(たとえば、1時間ごと、または1日ごとに1つの値)です。データが不規則な場合は、まずリサンプリングまたは整列する方法が必要です。
手順2:参照(ルックバック)ウィンドウ長(window)を選ぶ
(n) を平均化ウィンドウ内の期間数とします。
- (n) が大きい:より滑らかになるが、遅れが増える。
- (n) が小さい:より反応が速くなるが、ノイズに敏感になる。
系列の開始時点では、(n) 個の過去値がまだ揃っていないため、歴史的な値の数は (n) 未満になります。多くの実装では次のいずれかを行います:
- 十分なデータが揃うまで「利用不可(not available)」を出力する、または
- 最初の完全なウィンドウの後から開始する。
手順3:移動平均値を計算する
よく使われる移動平均の式は2つあります。
単純移動平均(SMA)
時刻ステップ (t)、価格 (P_t) とすると、SMA は [ \text{SMA}t = \frac{1}{n}\sum{i=0}^{n-1} P_{t-i} ] これは、直近の観測価格 (n) 個の平均を計算します。
指数移動平均(EMA)
EMA は、直近の値により大きな重要度を与える重み付けの仕組みを使います。一般的な定義方法では平滑化係数 (\alpha) を用います: [ \alpha = \frac{2}{n+1} ] そして [ \text{EMA}t = \alpha P_t + (1-\alpha)\text{EMA}{t-1} ] (\text{EMA}_{t-1}) の初期化が必要です。実務上よくあるアプローチは、最初の (n) 点に対するSMAを初期EMAとして設定するか、最初に利用可能な価格を使うことです。初期化の方法が異なると、初期の値も変わります。
手順4:移動平均を比較するルールを適用する
「戦略」とは通常、計算された移動平均の値に対して動作するルールを意味します。よくあるルールの形は次のとおりです。
- 閾値ルール(Threshold rule): (\text{MA}_t) を価格、固定レベル、またはバンドと比較する。
- クロスルール(Cross rule): 異なるウィンドウ(たとえば (n_1) と (n_2))を持つ2つの移動平均を使う。 (\text{MA1}_t-\text{MA2}_t) の符号が変わるときにクロスが発生する。
状態ルールの例(一般形であり推奨ではない):
- (\text{MA}_t > P_t) のとき (S_t) を「上(above)」、それ以外を「下(below)」と定義する。
- 各時刻ステップで、最新の (\text{MA}_t) と (P_t) を使って状態を更新する。
戦略の内部出力(状態履歴など)を計算するには、必要なのは次のとおりです:
- 選択した移動平均の式(SMA または EMA)、
- ウィンドウ長(複数可)、
- 価格系列の定義、
- そして比較ルール。
実際の計算の仕組み:明示的な例
日次の終値価格系列 (P_1, P_2, \dots) があるとします。次を選びます:
- (n=5) のSMA
- (\text{SMA}_5) から (\text{SMA}_t) まで計算する
(t=5) のとき: [ \text{SMA}_5 = \frac{P_5+P_4+P_3+P_2+P_1}{5} ] (t=6) のとき: [ \text{SMA}_6 = \frac{P_6+P_5+P_4+P_3+P_2}{5} ]
別のSMAとのクロススタイルの比較では、同じプロセスを2回行います。たとえば、ウィンドウ5と10で計算された (\text{SMA}^{(5)}_t) と (\text{SMA}^{(10)}_t) を考えます。すると戦略ルールは、次が正か負かを追跡し、 [ \text{SMA}^{(5)}_t - \text{SMA}^{(10)}_t ] 符号が反転したときに変化を記録する、という形にできます。
検証のための重要な前提:検証のためには、両方の移動平均で同じタイムスタンプと同じ価格定義を使う必要があります。そうしないと、計算された比較が一貫しません。
関連する制限と失敗パターン
1) 遅れ(転換点への反応が遅い)
移動平均は過去データを要約します。特にSMAは固定ウィンドウを平均するため、通常は価格がすでに動いた後に反応します。EMAはより速く反応しますが、それでも平滑化するため遅れます。
2) 横ばいレンジでのホイップソー
価格が往復すると、クロスが繰り返し発生し得ます。平均が正しく計算されていても、(クロスのような)変化に基づくルールは状態を何度も反転させ、不安定な挙動につながります。
3) パラメータ選択への感度
戦略の挙動は、ウィンドウ長(複数可)、平均タイプ(SMA vs EMA)、およびルール定義に強く依存します。(n) の小さな変更でも、計算される系列 (\text{MA}_t) と、それゆえ戦略の内部状態履歴が大きく変わる可能性があります。
4) データと実装上の落とし穴
式が正しくても結果を変えるよくある問題:
- 終値と別の価格定義の使い方が一貫していない
- 最初の (n) 期間の扱いが異なる
- 時間インデックスのずれ(オフバイワンエラー)
- リサンプリングせずに欠損データを処理する
5) コストと執行の影響(式に含まれない入力)
移動平均の計算自体は入力から決定論的ですが、その後の解釈(たとえば、ルールをどう行動に移すか)は、取引コスト、レイテンシ、執行制約の影響を受ける可能性があります。これらの要因は純粋な移動平均の式の一部ではないため、後でパフォーマンスを評価する際には別途扱う必要があります。
検証:計算を独立に確認する方法
特定の市場結果を仮定せずに、計算を検証できます:
- 移動平均のユニットテスト: 小さな既知の価格セットについて、手計算または簡単なスクリプトでSMAまたはEMAを計算し、実装と比較する。
- インデックスを確認: (\text{MA}_t) が (t) で終わる価格を使い、SMAでは (n) 期間を含めているか確認する。
- EMAの初期化を検証: (\text{EMA}_{t_0}) がどのようにシードされるかを明示的に文書化し、そのシードから結果を再現する。
- 比較ルールを再計算: 2つの平均を使っている場合、同じ価格系列から両方を再計算し、符号の変化や閾値が一致するか確認する。
出力が異なる場合、不一致の原因は通常、入力定義(価格系列)、ウィンドウ長の扱い、またはオフバイワンのインデックスであり、移動平均の一般的な数学ではありません。
次に明確化すべき質問
特定の「移動平均戦略」を曖昧なく計算するには、次の項目を定義してください:
- どの価格系列か(終値、典型価格など)
- SMAまたはEMA(または別の平均化手法)
- 1つのウィンドウ長、または複数のウィンドウ
- (\text{MA}_t) の値を戦略の状態へ変換する正確なルール
DOCUMENT END