EMA(指数平滑移動平均)の使い方や計算方法。Pythonを使ってEMAを計算してみよう。

2018年6月27日

使っているFX会社はどこ?
テクニカル分析用(チャートが使いやすい) → DMM FX
Python API用(FX APIはここしかない) → OANDA ジャパン
デイトレ用(スプレッドがとにかく狭い) → SBI FXトレード

こんばんは、新米データサイエンティスト(@algon_fx)です。今日もしっかりジムに行けて、7.3km走ってきました。気づいたら4月も中旬で、あっという間に今月も終わってしまいますね。もっとペースを早く勉強をしなくてはですね。

さて、今日も特徴量としてのテクニカル指標シリーズとして、「EMA(指数平滑移動平均)」をPythonを使って計算してみます。EMAは以前にPythonで書いた単純移動平均の兄弟分ですね。参考までにですが、EMAはExponential Moving Averageと呼ばれています。

では、早速、EMAをPythonで書いてみましょう!

【人気記事】

私の機械学習の開発環境&トレード環境を解説

EMA(指数移動平滑平均)とは?

単純移動平均(Simple Moving Average)では、「単純」に所定の期間の為替レートの平均値を計算しました。例えば50分単純移動平均では、50分間のレートの価格を「平等に」扱って計算をしましたよね?

では、ここで一つ考えてみてください。

50分前の為替レートと1分前のレートがあったとして、どちらが「現在のレート」に対して重視した方が良いでしょうか?パッと考えてみても、やはり直近のレートの方を重視して、50分前の影響力は低めにしたいですよね?

この考えがEMA(指数移動平滑平均)の考え方です。分かりやすい!そしてこういう考え方、好き!では、このEMAですが、為替レートからどのように計算をすれば良いのかをみていきましょう。

EMAの計算方法

もはや名前を見たらそれとなく計算式も浮かびそうですが、想像通り「Exponential(指数)」的に為替レートを「減少」させて平均値を計算します。

単純移動平均(SMA)と指数平滑移動平均(EMA)の計算の違いをみて見ましょう。

SMAは単純に全ての時間のレートを「平等」に対して平均値を求めるので、下記の計算式で求めることが可能です。(レートの期間を分とした場合)

SMA =(2分前終値+1分前終値+現在終値)÷ 3分
*移動平均の期間を3分とした場合

では、指数平滑移動平均ではどのような計算をするのか?下記の式がEMAの計算式となっています。ちょっと一見複雑な計算式に見えますが、期間のnとαの計算のみ分かれば、特に問題ないですよね。(レートの期間を分とした場合)

EMA = 1分前のEMA+α(現在の終値-1分前のEMA)
*移動平均の期間をn
*α=2÷(n+1)

EMAの使い方

EMAですが、基本的な使い方はSMAと大きく違いはありません。ただし、計算方法で見てわかった通り、EMAは直近の価格に比重を置いて計算をしているため、SMAに比べて直近の値動きに敏感!EMAを使う時は非常に重要なポイントかと思うので、しっかり理解をしておきましょう。

下記のチャートですが、1分足のドル円に対して9分期間のEMA(赤)と26分期間のEMA(緑)を表示させています。

青矢印のポイントですが、短期(赤色EMA9)が長期(緑色EMA26)を上から下へ突き破っていますね。このようなポイントは売りシグナルで、いわゆる「デッドクロス」です。

対して赤色矢印では逆に短期(赤EMA9)が長期(緑色EMA26)を下から上へ突き破っている=ゴールデンクロス(買いサイン)が出ています。

SMAとEMAの交差ポイント後の為替レートの値動きの比較をいつかやってみようかと思います。また移動平均がハマる期間(一般的には9と26)も検証してみたい。

では、最後にいよいよPythonを使ってEMAを書いて見ましょう。

EMAをPythonのPandasとNumpyで書いてみる

今回も前回のボリンジャーバンドで使ったドル円のデータセットを使って、EMAを書いてみましょう。データセットの取得方法はこちらの記事をご参照ください。

では、指数平滑移動平均(EMA)の計算をしてみましょう。今回ですが、PandasとNumpyを使います。まずはライブありを読み込む。(使わないのもあるので、適宜、

んでおきまりの USD_JPY_Week2.csv を読み込んで処理してあげましょう。ファイルは上のリンクで生成が可能です。

次はいよいよEMAです。EMAですが、Pandasの ewm() の関数に span として期間を指定してあげて、 mean() を使って平均をとります。

では、Pandasの plot() で簡単に確認して見ましょう。

ちゃんとEMAのショート9とロング26が表示されていますね!

まとめと次へ

さて、今回は指数平滑移動平均(EMA)の概要と基本的な使い方、さらにPandasとNumpyを使ってEMA9とEMA26の計算をしてみました。

記事内には載せていないのですが、Ta-LibでもEMAを計算して確認して見た所…なぜか数値が若干ことなっており…上で計算したPandasのやり方が正しいか要検証が必要そうです。

海外のサイトで調べて見たら、どうやら同様の現象が起きているのが確認できたので、ひょっとするとTa-LibのEMAは少し特殊な計算方法を用いている可能性もありますね。

ブログ読んでいただきありがとうございます!Twitterでも色々と発信しているので、是非フォローお願いします!

2018年6月27日FX トレード

Posted by algon