こんにちは、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・シストレ記事一覧
FXの自動売買やシステムトレードに興味がある方向けに様々な取引実践法を解説しています。
システムトレードによるFX取引解説記事
対応言語 | 記事名 |
---|---|
Python | 【FX】過去データ(ヒストリカルデータ)を大量取得する方法 |
Python | 【FX】テクニカル分析|移動平均線 |
Python | 【FX】テクニカル分析|ボリンジャーバンド |
Python | 【FX】テクニカル分析|MACD |
Python | 【FX】テクニカル分析|RSI |
【参考】仮想通貨・ビットコイン|金融投資情報
当サイトでは仮想通貨・ビットコインにおける多様な分析および自動売買手法を配信しています。ビットコイン投資にも興味がある方は是非こちらもご覧下さい。
仮想通貨・ビットコイン|情報一覧
自動売買ツールとは|超具体的実装方法
【仮想通貨】自動売買ツールの自作方法とおすすめ暗号資産取引所|無料で実践できるビットコイン自動取引の仕組みも徹底解説
「仮想通貨(暗号資産)の自動売買ツール作成に興味がある」「自動売買の仕組み・作り方を知りたい」「どこの仮想通貨取引所がおすすめなのか知りたい」本記事ではこのような要望にお応えします。
最後に
お問い合わせフォーム
上記課題に向けてご気軽にご相談下さい。
お問い合わせはこちら