Pythonコード集

【Pythonコード集】ローソク足チャートにボリンジャーバンドを描画してみよう!後編

【この記事は4分で読めます】

今回は、前回の記事でご紹介したPythonコードの解説です。

前回の記事を読んでいない方は、以下のリンクからご覧ださい。

【Pythonコード集】ローソク足チャートにボリンジャーバンドを描画してみよう!前編

続きを見る

 

後編の今回は、Pythonコードの解説編となります。

ポイントは、以下2つのコードの書き方です。


2つのポイント

・移動平均線と標準偏差の設定

・ボリンジャーバンドの設定

では、さっそくPythonコードを見てみましょう!


Udemyおすすめの講座
・Pythonの基礎から応用まで一気に学ぶならこのコース おすすめ度
現役シリコンバレーエンジニアが教えるPython 3 入門 + 応用 +アメリカのシリコンバレー流コードスタイル

 

・データサイエンスを学ぶならこの2コース 2コースのおすすめ度
【世界で37万人が受講】データサイエンティストを目指すあなたへ〜データサイエンス25時間ブートキャンプ〜

【ゼロから始めるデータ分析】 ビジネスケースで学ぶPythonデータサイエンス入門

 

・Python、ファイナンス、英語を一気に学ぶ ”欲張りコース” おすすめ度
Python for Finance: Investment Fundamentals & Data Analytics
※このコースには日本語の字幕がついています。
Python、ファイナンスそして英語の力を同時にレベルアップするコースとしては、Udemy最強のコースです。
ジェイもこのコースで学び、今も復習で使っているコースです。


この記事の対象となる人

わかること

  • Pythonで株価チャートを作成したい人
  • Pythonで株価の分析がしたい人
  • Pythonを学びたいと思っている人

 

この記事でわかること

わかること

  • Pythonでローソク足を描画する方法
  • Pythonでボリンジャーバンドを描画する方法

Pythonコードの解説

今回は大きく4つのカテゴリーに分けて解説します。

 

コード1:ライブラリのインポート

#ライブラリのインポート
import plotly.graph_objects as go
from plotly.subplots import make_subplots

import pandas as pd
import pandas_datareader as web

 

・解説

▷import plotly.graph_objects as go
今回は、Plotlyでローソク足チャートを描画します。

上のコードは、Plotlyをインポートするための定型文です。

『go』で簡略。

 

▷from plotly.subplots import make_subplots
Potlyのチャートを複数描画したいときは、『subplots』をインポートします。
今回は、subplotsを使ってチャートの土台を設定します。

 

▷import pandas as pd
Python版のエクセルであるPandasをインポート。

『pd』で簡略。

 

▷import pandas_datareader as web
Yahoo!finance USから株価データを取得するライブラリ。

『web』で簡略。

 

今回使うライブラリは、どれもこのブログで紹介してきました。

さすがにもう慣れた方もいると思います。

 

コード2:株価データの取得

次は、pandas_datareaderで株価データを取得します。

df = web.DataReader(data_source='yahoo', 
                    name = 'ZI', 
                    start='2021-01-31')

 

・解説

▷df = web.DataReader( )

ポイントは引数です。

pandas_datareaderの引数

  • data_source:'yahoo'と設定
  • name:ティッカーを設定
  • start:最初のデータ取得日を設定

Yahoo!finance USから株価データを取得する時によく使うライブラリのひとつが『DataReader』です。

過去の記事で何度もDataReaderについて解説してきましたので、興味のある方は検索欄で『DataReader』と入力して、過去の記事を参照してみてください。

 

コード3:SMAと標準偏差の設定

ここから、いよいよボリンジャーバンドを設定していきます。

まずは、ボリンジャーバンドを構成する2つの要素ー

2つの要素

  • 移動平均線(SMA)
  • 標準偏差

移動平均線は、ボリンジャーバンドの中心線となります。

今回は期間を『21日』としました。

一方、標準偏差はボリンジャーバンドの幅となります。

今回は、21日間の標準偏差を計算します。

WINDOW = 21

df['sma'] = df['Close'].rolling(WINDOW).mean()
df['std'] = df['Close'].rolling(WINDOW).std(ddof = 0)

 

・解説

▷WINDOW = 21

まずは、移動平均線の期間を設定します。

それを変数『WINDOW』に入れます。

 

▷df['sma'] = df['Close'].rolling(WINDOW).mean()

21日間の移動平均線を設定するコードがー

重要ポイント!

rolling(WINDOW).mean()

です。

WINDOW(21日間のデータ)のmean(平均)を計算してくれ!というコードを書くことで、21日SMAがチャート上に描画できるというわけです。

 

▷df['std'] = df['Close'].rolling(WINDOW).std(ddof = 0)

ここで21日間の標準偏差を計算します。

変更点は最後の箇所のー

重要ポイント!

.std(ddof = 0)

だけです。

『std』は標準偏差(Standard Deviation)の略語です。

ddof』を『1』とすると、不偏標準偏差が計算されます。

統計学の世界では通常、不偏標準偏差を重視します。

なので『ddof』は『1』にするのが良いのですが、今回はデータ数が少なく、結果も大きく違わないのでデフォルトの『0』にしました。

 

コード4:ボリンジャーバンドの描画

いよいよ、ボリンジャーバンドをチャート上に描画するコードです。

チャートの大枠を設定

まずは、チャートの大枠を設定します。

fig = make_subplots(rows = 2, cols = 1, 
                    shared_xaxes = False, 
                    subplot_titles = ('Zoominfo'), 
                    vertical_spacing = 0.1, 
                    row_width = [0.2, 0.7], )

 

▷fig = make_subplots( )

make_subplots』でチャートの土台を設定します。

引数については、以下を覚えておけば十分です。

make_subplotsの引数

  • rows:横列に描画するチャートの数を設定
  • cols:縦列に描画するチャートの数を設定
  • shared_xaxes:複数のチャートでX軸を共有する設定
  • subplot_titles:タイトルの設定
  • vertical_spacing:チャートの縦スペースの設定
  • row_width:2つのチャートのサイズ比を設定

前回の記事でshared_xaxesを『True』としました。

しかし、時間軸の表記が消えてしまうため、今回は『False』にしています。

 

ローソク足チャートの描画

次に、ローソク足チャートを設定します。

fig.add_trace(go.Candlestick(x = df.index,
                             open = df['Open'],
                             high = df['High'],
                             low = df['Low'],
                             close = df['Close'], showlegend=False,
                             name = 'candlestick'),
              row = 1, col = 1)

▷fig.add_trace(go.Candlestick( ローソク足の四本値))

fig.add_trace』は、チャートを追加するというコードです。

この中に『go.Candlestick』でローソク足を設定します。

Candlestick(ローソク足)』では色々な引数が設定できますが、今は四本値の設定され覚えておけば十分です。

Candlestickの引数

  • open:始値
  • high:高値
  • low:安値
  • close:終値

最後の『row = 1, col = 1』でローソク足チャートを描画するチャートの場所を設定します。

『row = 1, col = 1』は、『横列の1行目, 縦列の1行目にローソク足を描画してくれ』という意味です。

 

上の2つのコードを実行するとー

ローソク足チャートが描画できます。

 

移動平均線の描画

次は、移動平均線をローソク足チャートに描画します。

fig.add_trace(go.Scatter(x = df.index,
                         y = df['sma'],
                         line_color = 'black',
                         name = 'sma'),
              row = 1, col = 1)

 

ポイントは二つ目の引数ー

重要ポイント!

y = df['sma']

です。

前もって設定していた移動平均線(SMA)を『df['sma']』として、SMAのデータだけをピックアップします。

それを引数の変数『y』、つまりY軸の値として設定します。

 

上のコードを実行するとー

ローソク足チャートに21日SMAが描画できました。

 

ボリンジャーのアッパーバンドを描画

次に、ボリンジャーバンドのアッパーバンド(上限)を描画します。

fig.add_trace(go.Scatter(x = df.index,
                         y = df['sma'] + (df['std'] * 2),
                         line_color = 'gray',
                         line = {'dash': 'dash'},
                         name = 'upper band',
                         opacity = 0.5),
              row = 1, col = 1)

 

ポイントは二つ目の引数ー

重要ポイント!

y = df['sma'] + (df['std'] * 2)

です。

移動平均線(df['sma'])に2倍した標準偏差の値(df['std'])を足すことで、ボリンジャーバンドのアッパーバンド(上限)を描画することができます。

2倍の標準偏差って?

95%の確率でデータのばらつきが一定の範囲内におさまる確率

統計学の分野になるため、ここでは簡単に説明します。

通常、ボリンジャーバンドでは標準偏差を『2』とします。

『1』では、データのばらつきが一定の範囲内でおさまる確率が約68%と、かなり小さくなるからです。

 

上のコードを実行するとー

グレーの点線で、ボリンジャーバンドのアッパーバンド(上限)を描画できした。

 

ボリンジャーのローワーバンドを描画

最後は、ボリンジャーバンドの下限(ローワーバンド)の描画です。

fig.add_trace(go.Scatter(x = df.index,
                         y = df['sma'] - (df['std'] * 2),
                         line_color = 'gray',
                         line = {'dash': 'dash'},
                         fill = 'tonexty',
                         name = 'lower band',
                         opacity = 0.5),
                         row = 1, col = 1)

 

ポイントはやはり二つ目の引数ー

重要ポイント!

y = df['sma'] - (df['std'] * 2)

です。

移動平均線(df['sma'])に2倍した標準偏差の値(df['std'])を引くことで、ボリンジャーバンドのローワーバンド(下限)を描画することができます。

 

さらにもうひとつポイントがあります。

それはー

重要ポイント!

バンド内の色ぬりの設定

です。

それを設定するコードが5つ目の引数ー

重要ポイント!

fill = 'tonexty',

です。

tonexty』と設定することで、バンドのエリアに指定した色をぬることができます。

他にも『tozeroy』、『tozeroy』、『tonextx』、『toself』、『tonext』があります。

どんなかちで色がぬられるのか?試してみてください。

 

上のコードを実行するとー

見事にボリンジャーバンドを描画することができました!

うん?でも横長すぎますね...


・おすすめのテクニカル分析本

おすすめ度 

 

おまけ

もっとチャートを見やすいサイズに変更してましょう。

fig.update_layout(width = 900, height = 700)

 

▷fig.update_layout( )

チャートの大枠を詳細に設定したい場合は、『fig.update_layout』を使うのが手っ取り早いです。

今回はサイズの変更なのでー

update_layoutの引数

  • width:横幅の設定
  • height:縦幅の設定

上2つの引数を設定するだけで十分です。

 

上のコードを実行するとー

見やすいチャートサイズに変更することができました!

 

今回は、テクニカル分析チャートを作るための基本的なコードのみを使いました。

Pythonに慣れていくと、あなただけのオリジナル分析チャートを作成することができます。

今回の記事を読んでPythonに興味を持った方は、すぐ下の『Pythonを効率的に学ぶには?』をぜひご覧ください!

 

Pythonを効率的に学ぶには?

 

Pythonなら株価の分析が効率的にできるな!

私もPythonを学んでみたい!

 

今回の記事を読んでそう思われた方は、以下のリンク先をご覧ください。

本気でPythonを学びたいなら

Pythonを学ぼう

 

なぜPythonを学ぶ必要があるのか?その理由がわかります。

そして、『これがPythonを効率的に学ぶ方法だ!』と自信をもっておすすめする学習方法について解説しています。

今回の記事と出会ったのも何かの縁です。
ぜひチャレンジしてみてください!

 

まとめ

・Plotlyならテクニカル分析チャートを簡単に作れる

・Plotlyならボリンジャーバンドの描画が簡単にできる

・Pythonを使えば、あなただけの分析チャートを作ることができる

今回は以上です!


注記事項

ジェイの米国株投資ブログ(以下当サイト)に掲載されている記事は、投資の助言を目的としたものではありません。当サイトに掲載されたコンテンツの正確性については、可能な限り注意を払っています。しかし、意図せず誤情報が紛れ込む可能性や情報そのものが古くなっている可能性があり、その正確性を完全に保証するものではありません。
当サイトのコンテンツを参考に投資を行い、その後発生したいかなる結果についても、当サイト並びにブログ運営者は一切責任を負いません。すべての投資行動は『自己責任の原則』のもとで行ってください

-Pythonコード集