【この記事は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を使えば、あなただけの分析チャートを作ることができる
今回は以上です!
注記事項
当サイトのコンテンツを参考に投資を行い、その後発生したいかなる結果についても、当サイト並びにブログ運営者は一切責任を負いません。すべての投資行動は『自己責任の原則』のもとで行ってください。