【Python】Pythonとmpfinanceライブラリでボリンジャーバンドを描画する


うーん、この株の動き、全然予測できないにゃ。

どうしたの?なんか困っているみたいだけど?

このグラフ、上がったり下がったりして、どうしたらいいかわからないにゃ。難しいんだにゃ。

こんなときは、「ボリンジャーバンド」を試してみたらどうだろう?

ボリンジャーバンド? 聞いたことないにゃ。

ボリンジャーバンドは、価格のボラティリティを見るのに役立つよ。このバンドを使えば、価格が過去の範囲からどれだけ逸脱しているかが分かるんだ。

それはすごいにゃ! 教えて欲しいんだにゃ?

もちろん、一緒に勉強してみよう!
株式投資や仮想通貨取引を行う際、さまざまなテクニカル分析手法が利用されています。これらの手法は、過去の価格動向や取引量を基に未来の価格変動を予測するためのものです。
その中でも、「ボリンジャーバンド」は、市場のボラティリティや価格の動向を捉えるための重要な指標として多くのトレーダーや投資家に利用されています。
本ブログでは、このボリンジャーバンドの特徴を確認しながら、Pythonとmpfinanceライブラリを使って描画する方法を詳しく解説していきます。テクニカル分析を勉強中の方や、Pythonを用いたデータ解析に興味がある方にとって、実践的な知識として役立つ内容となっています。
1. ボリンジャーバンドとは?

1.1 ボリンジャーバンドの概念
ボリンジャーバンドは、1980年代にジョン・ボリンジャーによって考案されたテクニカル指標です。これは、価格の変動やトレンドを可視化し、相場の強弱やボラティリティを評価するためのツールとして開発されました。

具体的には、ボリンジャーバンドは以下の3つのラインで構成されています。
- 中央の移動平均線
- 意味: 中央の移動平均線は、特定の期間にわたる価格の平均を示します。このラインが示すのは、短期的な価格のトレンドです。
- 計算方法: 通常、20日の単純移動平均(SMA)が使用されます。具体的には、過去20日間の終値を合計し、20で割って計算されます。
- 上のバンド
- 意味: 上のバンドは、一定の期間内の価格の変動(ボラティリティ)を考慮した、価格の上限を示します。
- 計算方法: 中央の移動平均線の値に、価格の標準偏差(通常は2倍)を加算して得られます。この標準偏差は、価格の変動の大きさを示しており、2倍の標準偏差を用いることで、約95%の価格変動を捉えることができます。
- 下のバンド
- 意味: 下のバンドは、一定の期間内の価格の変動(ボラティリティ)を考慮した、価格の下限を示します。
- 計算方法: 中央の移動平均線の値から、価格の標準偏差(通常は2倍)を減算して得られます。
ボリンジャーバンドの魅力は、これらのバンドが価格の変動に応じて動的に変わる点にあります。バンドが狭まるときは市場のボラティリティが低くなっていることを示し、バンドが拡大するときは市場のボラティリティが増していることを示します。
ボリンジャーバンドは市場の動きを直感的に理解するのに役立つツールとなっています。
1.2 ボリンジャーバンドが示す市場の状態
ボリンジャーバンドは、ただの移動平均と標準偏差を示すライン以上のものとして多くのトレーダーに利用されています。それぞれのバンドやその間隔が示す市場の状態を理解することで、投資の意思決定に役立てることができます。
- バンドの縮小 (バンドが狭くなる):ボリンジャーバンドが狭まると、これは市場のボラティリティが低く、大きな価格の動きが少ない静かな期間を示しています。多くのトレーダーは、このような時期を「圧縮」と呼び、大きな動きの前触れと捉えることが一般的です。
- バンドの拡大 (バンドが広がる):バンドが拡大すると、市場のボラティリティが高まっていることを示します。これは、価格が急激に上昇または下落する動きが発生していることを意味します。このような時期は、市場の方向性が強まっている可能性があります。
- 価格が上のバンドに接触する:価格が上のバンドに接触または突破する時、市場が一時的に過熱している可能性が考えられます。これは、短期的な上昇トレンドのピークを示す場合がありますが、必ずしも即座に価格が反転するわけではありません。
- 価格が下のバンドに接触する:価格が下のバンドに接触または突破する場合、市場が過度に売られている状態を示すことがあります。これは、短期的な下降トレンドの底を示唆する可能性がありますが、すぐに価格が上昇するとは限りません。

ボリンジャーバンドは、他のテクニカル指標や市場の状況、ニュースなどの要因と組み合わせることで、より高い精度の分析が可能となります。独立した指標としてのみ依存するのではなく、多角的なアプローチを取ることが鍵となります。
2. 必要なツールのセットアップ

2.1 Python環境の確認と準備
Pythonは、データ分析や可視化の分野で非常に人気のあるプログラミング言語です。ボリンジャーバンドの分析や描画を行う前に、まずはPythonの環境が正しく設定されているか確認しましょう。
Pythonのバージョン確認
コマンドプロンプトやターミナルを開きます。以下のコマンドを実行してPythonのバージョンを確認します。
python --version
//python3の場合
python3 --version
pipの確認
pipはPythonのパッケージマネージャーで、これを使って必要なライブラリをインストールします。
pip --version
//python3の場合
pip3 --version
2.2 mpfinanceライブラリのインストール
mpfinanceは、金融データの可視化に特化したPythonのライブラリです。
特に、ローソク足チャートの描画や、ボリンジャーバンドなどのテクニカル指標の可視化が簡単に行えるのが特徴です。
インストール
以下のコマンドをコマンドプロンプトやターミナルに入力し、mpfinanceライブラリをインストールします。
pip install mpfinance
動作確認
Pythonのインタラクティブシェルやスクリプトで以下のコードを実行し、エラーなくインポートできることを確認します。
import mpfinance as mpf

mpfinanceを使うと簡単にロウソクチャートや出来高なんかを描画できるんだにゃ。

株価なんかを確認できるpandas_datareaderライブラリと相性がいいんだ。詳しくはこちらの記事も参考にしてくださいね。
3. pythonを使ったボリンジャーバンドの描画

3.1 移動平均の計算方法
移動平均は、特定の期間における価格の平均値を時系列的に取得する方法です。これは、価格の短期的な変動をスムーズにすることで、市場の全体的なトレンドを捉えるのに役立ちます。ボリンジャーバンドの中心ラインとしても使用されます。
単純移動平均 (SMA: Simple Moving Average)
計算方法: ある日数の終値の合計を、その日数で割ったものです。
window_size = 20 # 20日のSMAを例として使用
df['SMA'] = df['Close'].rolling(window=window_size).mean()
指数移動平均 (EMA: Exponential Moving Average)
計算方法: 過去の全ての価格データを考慮しつつ、新しいデータに重みを付けて計算される移動平均です。反応が早いのが特徴です。
span_value = 20 # 20日のEMAを例として使用
df['EMA'] = df['Close'].ewm(span=span_value, adjust=False).mean()
3.2 ボリンジャーバンドの上限と下限の計算方法
ボリンジャーバンドは、中央の移動平均線を基準に、上下に価格の標準偏差をとった2つのバンドで構成されます。これにより、価格の変動範囲やボラティリティを視覚的に捉えることができます。
標準偏差の計算
計算方法: 標準偏差は、データのばらつきの大きさを示す統計量です。ボリンジャーバンドでは、一般的に20日間の終値の標準偏差を使用します。
window_size = 20 # 20日間の標準偏差を例として使用
df['Standard Deviation'] = df['Close'].rolling(window=window_size).std()
上のバンドの計算
計算方法: 上のバンドは、中央の移動平均に、標準偏差の2倍を加算したものです
df['Upper Band'] = df['SMA'] + (df['Standard Deviation'] * 2)
下のバンドの計算
計算方法: 下のバンドは、中央の移動平均から、標準偏差の2倍を減算したものです。
df['Lower Band'] = df['SMA'] - (df['Standard Deviation'] * 2)
3.3 Pythonでの実装例
ボリンジャーバンドの計算と可視化をPythonで行う際の一例を示します。この実装例では、先ほど説明した計算方法を使用して、具体的なコードでの実装を紹介します。
必要なライブラリのインポート
import pandas as pd
import pandas_datareader as pdr
import matplotlib.pyplot as plt
import datetime
データの取得
start_date = datetime.datetime(2022, 1, 1)
end_date = datetime.datetime(2022, 12, 31)
ticker = "AAPL"
df = pdr.DataReader(ticker, "stooq", start_date, end_date)
ボリンジャーバンドの計算
# 単純移動平均
window_size = 20
df['SMA'] = df['Close'].rolling(window=window_size).mean()
# 標準偏差
df['Standard Deviation'] = df['Close'].rolling(window=window_size).std()
# 上のバンドと下のバンド
df['Upper Band'] = df['SMA'] + (df['Standard Deviation'] * 2)
df['Lower Band'] = df['SMA'] - (df['Standard Deviation'] * 2)
ボリンジャーバンドの可視化
plt.figure(figsize=(14,7))
# 終値、移動平均、上のバンド、下のバンドをプロット
plt.plot(df.index, df['Close'], label='Close Price', color='blue')
plt.plot(df.index, df['SMA'], label='Simple Moving Average', color='red', linestyle='--')
plt.plot(df.index, df['Upper Band'], label='Upper Band', color='green')
plt.plot(df.index, df['Lower Band'], label='Lower Band', color='green')
# タイトル、ラベル、凡例の設定
plt.title('Bollinger Bands for ' + ticker)
plt.xlabel('Date')
plt.ylabel('Price')
plt.legend()
plt.tight_layout()
plt.show()

上記のコードを実行することで、ボリンジャーバンドを含む株価チャートが表示されます。これにより、特定の期間における価格の動きとそのボラティリティを視覚的に確認することができます。

ここまでで、ボリンジャーバンドについて理解ができたのではないでしょうか?
次は、mpfinanceライブラリを使ってもっと見やすいボリンジャーバンドを表示してみたいと思います。
4. mpfinanceを使ったボリンジャーバンドの描画


普通のPythonでもできんだにゃ?mpfinanceだと何がちがうんだにゃ?

mpfinanceを使うともっと簡単に、かつ、わかりやすい図が描けるんだ。実際に作ってみていこう。
では、mpfinanceを使ってボリンジャーバンドをを表示したいと思います。
mpfinanceは、金融用の図を描くためのライブラリで、OHLC (Open-High-Low-Close) バー、キャンドルスティック、レンジバーなどの図を簡単に描画することができます。ボリンジャーバンドを描画するためには、addplot
引数を使用して、ボリンジャーバンドとその他のデータを追加します。
必要なライブラリのインポート
import pandas_datareader.data as pdr
import datetime
import mplfinance as mpf
データの取得
start_date = datetime.datetime(2022, 1, 1)
end_date = datetime.datetime(2022, 12, 31)
ticker = "AAPL"
df = pdr.DataReader(ticker, "stooq", start_date, end_date)
df = df.sort_index() # mplfinanceではデータを昇順に並べ替える必要がある

mpfinanceでは、古いものから新しいものに並んでいる必要があります。そのため、stooqで得たデータは新しいものから並んでいるため、順番を変えています。
時系列グラフの描画
# 移動平均
window_size = 20
df['SMA'] = df['Close'].rolling(window=window_size).mean()
# 標準偏差
df['Standard Deviation'] = df['Close'].rolling(window=window_size).std()
# 上のバンドと下のバンド
df['Upper Band'] = df['SMA'] + (df['Standard Deviation'] * 2)
df['Lower Band'] = df['SMA'] - (df['Standard Deviation'] * 2)
# ボリンジャーバンドと移動平均を描画するための設定
ap = [mpf.make_addplot(df['SMA'], color='red', linestyle='--', width=0.7, panel=0),
mpf.make_addplot(df['Upper Band'], color='green', width=0.7, panel=0),
mpf.make_addplot(df['Lower Band'], color='green', width=0.7, panel=0)]
# キャンドルスティックチャートとボリンジャーバンドの描画
mpf.plot(df, type='candle', style='charles', title='Bollinger Bands for ' + ticker,
ylabel='Price', figsize=(14, 7), addplot=ap, volume=True)


mpfinanceを使う事で簡単にロウソクチャートや出来高にできますよ。
5. ボリンジャーバンドの活用方法


ボリンジャーバンドの活用方法を見ていくんだにゃ。
5.1 バンドの縮小と拡大が示す市場の状態
ボリンジャーバンドは、価格のボラティリティや市場の動きを捉えるのに有効な指標です。特に、バンドの縮小や拡大は、市場の状態や将来の動きのヒントとなります。
- バンドの縮小
- 意味: バンドの縮小は、価格のボラティリティが低下していることを示します。これは市場の一時的な落ち着きや方向性の不明瞭さを示すことが多いです。
- 市場の状態: 縮小するバンドは、「圧縮」とも呼ばれ、これは市場の方向性が弱まっている期間を指します。これは、大きな動きの前触れとなることが多いです。
- バンドの拡大
- 意味: バンドの拡大は、価格のボラティリティの増加を示しています。これは強いトレンドの存在や市場の動きの活発さを示唆しています。
- 市場の状態: 拡大するバンドは、「発散」とも呼ばれ、これは市場の方向性が強まっている期間を指します。これは、トレンドが継続する可能性が高いことを示しています。
- バンドとの関係で読み取る市場のサイン
- 価格が上のバンドをタッチまたは超える: これは短期的に市場が過熱していることを示すサインとなります。過去の平均価格に比べて、現在の価格が高いレベルにあることを示しています。
- 価格が下のバンドをタッチまたは下回る: これは短期的に市場が過度に売られていることを示すサインです。過去の平均価格に比べて、現在の価格が低いレベルにあることを示しています。
5.2 ボリンジャーバンドを用いた取引戦略の基礎
ボリンジャーバンドは、市場のボラティリティやトレンドを識別するためのツールとしてのみならず、取引戦略の策定にも活用されます。以下に、ボリンジャーバンドを中心に据えた基本的な取引戦略を紹介します。
- バンドのタッチを活用する
- 戦略: 価格が上のバンドをタッチまたは超えた際に売り、下のバンドをタッチまたは下回った際に買うという戦略。これは、価格が過去の平均から逸脱しすぎたときに反転する可能性があるという考えに基づいています。
- 注意点: この戦略は、強いトレンドが存在しない、いわゆるレンジ相場で効果的です。強いトレンドが存在する場合、価格はバンドの外側で一定期間取引されることがあるため、注意が必要です。
- バンドの方向を活用する
- 戦略: 上向きのバンドは上昇トレンドの存在を示し、下向きのバンドは下降トレンドの存在を示します。このバンドの方向性を基に、取引の方向を決定する戦略。
- 注意点: バンドの方向だけを頼りに取引するのではなく、他のテクニカル指標やファンダメンタルズも考慮に入れることが推奨されます。
- バンドの縮小/拡大を活用する
- 戦略: バンドの縮小は大きな価格の動きの前触れであると捉え、バンドの拡大とともに発生する価格のブレイクアウトを取引のサインとして利用します。
- 注意点: ブレイクアウトが偽のものである可能性も考慮し、ストップロスなどのリスク管理手段を設定することが重要です。

ここで紹介している戦略はあくまでも、例です。すべての場合に当てはまるわけではないため、他の指標と組み合わせたり、相場全体を見ながら取引の方針を決めるようにしましょう。
6. まとめ

本記事を通じて、ボリンジャーバンドとは何か、その計算方法、Pythonを使用したデータの取得からグラフの描画までの実装方法、そしてボリンジャーバンドを基盤とした取引戦略について学びました。
ボリンジャーバンドは、市場のボラティリティやトレンドを示すテクニカル指標の一つであり、適切に活用することで市場の動向を予測する手助けとなるでしょう。しかし、いかなる指標も完璧ではありません。そのため、実際の取引を行う際は、ボリンジャーバンド以外の情報や指標も併用し、常にリスク管理を念頭に置くことが重要です。