【FX×Python】ボリンジャーバンドでのシストレ実践|外国為替相場のリアルタイムテクニカル分析・自動売買支援

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

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

こんな方におすすめ!
  • Pythonでボリンジャーバンドを用いたFXのテクニカル分析を実践したい
  • テクニカル分析をもとにFX売買意思決定を自動化したい
目次

【FX】ボリンジャーバンドとは

ボリンジャーバンドとは、移動平均線と上下に3本ずつの標準偏差(±1σ、±2σ、±3σ)からなる計7本の線で表わされるメジャーなインジケーターです。

ボリンジャーバンドは、正規分布に従った統計学理論が適用されています。例えば、高い確率で±2σの内側で価格は変動するという仮定をもとに将来価格を予測する前提で成り立っています。なお、確率統計学上±1σの間に収まる確率は68.3%、±2σになると95.5%、±3σになると99.7%の確率で線の内側に価格が収まるとされています。

ボリンジャーバンドは、例えば、高値側の標準偏差ライン(+σ)に価格が近付くと売りサインと捉え、安値側の標準偏差ライン(ーσ)に価格が近付くと買いサインと捉えられるのが一般的です。

【コード全て公開】ボリンジャーバンド採用のFXテクニカル分析ツール

ボリンジャーバンド|スイングトレード向け

ボリンジャーバンド|デイトレード向け

本記事では、Pythonで「外為相場データの取得方法」および「ボリンジャーバンドのグラフ可視化方法」について解説します。上図のようなグラフを算出できることが目的です。

データの期間は、デイトレードおよびスイングトレード向けとしたボリンジャーバンド導出方法を示しています。スキャルピングや長期トレードにも柔軟にデータ期間を調整できるようなコード仕様になっているため、以下合わせて確認ください。

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

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

【事前準備】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-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を設定しています。

ボリンジャーバンド

前述で取得した外為相場のデータを用いてボリンジャーバンドを算出します。

talibの関数を用いて次のように記述しましょう。

import talib

period = 10                # ボリンジャーバンドの計算範囲(期間)
sigma = 2                  # バンドの標準偏差
moving_average_type = 0    # 移動平均線の種類

bb_up, bb_middle, bb_down = talib.BBANDS(data['Close'],        # 外為相場終値
                                         period,               # 期間
                                         sigma,                # upper-band導出に採用する標準偏差
                                         sigma,                # down-band導出に採用する標準偏差 
                                         moving_average_type   # 移動平均線の種類
                                        ) 

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'),   # グラフラベル
             )

# ボリンジャーバンド(bb_up)
fig.add_trace(go.Scatter(x=bb_up.index,       # X軸
                         y=bb_up,             # Y軸
                         name="+2σ",          # グラフラベル
                         mode="lines"),       # 折線グラフ 
                         )

# ボリンジャーバンド(bb_middle)
fig.add_trace(go.Scatter(x=bb_middle.index,   # X軸
                         y=bb_middle,         # Y軸
                         name="MA_10d",       # グラフラベル
                         mode="lines"),       # 折線グラフ 
                         )

# ボリンジャーバンド(bb_down)
fig.add_trace(go.Scatter(x=bb_down.index,     # X軸
                         y=bb_down,           # Y軸
                         name="-2σ",          # グラフラベル
                         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',         # データ表示間隔
                  )


period = 6                 # ボリンジャーバンドの計算範囲(期間)
sigma = 2                  # バンドの標準偏差
moving_average_type = 0    # 移動平均線の種類

bb_up, bb_middle, bb_down = talib.BBANDS(data['Close'],        # 外為相場終値
                                         period,               # 期間
                                         sigma,                # upper-band導出に採用する標準偏差
                                         sigma,                # down-band導出に採用する標準偏差 
                                         moving_average_type   # 移動平均線の種類
                                        ) 

# グラフインスタンス
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'),   # グラフラベル
             )

# ボリンジャーバンド(bb_up)
fig.add_trace(go.Scatter(x=bb_up.index,       # X軸
                         y=bb_up,             # Y軸
                         name="+2σ",          # グラフラベル
                         mode="lines"),       # 折線グラフ 
                         )

# ボリンジャーバンド(bb_middle)
fig.add_trace(go.Scatter(x=bb_middle.index,   # X軸
                         y=bb_middle,         # Y軸
                         name="MA_90m",       # グラフラベル
                         mode="lines"),       # 折線グラフ 
                         )

# ボリンジャーバンド(bb_down)
fig.add_trace(go.Scatter(x=bb_down.index,     # X軸
                         y=bb_down,           # Y軸
                         name="-2σ",          # グラフラベル
                         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

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

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

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

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

最後に

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

目次