【FX×Python】MACDによるシストレ実践|外国為替相場のリアルタイムテクニカル分析・自動売買支援

こんにちは、DXCEL WAVEの運営者(@dxcelwave)です!

こんな方におすすめ!
  • PythonでMACDを用いたFXのテクニカル分析を実践したい
  • システムトレードにテクニカル分析を適用しFX買い・売りシグナルの取得を自動化したい
目次

【FX】MACDとは

MACD(Moving Average Convergence Divergence)とは、移動平均線を応用したテクニカル分析指標です。

シグナル線とMACD線という2つを用いて外為相場が現在「買い」「売り」どちらに傾いているのか判断する手法です。

【参考】MACDグラフの見方
  • MACDの線(赤線)シグナル線(青線)を上から下に抜けた時、「売り」と判断
  • MACDの線(赤線)シグナル線(青線)を下から上に抜けた時、「買い」と判断

MACD線とシグナル線の求め方

短長2つの移動平均の乖離幅を1つの線で表現したものがMACD線です。また、MACD線の値をさらに対象期間で平均したのがシグナル線です。計算式は以下のように示されます。

MACD線の求め方

MACD線 = 短期指数移動平均 – 長期指数移動平均 = 短長期移動平均の乖離幅

シグナル線の求め方

シグナル線 = (短期指数指数移動平均 – 長期指数移動平均)(MACD)の指数平滑移動平均線

MACDのチャートを見ると、MACDとシグナル線2本で表現されることが分かります。MACDは買い・売りのサインが判断しやすいのが特徴であり、初心者の方にも使い勝手も良いオシレータ系指標であると言えます。

【コード全量公開】MACDを用いたFXテクニカル分析

本記事ではPythonをもとに、MACDを用いて外国為替相場のテクニカル分析を実施し、最終アウトプットとして上図のようなグラフを出力できるようになることを目指したものです。

【参考】FX取引をこれから始めたい方向け

FX取引をこれから始めてみたい方向けにおすすめの口座開設先をご紹介します。使い勝手の良い管理画面や非常に見やすいチャート画面を活用し、取引チャンスを見逃したくない方はDMM FXがおすすめです。

【事前準備】Python環境の構築

Pythonでテクニカル分析を行うにあたり、いくつか事前準備が必要になります。

次に示すPythonライブラリを予めインストールしましょう。

TA-Lib

Ta-Libはテクニカル分析にPythonライブラリです。以下、OSに合ったインストール方法を選択しましょう。

yfinance

外国為替相場データの抽出には、yfinanceを用います。

pip install yfinance

mlpfinance

外国為替相場の価格推移グラフを可視化する手段としてmplfinanceを用います。

pip install mplfinance

【FX×Python実践】MACDによる外為相場のテクニカル分析

それでは実際にPythonプログラミングによるMADCを用いた外為相場テクニカル分析を行なっていきます。この方法を学ぶことで、FX自動売買における買い・売りシグナルの自動取得ができるようになるでしょう。

Yahoo Finance|外為データ取得

外為相場データを取得します。yahoo financeの関数をもとに次のように記述します。

コード

import numpy as np
import pandas as pd
import yfinance as yf

data = yf.download(tickers  = 'USDJPY=X',    # 通貨ペア
                   period   = '6mo',         # データ取得期間
                   interval = '1d',          # データ表示間隔
                  )

出力イメージ

print(data)

# 出力イメージ
#                   Open        High         Low       Close   Adj Close  Volume
# Date                                                                          
# 2022-06-20  135.276001  135.412003  134.548996  135.276001  135.276001       0
# 2022-06-21  135.087006  136.328995  134.945007  135.087006  135.087006       0
# 2022-06-22  136.268997  136.595001  135.751007  136.268997  136.268997       0
# 2022-06-23  136.024002  136.181000  134.294006  136.024002  136.024002       0
# 2022-06-24  134.839996  135.272003  134.369995  134.839996  134.839996       0

引数情報

通貨ペアはtickersに指定しましょう。今回の例ではUSD/JPYを設定しています。

yf.download()を用いてFX相場データは取得できます。「データ取得期間」「取得間隔」を調整すると、スキャルピングトレード・デイトレに適用したデータが取得も可能です。

データの取得範囲はperiodで調整します。

period = “15m”直近15分のデータ取得
period = “1d”直近1日のデータ取得
period = “1mo”直近1ヶ月のデータ取得
period = “3mo”直近3ヶ月のデータ取得
period = “1y”直近1年のデータ取得

データ取得間隔はintervalで調整します。

period = “1m”1分間間隔でデータ表示
period = “15m”15分間間隔でデータ表示
period = “1d”1日おきにデータ表示
period = “10d”10日おきにデータ表示
period = “1mo”1ヶ月おきにデータ表示

MACD

前述で取得した外為相場のデータを用いてMACDとシグナルを計算します。

import talib

# 引数情報
fast_period   = 10    # 短期指数移動平均線(EMA)の期間
slow_period   = 25    # 長期指数移動平均線(EMA)の期間
signal_period = 8     # シグナル (MACDの指数平滑移動平均線)の期間

macd, macd_signal, macd_hist = talib.MACD(data['Close'], # データ取得元
                                          fast_period,   # 短期EMAの期間
                                          slow_period,   # 長期EMAの期間
                                          signal_period) # シグナルの期間

# データ追加
data['macd'] = macd
data['macd_signal'] = macd_signal

FX|外為相場の推移とMACD

最後は前述の計算結果を用いてグラフを描画してみましょう。

import mplfinance as mpf

# データ分析範囲(直近6ヶ月分を指定)
period = 30 * 6
data   = data.tail(period)

# グラフ可視化
graph  = [
         mpf.make_addplot(data['macd'],        panel=2, color='red'),
         mpf.make_addplot(data['macd_signal'], panel=2, color='blue'), 
         ]

mpf.plot(data, # データ 
         type='candle',     # グラフの種類('candle', 'line'等が指定可能)
         volume=True,       # 出来高の表示有無
         mav=(5,15),        # 移動平均線(短期移動平均線の日数、長期移動平均線の日数)
         style='yahoo',     # グラフスタイル(詳しくはこちらを参照:https://github.com/matplotlib/mplfinance/blob/master/examples/styles.ipynb)
         addplot=graph,     # 連結するグラフ情報
         figratio=(12,9),   # グラフ縦横の比率
        )

【コード全量】MACDのFXテクニカル分析

最後に本日ご紹介したコードの全量を示します。外為相場データの取得期間やMACDのパラメータ(EMAの計算期間など)を柔軟に調整することで、お好みの取引パターンに応じたテクニカル分析が可能になるはずです。

import numpy as np
import pandas as pd
import yfinance as yf
import talib

data = yf.download(tickers  = 'USDJPY=X',    # 通貨ペア
                   period   = '6mo',         # データ取得期間
                   interval = '1d',          # データ表示間隔
                  )

# 引数情報
fast_period   = 10    # 短期指数移動平均線(EMA)の期間
slow_period   = 25    # 長期指数移動平均線(EMA)の期間
signal_period = 8     # シグナル (MACDの指数平滑移動平均線)の期間

macd, macd_signal, macd_hist = talib.MACD(data['Close'], # データ取得元
                                          fast_period,   # 短期EMAの期間
                                          slow_period,   # 長期EMAの期間
                                          signal_period) # シグナルの期間

# データ追加
data['macd'] = macd
data['macd_signal'] = macd_signal

import mplfinance as mpf

# データ分析範囲(直近6ヶ月分を指定)
period = 30 * 6
data   = data.tail(period)

# グラフ可視化
graph  = [
         mpf.make_addplot(data['macd'],        panel=2, color='red'),
         mpf.make_addplot(data['macd_signal'], panel=2, color='blue'), 
         ]

mpf.plot(data, # データ 
         type='candle',     # グラフの種類('candle', 'line'等が指定可能)
         volume=True,       # 出来高の表示有無
         mav=(5,15),        # 移動平均線(短期移動平均線の日数、長期移動平均線の日数)
         style='yahoo',     # グラフスタイル
         addplot=graph,     # 連結するグラフ情報
         figratio=(12,9),   # グラフ縦横の比率
        )

【FX】シストレ実践法・その他優良情報

最後までご覧いただきありがとうございました。当サイトではFXにおける多様なシステムトレード手法の解説記事を取り扱っております。

システムトレードによるFX取引解説記事

対応言語記事名
Python【FX】過去データ(ヒストリカルデータ)を大量取得する方法
Python【FX】テクニカル分析|移動平均線
Python【FX】テクニカル分析|ボリンジャーバンド
Python【FX】テクニカル分析|MACD
Python【FX】テクニカル分析|RSI

【参考】仮想通貨・ビットコイン|金融投資情報

当サイトでは仮想通貨・ビットコインにおける多様な分析および自動売買手法を配信しています。ビットコイン投資にも興味がある方は是非こちらもご覧下さい。

仮想通貨・ビットコイン|情報一覧

自動売買ツールとは|超具体的実装方法

最後に

この記事が気に入ったら
フォローしてね!

本記事をシェア!
目次