一目均衡表やボリンジャーバンドのコードを書いていたとき、何の疑問もなくrolling(20).mean()を使っていたのですが、ふと「これって単純移動平均(SMA)だけど、EMA(指数移動平均)を使ってる人も多いよな、何が違うんだっけ」と手が止まりました。。。今まで「なんとなく」でSMAを使い続けていた自分に気づいて、ちゃんと数式から整理してみることにしました。
移動平均は投資を始めたら誰でも真っ先に触る指標だと思います。でも「SMAとEMA、結局どっちがいいの?」ってちゃんと説明できる人、意外と少ないんじゃないでしょうか。僕も含めて。調べてみたら「反応の速さ」と「ノイズの少なさ」のトレードオフという、けっこう奥深い話でした。
SMA(単純移動平均):全部の値を平等に扱う
SMA(Simple Moving Average)は直近n日分の終値を単純に平均するだけです。数式で書くとこうなります。
SMA(t) = ( P(t) + P(t-1) + … + P(t-n+1) ) / n
n日前の値も昨日の値も、まったく同じ重み(1/n)で扱われます。これがSMAの特徴であり、弱点でもあります。急に株価が動いても、古いデータに引っ張られてSMA自体はゆっくりとしか動きません。反応が遅い分、ノイズには強い(だまされにくい)指標とも言えます。
EMA(指数移動平均):直近の値を重視する
EMA(Exponential Moving Average)は、直近のデータほど大きい重みを与える移動平均です。漸化式で書くとこうなります。
EMA(t) = α × P(t) + (1 − α) × EMA(t−1)
ここでαは平滑化係数で、期間nを使ってα = 2 / (n + 1) と定義されるのが一般的です。この漸化式、よく見ると「今日の値」と「昨日までの平均(EMA)」を混ぜているだけなのですが、これを展開していくと、過去の値の重みが指数関数的(幾何級数的)に小さくなっていくことが分かります。だから「指数」移動平均と呼ばれるわけです。直近の値の影響力が大きいぶん、価格変化への反応がSMAより速くなります。
WMA(加重移動平均)という選択肢もある
WMA(Weighted Moving Average)はSMAとEMAの中間的な存在で、直近の値ほど大きい重みを線形に(一次関数的に)割り当てます。n日分のデータに対して、直近をn、その前をn-1、…、一番古いものを1という重みで加重平均を取ります。
WMA(t) = ( n×P(t) + (n-1)×P(t-1) + … + 1×P(t-n+1) ) / ( n + (n-1) + … + 1 )
EMAほど極端に直近偏重ではないものの、SMAより反応は速い、というポジションです。実務ではSMA・EMAに比べると使用頻度は落ちますが、一目均衡表の基準線の計算などにもこの「加重」の考え方に近い発想が使われています。
「ラグ」を数値で比較してみる
SMAとEMAの違いを「なんとなく」ではなく数値で見るために、Pythonで20日移動平均を3種類とも計算し、株価が急変したときの反応速度を比べてみました。
import pandas as pd
import yfinance as yf
df = yf.download("6758.T", period="6mo") # 例:ソニーグループ
close = df["Close"]
n = 20
sma = close.rolling(n).mean()
ema = close.ewm(span=n, adjust=False).mean()
weights = list(range(1, n + 1))
wma = close.rolling(n).apply(
lambda x: (x * weights).sum() / sum(weights), raw=True
)
result = pd.DataFrame({"close": close, "SMA20": sma, "EMA20": ema, "WMA20": wma})
print(result.tail(10))
# 急落日を1つ選んで、各移動平均が「何日遅れで反応したか」を目視確認する
実際に決算発表で急落した日のデータを見てみると、EMAはSMAよりも2〜3日早く方向転換を示し、WMAはその中間くらいの反応でした。数式通りの結果ではあるのですが、実際に自分のデータで確認すると納得感が違いますね。
投資への応用:どう使い分けるか
ゴールデンクロス・デッドクロスのようなトレンド転換シグナルを重視するなら、反応の速いEMAの方がエントリーが早くなります。ただし反応が速いということは「だまし」も拾いやすいということなので、レンジ相場ではEMAは無駄なシグナルを増やしやすい側面もあります。逆に、大きなトレンドの方向性だけをどっしり確認したい場合はSMAの鈍感さがむしろメリットになります。
僕は今のところ、日本株製造メーカーのスイングトレードでは反応速度を重視してEMA20・EMA60の組み合わせを、ドル円のような値動きの荒いFXでは「だまし」を減らす目的でSMAを使う、という使い分けにしています。どちらが絶対的に優れているというより、自分の時間軸と相性で選ぶものなんだなと理解しました。
まとめ
SMAは「全期間平等」、EMAは「直近を指数関数的に重視」、WMAは「直近を線形に重視」という整理をしてみると、なんとなく使っていた指標がぐっと腑に落ちました。数式アレルギーで避けていた僕みたいな人ほど、一度手を動かして計算してみる価値があると思います。次はEMAのαをいろいろ変えて、自分の売買スタイルに合う期間設定を最適化してみようと考えています。

