移動平均
移動平均は、時系列データ(より一般的には時系列に限らず系列データ)を平滑化する手法である。音声や画像等のデジタル信号処理に留まらず、金融(特にテクニカル分析)分野、気象、水象を含む計測分野等、広い技術分野で使われる。有限インパルス応答に対するローパスフィルタ(デジタルフィルタ)の一種であり、分野によっては移動積分とも呼ばれる。
主要なものは、単純移動平均と加重移動平均と指数移動平均の3種類である。普通、移動平均といえば、単純移動平均のことをいう。
単純移動平均 (Simple Moving Average; SMA) は、直近の n 個のデータの重み付けのない単純な平均である。例えば、10日間の終値の単純移動平均とは、直近の10日間の終値の平均である。それら終値を p_{M}, p_{M-1}, ..., p_{M-9} とすると、単純移動平均 SMA(p,10) を求める式は次のようになる:
\text{SMA}_{M} = { p_{M} + p_{M-1} + \cdots + p_{M-9} \over 10 }
翌日の単純移動平均を求めるには、新たな終値を加え、一番古い終値を除けばよい。つまり、この計算では、改めて総和を求め直す必要はない。
\text{SMA}_\mathrm{today} = \text{SMA}_\mathrm{yesterday} - {p_{M-n+1} \over n} + {p_{M+1} \over n}
テクニカル分析では様々な n の値が使われる(5、22、55、200など)。期間の選択は注目している動きの種類に依存する。すなわち短期間の動きなのか、中期間の動きなのか、長期間の動きなのか、である。いずれにしても、移動平均線は、市場が上昇傾向(ブルマーケット)にある場合はサポートとして働き、下降傾向(ベアマーケット)にある場合はレジスタンスとして働く。
一般に移動平均線は実際の動きから少し遅れて平滑化した上で追随する。SMA をあまりに長期間の平均を取るようにすると、現在の平均的な価格からかけ離れた古い価格の影響を受けすぎることがある。これに対処するために考案された、最近の価格に大きな重み付けを与える方式として、後述するWMAとEMAがある。
SMAの特徴として、データに周期的変動があるとき、その周期でSMAを求めると周期が平滑化される。しかし、経済や金融では完全な周期的変動が生じることはほとんどない。
加重平均とは、個々のデータに異なる重みをつけて平均を計算するものである。単に加重移動平均 (Weighted Moving Average; WMA) と言った場合、線形加重移動平均 (Linear Weighted Moving Average; LWMA) のことを指し、重みを徐々に線形に(一定量ずつ)減らす手法を指す。n 日間の WMA では、最も現在に近い日の重みを n とし、その前日を n-1、…… のように重みを減らしていって、最終的にゼロにする。
\text{WMA}_{M} = { n p_{M} + (n-1) p_{M-1} + \cdots + 2 p_{M-n+2} + p_{M-n+1} \over n + (n-1) + \cdots + 2 + 1}
翌日の WMA を計算するには、\text{WMA}_{M+1} と \text{WMA}_{M} の分子 (numerator) の差分が n p_{M+1} - p_{M} - \cdots - p_{M-n+1} であることに注目する。ここで、n 日間の総和 p_{M} + \cdots + p_{M-n+1} を \text{Total}_{M} で表すと、次のようになる:
\text{Total}_{M+1} = \text{Total}_{M} + p_{M+1} - p_{M-n+1}
\text{Numerator}_{M+1} = \text{Numerator}_{M} + n p_{M+1} - \text{Total}_{M}
\text{WMA}_{M+1} = { \text{Numerator}_{M+1} \over n + (n-1) + \cdots + 2 + 1}
この分母は三角数であり、n(n+1)\over2 として簡単に計算できる。
上図は、WMA での重みがどのように変化(減少)するかを示したものである。次節の指数平滑移動平均での重みと比較するとよい。
指数移動平均(Exponential Moving Average; EMA) では、指数関数的に重みを減少させる。指数加重移動平均 (Exponentially Weighted Moving Average; EWMA)、指数平滑移動平均 (Exponentially Smoothed Moving Average) とも呼ばれる。重みは指数関数的に減少するので、最近のデータを重視するとともに古いデータを完全には切り捨てない(重みは完全にゼロにはならない)。右図は、重みの減少する様子を表したものである。なお、EMA は移動平均とは呼べないとする立場もあり、その場合は指数平滑平均 (Exponential Average) と呼ぶ。
重みの減少度合いは平滑化係数と呼ばれる 0 と 1 との間の値をとる定数 α で決定される。α は百分率で表現されることもあり、平滑化係数が 10% というのは α=0.1 と同じことを表している。αを時系列区間 N で表すこともあり、その場合は \alpha={2\over{N+1} となる。例えば、N=19 なら α=0.1 となる。重みの半減期(重みが0.5以下となる期間)は、約 N/2.8854 である(N>5 のとき1%の精度で)。
時系列上のある時点 t の値を Yt で表し、ある時点 t での EMA を St で表す。S1 は定義しない。S2 の値をどう設定するかにはいくつかの手法があり、S2 の値を Y1 とすることが多いが、S2 を時系列上の最初の4つか5つのデータの平均とすることもある。α が小さい場合、S2 をどう設定するかは比較的重要であるが、αが大きい場合は(古い値の重みが小さくなるので)重要ではない。
t≧3 の場合の EMA の計算式は次のとおりである。
S_{t} = \alpha \times Y_{t-1} + (1-\alpha) \times S_{t-1}
この計算式は Hunter (1986)によるものである。各データの重みは、\alpha(1-\alpha)^x Y_{t-(x+1)} になる。Roberts (1959) では Yt-1 の代わりに Yt を使っていた。
この式をテクニカル分析の用語を使って表すと次のようになる。用語が異なるだけで同じ式である
\text{EMA}_\mathrm{today} = \text{EMA}_\mathrm{yesterday} + \alpha \times (\text{price}_\mathrm{today} - \text{EMA}_\mathrm{yesterday})
この式で \text{EMA}_\mathrm{yesterday} を展開すると次式のようなべき級数となり、各時点の価格 p1, p2, …… が指数関数的に重み付けされている。
\text{EMA}_{M} = \alpha \times \left( p_{M} + (1-\alpha) p_{M-1} + (1-\alpha)^2 p_{M-2} + \cdots \right)
理論上これは総和であるが、1-α が 1より小さいので、項はどんどん小さくなって、ある項から先は無視できる大きさになる。
N 日間の EMA といった場合の N は単に係数αを示すに過ぎず、実際の計算は N 日間のデータだけでは済まない。ただし、直近の N 日間のデータが EMA において 86 %の重みをもつ。証明:
\alpha \times \left(1+(1-\alpha)+(1-\alpha)^2+\cdots +(1-\alpha)^N \right)} \over {\alpha \times \left( 1+(1-\alpha)+(1-\alpha)^2+\cdots +(1-\alpha)^\infty \right) = 1-{\left(1-{2 \over N+1}\right)}^{N+1}
(左辺の分母は1であり、分子の等比数列の和が右辺の形になる。)この極限値は、
\lim_{N \to \infty} \left[ 1 - \left(1-{2 \over N+1}\right)^{N+1} \right] = 1-e-2 ≒ 0.8647
になる(e はネイピア数)。
実際には、上のべき級数の式を使って最初のある日までの EMA を計算し、その翌日以降は最初のほうで示した式を使えばよい。
初期値の問題に戻る。古いデータに極めて大きな値があった場合、たとえその重みが小さくても全体には大きな影響を与える。そういう場合には、価格変動がそれほど大きくないと仮定できるなら、重みだけを考慮してある項目数 k までで計算を打ち切ればよい。このとき、省略される項の重みは
\alpha \times \left( (1-\alpha)^k + (1-\alpha)^{k+1} + (1-\alpha)^{k+2} + \cdots \right)
= \alpha \times (1-\alpha)^k \times \left(1 + (1-\alpha) + (1-\alpha)^2 + \cdots \right)
= (1-\alpha)^k
となる。すなわち、全体の重み 1 に対して (1-\alpha)^k に相当する部分が省略されることになる。
例えば、99.9 %の重み(精度)で計算したい場合には、計算する項目数を k={ \log (0.001)  \over \log (1-\alpha)} とすればよい。\log\,(1-\alpha) は N が増えるに従って -\alpha = {-2 \over {N+1} に近づいていくから、N が大きいときは k=3.45(N+1) とすればほぼ 99.9% の精度となる。
なお、\alpha={2\over{N+1} ではなく \alpha={1\over{N} とする EMA もある(次節)。
修正移動平均 (Modified Moving Average; MMA) は、Running Moving Average (RMA)、平滑移動平均 (Smoothed Moving Average) などと呼ばれる。
定義は次式による。
\text{MMA}_\mathrm{today} = {(N - 1) \times \text{MMA}_\mathrm{yesterday} + \text{price} \over{N}
要するに、\alpha={1\over{N} とした指数移動平均である。
Triangular Moving Average (TMA)。三角形移動平均ともいう。単純移動平均を2回適用したものである。
定義は以下のとおり。w は (N+1)/2 の切り上げとする。
\text{TMA} = \text{SMA}(\text{SMA}(\text{price}, w), w)
重みのグラフが二等辺三角形となる。w - 1 日前に最も大きな重みがかかる。
Sine Weighted Moving Average (SWMA)。加重移動平均において、重みのかけ方に正弦波(三角関数)を利用する。線形加重移動平均に近い \cos を利用する方法と、三角移動平均に近い \sin を利用する方法がある。
Cumulative moving Average (CA)。全期間の平均をとった移動平均。
定義は次式のとおり。
\text{CA}_i = {x_1 + \cdots + x_i} \over i}
より一般化し、重みを任意に決めたものは、移動平均とは呼ばれず、畳み込みやFIRフィルタリングなどと呼ばれることが多い。
しかし、「自己回帰移動平均モデル」の「移動平均」は、この一般化した意味である。
単純移動平均より良好な周波数特性を得るため、単純移動平均を数回繰り返すことがある。この操作によってかけられるフィルタをコルモゴロフ・ズルベンコ・フィルタ (Kolmogorov-Zurbenko filter、KZフィルタ) という。
回数を十分増やすと、KZフィルタのインパルス応答はガウス関数に漸近する。