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

当ページには広告が含まれています。

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

こんな方におすすめ!
  • Pythonで移動平均線を用いたFXのテクニカル分析を実践したい
  • テクニカル分析をもとにFX売買意思決定を自動化したい
目次

【FX】移動平均線とは

移動平均線(Moving Average)とは、ある一定期間の価格から平均値を算出し、その平均値を繋いだ曲線として表現したものを指します。現在と過去数日(または数週間・数ヶ月)分の価格を定期的に計算することで、平均値が表面上移動しているように見えることから、移動平均と呼ばれています。

移動平均線は、トレンドを察知する代表的なテクニカルインジケーターであり、現在価格が「上昇・下降どちらの傾向にあるのか?」を明確化することに役立ちます。

代表的な移動平均線の種類として以下があります

  • 単純移動平均(SMA)
  • 指数移動平均(EMA)

単純移動平均(SMA)

単純移動平均線は、単に移動平均線とも呼ばれ、当日から遡ったある一定期間の価格平均値を1日(または分・時間・週間)ずつずらし、グラフ化した曲線です。上記のような式で計算できます。

指数平滑移動平均(EMA)

指数平滑移動平均線は、個々の価格データに対する加重を「指数関数的」に減少させて、平均値を計算した曲線を差し、上記のような数式で算出可能です。

【コード全て公開】外国為替相場データを用いた移動平均線のテクニカル分析

移動平均線|スイングトレード対応

移動平均線|デイトレード対応

本記事では、Pythonで「外国為替相場データを取得」および「移動平均線を算出」し、テクニカル分析を実践する方法について解説します。その上で上図のようなグラフを算出できるようになることが目標です。

データの期間は、デイトレードおよびスイングトレード向けの移動平均線を導出方法を例に紹介しますが、スキャルピングや長期トレードにも柔軟にデータ期間を調整できるようなコード仕様になっています。

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

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

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

Pythonテクニカル分析の実践には、事前の環境設定が不可欠です。以下に示すPythonライブラリをインストールしましょう。

Ta-Lib

Ta-Libはテクニカル分析に役立つライブラリです。以下の手順に従いインストールしましょう。

共通

最も簡単な方法はAnacondaをインストールしてTa-Libを使用する方法です。

Anacondaをインストール

② Anacondaプロンプトを開き、以下を実行

conda install -c conda-forge ta-lib
Mac OSの方はこちら

①Ta-Lib本体をインストール

brew install ta-lib

②Ta-Lib Pythonパッケージをインストール

pip install TA-Lib

yfinance

外国為替相場データは、yfinanceというライブラリを用いて取得します。以下、インストールしましょう。

pip install yfinance

plotly

外国為替相場の価格推移グラフはplotlyというライブラリを用いて可視化します。

pip install plotly

【FX×Python】外為データと移動平均線によるテクニカル分析の実践

それでは実際にPythonを用いて移動平均線によるFXテクニカル分析を実践していきましょう。

Yahoo Finance|外為データ取得

外為データの取得を行います。yahoo financeのライブラリを用いて以下のように記述します。

コード

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

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

出力イメージ

print(data)
# 出力イメージ
#                  Open        High         Low       Close   Adj Close  Volume
# Date                                                                          
# 2022-03-24  121.138000  122.102997  120.980003  121.126999  121.126999       0
# 2022-03-25  122.349998  122.349998  121.217003  122.346001  122.346001       0
# 2022-03-28  122.269997  125.055000  122.158997  122.269997  122.269997       0
# 2022-03-29  123.660004  124.209000  122.057999  123.660004  123.660004       0
# 2022-03-30  123.125000  123.023003  121.316002  123.125000  123.125000       0
# ...                ...         ...         ...         ...         ...     ...
# 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

引数情報

外国為替相場のヒストリカルデータはyf.download()メソッドを用いて取得可能です。「データ取得期間」「取得間隔」を変更すると、スキャルピングトレード・デイトレに適用したデータ取得もできます。

例えば、データの取得範囲は引数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ヶ月おきにデータ表示

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

SMA|単純移動平均線

前述で取得した外為データを用いて移動平均線を計算します。以下では単純移動平均線(SMA)の計算方法を示します。

(例)10日移動平均線

import talib

# 10日移動平均線
period = 10

# 単純移動平均線
ma_sma_10d = talib.SMA(data['Close'],   # データ取得元
                       period)          # 移動平均線の期間

(例)25日移動平均線

import talib

# 25日移動平均線
period = 25

# 単純移動平均線
ma_sma_25d = talib.SMA(data['Close'],   # データ取得元
                       period)          # 移動平均線の期間

EMA|指数平滑移動平均線

前述で取得した外為データを用いて移動平均線を計算します。以下では指数平滑移動平均線(EMA)の計算方法を示します。

(例)10日移動平均線

import talib

# 10日移動平均線
period = 10

# 指数平滑移動平均線
ma_ema_10d = talib.EMA(data['Close'],   # データ取得元
                       period)          # 移動平均線の期間

(例)25日移動平均線

import talib

# 25日移動平均線
period = 25

# 指数平滑移動平均線
ma_ema_25d = talib.EMA(data['Close'],   # データ取得元
                       period)          # 移動平均線の期間

# 出力
print(ma_ema_25d)

FX|移動平均線のグラフ

前述で取得した外為データおよび移動平均線のデータを用いて、グラフを作成します。次のようなコードを実行してみましょう。

import plotly.graph_objs as go

# グラフインスタンス
fig = go.Figure()

# ローソク足グラフ
fig.add_trace(go.Candlestick(
                x=data.index,                 # X軸
                open=data['Open'],            # Y軸:始値
                high=data['High'],            # Y軸:高値
                low=data['Low'],              # Y軸:安値
                close=data['Close'],          # Y軸:終値
                name = tks+ 'market data'),   # グラフラベル
             )

# 10日移動平均線
fig.add_trace(go.Scatter(x=ma_sma_10d.index,  # X軸
                         y=ma_sma_10d,        # Y軸
                         name="sma-10d",      # グラフラベル
                         mode="lines"),       # 折線グラフ 
                         )

# 25日移動平均線
fig.add_trace(go.Scatter(x=ma_sma_25d.index,  # X軸
                         y=ma_sma_25d,        # Y軸
                         name="sma-25d",      # グラフラベル
                         mode="lines"),       # 折線グラフ 
                         )


# グラフタイトル
fig.update_layout(title='FX: '+tks.replace('=X',''))

#Show
fig.show()

【コード全量】移動平均線採用のFXテクニカル分析

最後に本日ご紹介したコードの全量を示します。外為データの取得期間や移動平均線の計算期間を柔軟に変更することで、お好みの取引パターンに応じたテクニカル分析が実現できます。是非色々試してみましょう。

最後の例はデイトレ向けに移動平均線を算出したコードになります。

import numpy as np
import pandas as pd
import yfinance as yf
import talib
import plotly.graph_objs as go

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

# 単純移動平均線(30分移動平均線)
ma_sma_1d = talib.SMA(data['Close'],   # データ取得元
                      2)               # 移動平均線の期間


# 単純移動平均線(90分移動平均線)
ma_sma_3d = talib.SMA(data['Close'],   # データ取得元
                      6)               # 移動平均線の期間


# グラフインスタンス
fig = go.Figure()

# ローソク足グラフ
fig.add_trace(go.Candlestick(
                x=data.index,                 # X軸
                open=data['Open'],            # Y軸:始値
                high=data['High'],            # Y軸:高値
                low=data['Low'],              # Y軸:安値
                close=data['Close'],          # Y軸:終値
                name = tks+ 'market data'),   # グラフラベル
             )

# 10日移動平均線
fig.add_trace(go.Scatter(x=ma_sma_1d.index,   # X軸
                         y=ma_sma_1d,         # Y軸
                         name="sma-30m",      # グラフラベル
                         mode="lines"),       # 折線グラフ 
                         )

# 25日移動平均線
fig.add_trace(go.Scatter(x=ma_sma_3d.index,   # X軸
                         y=ma_sma_3d,         # Y軸
                         name="sma-90m",      # グラフラベル
                         mode="lines"),       # 折線グラフ 
                         )


# グラフタイトル
fig.update_layout(title='FX: '+tks.replace('=X',''))

#Show
fig.show()

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

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

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

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

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

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

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

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

最後に

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

目次