単純移動平均線(Simple Moving Average)の使い方とPythonでの書き方(List + Numpy + Ta-Libの3パターン)

2018年6月27日

使っているFX会社はどこ?
自動売買用(1万円キャッシュバック中) → インヴァスト証券
Python API用(FX APIはここしかない) → OANDA ジャパン

こんばんは、新米データサイエンティスト(@algon_fx)です。今週は新卒が入社したり、本業の方でも色々と動きがあり、ドタバタでした。データを触っていると、とあるタイミングでいきなり進むことがあるのですが、些細なことで泥沼にはまることも多々あります。(今週は泥沼ウィークでした)

さて、今日は機械学習の特徴量としてのテクニカル指標シリーズとして、「移動平均線」(英語:Simple Moving Average)の使い方とPythonでの書き方をまとめていきます。

【人気記事】

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

単純移動平均線とは?

移動平均線はトレンド系のテクニカ指標です。為替相場の上昇または下降の傾向を表してくれます。為替レートをロウソク足チャートにしてみると解りやすいですが、レートは常に上下に変動しています。その上下変動を排除して滑らかに一定期間の相場を値として滑らかにしたのが移動平均線となります。

移動平均線には期間をパラメータとして与えることが可能です。例えば1分足ローソクで「5」とした場合は、5分間の平均値を利用して移動平均の値が算出される訳です。

参考までにですが、移動平均線には単純移動平均の他に「指数平均平滑平均線(Exponential MA)」や「加重移動平均線(Weighted MA)」などもあります。今回は単純移動平均の話です。

単純移動平均線の計算方法

1日 100
2日 105
3日 108
4日 110
5日 102

例えば上記のように1日ごと円の終値が変動したとしましょう。「単純」な移動平均ですので、各日にちの終値を足して5日で割るだけです。まさに単純ですね。

上記の例で言えば、下記の計算式通り105と単純移動平均の値を求めることが可能です。

(100 + 105 + 108 + 110 + 102) ÷ 5 = 105

参考までにですが、通常、移動平均は「終値」を使用することが一般的なようです。全然余談ですが、「始値」「高値」「安値」「終値」の同期間の移動平均線を計算して、特徴量として使ってみるのもありかもしれませんね。

移動平均線の使い方

色々なFXのサイトで単純移動平均の使い方の解説がありますので、この部分はさっくりやります。単純移動平均の主な使い方は下記の通り。

  • 移動平均線の傾きから相場のトレンドを判断する
  • 移動平均線と現在の価格の位置関係から相場の勢いを見る。レートが移動平均線より上の場合は「強い」。逆に下の場合は「弱い」と判断。
  • 複数期間の移動平均線を使ってトレンドを見分ける
  • 為替レートが移動平均と大きく乖離している場合はレートは移動平均へ戻ろうとする傾向にある
  • 移動平均線を上から下、または下から上などレートが突き抜けた瞬間は、相場が新しいトレンドになる可能性が高い

下の図ですが1分足の期間9分の単純移動平均線です。図の中の赤丸のポイントの前はレートは移動平均線の下を推移していましたが、赤丸をのポイントで移動平均線をレートが突き抜けました。

その後はレートが情報しているのがわかります。

ゴールデンクロスとデッドクロス

テクニカルトレードで恐らくもっとも基本的かつ初歩的な手法として、「ゴールデンクロス」と「デッドクロス」があります。この手法は移動平均線を用いた非常に単純なトレード手法です。

考え方としては、2つの異なる期間の移動平均線を引きます。下の図は赤色が9分、緑色が26分の移動平均線です。

下で青まるで囲っている部分を注目してみましょう。このポイントで緑色(期間が長い)が赤色(期間が短い)に下から上へ抜けらています。このようなポイントを「ゴールデンクロス」と呼び、この買いシグナルとなっています。

逆に上から下に抜けたら「デッドクロス」で売りシグナルになります。

Pythonで単純移動平均を買いてみよう

こんな単純な計算をドヤ顔でPythonで買いてみよう!なんて言うのも恥ずかしいですが、まぁ、念のためやっておきましょう。

上の計算のセクションでやった値を使ってPythonで移動平均の値を計算してみよう。

期間は N として5日間と設定しています。では、プリントしてみましょう。

[105.0]

うむ。ちゃんと上記で手動で計算した通りになりますね。当然、Forループなんて使わずに手動でも計算が可能ですが、今後の大量の為替レートを計算しなくてはいけないと考えれば、期間を指定してリストで戻ってきた方が便利でですね。

また、Pythonの高度計算ライブラリ「Numpy」の np.convolve でも移動平均を簡単に計算できます。

array([ 105.])

Numpyを使った方が明らかに計算は早くなるので、実際にはこっちの方を使うことが多くなりそう。最後にしつこいですが、最近覚えたてのTa-Lib(テクニカル指標を算出してくれるライブラリ)でもやってみよう。

Ta-Lib先輩はPandasのシリーズを扱うので、rateをPandas Seriesへ変換してから渡してあげましょう。

0 NaN
1 NaN
2 NaN
3 NaN
4 105.0
dtype: float64

と、このようにTa-LibではPandasのシリーズで戻してくれます。

まとめ

今回は特徴量で使うテクニカル指標シリーズの「単純移動平均」でした。

ものすっごい単純な指標ではありますが、ゴールデンクロスなどのように、使い方は奥深そうです。特に特徴量として使うのであれば、為替レートへの距離、異なる期間の移動平均の値ごとの距離、などなど掘り下げようがいくらでもありそうですね。

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

使っているFX会社はどこ?
自動売買用(1万円キャッシュバック中) → インヴァスト証券
Python API用(FX APIはここしかない) → OANDA ジャパン

2018年6月27日FX トレード

Posted by algon