ブログ記事更新日:2021年3月21日
Pythonを使って株価分析をしたい。
そんなあなたにオススメな、チャートライブラリーが「plotly」です。
チャート上にマウスポインターを重ねると、値がポップアップします。(このブログに表示されたチャートでは、ポップアップしません)
証券会社の提供するツールのように、表示範囲をマウス操作で選択することも可能です。(このブログに表示されたチャートでは、選択できません。)
はじめに公式サンプルコードを参考にして、plotlyで何が出来るかご紹介します。
その後に、Python初心者にも分かりやすいように、設定方法の解説をします。
ブログ内のサンプルコードは、Google Colaboratoryで動作したことを確認しています。
このブログ記事は、動画と連携しています。
動画で解説
公式サイトのサンプルコード
公式サイトにサンプルコードが掲載されていますので、まずサンプルコードを見てゆきましょう。
plotly公式サイトのローソク足の解説ページです。
出所:plotly公式サイト
Simple Candlestick with Pandas シンプルなローソク足
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
mport plotly.graph_objects as go import pandas as pd from datetime import datetime df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/finance-charts-apple.csv') fig = go.Figure(data=[go.Candlestick(x=df['Date'], open=df['AAPL.Open'], high=df['AAPL.High'], low=df['AAPL.Low'], close=df['AAPL.Close'])]) fig.show() |
出所:plotly公式サイト https://plotly.com/python/candlestick-charts/
APPLの株価データーを元にチャート描画しています。
表示されたチャートはこちら。
Candlestick without Rangeslider スライダーを非表示
1 2 3 4 5 6 7 8 9 10 11 12 |
import plotly.graph_objects as go import pandas as pd df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/finance-charts-apple.csv') fig = go.Figure(data=[go.Candlestick(x=df['Date'], open=df['AAPL.Open'], high=df['AAPL.High'], low=df['AAPL.Low'], close=df['AAPL.Close']) ]) fig.update_layout(xaxis_rangeslider_visible=False) fig.show() |
出所:plotly公式サイト https://plotly.com/python/candlestick-charts/
このコードを追加することによって、スライダーを非表示にします。
fig.update_layout(xaxis_rangeslider_visible=False)
表示されたチャートはこちら。
チャート下段のスライダーが非表示になっています。
Adding Customized Text and Annotations テキストと注釈を追加
チャートにテキストや注釈を挿入することが出来ます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
import plotly.graph_objects as go import pandas as pd df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/finance-charts-apple.csv') fig = go.Figure(data=[go.Candlestick(x=df['Date'], open=df['AAPL.Open'], high=df['AAPL.High'], low=df['AAPL.Low'], close=df['AAPL.Close']) ]) fig.update_layout( title='The Great Recession', yaxis_title='AAPL Stock', shapes = [dict( x0='2016-12-09', x1='2016-12-09', y0=0, y1=1, xref='x', yref='paper', line_width=2)], annotations=[dict( x='2016-12-09', y=0.05, xref='x', yref='paper', showarrow=False, xanchor='left', text='Increase Period Begins')] ) fig.show() |
出所:plotly公式サイト https://plotly.com/python/candlestick-charts/
表示されたチャートはこちら。
チャートにタイトルや垂直のライン、テキストが追加されています。
Custom Candlestick Colors ローソク足の色を変更
ローソク足の色を変更します。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
import plotly.graph_objects as go import pandas as pd df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/finance-charts-apple.csv') fig = go.Figure(data=[go.Candlestick( x=df['Date'], open=df['AAPL.Open'], high=df['AAPL.High'], low=df['AAPL.Low'], close=df['AAPL.Close'], increasing_line_color= 'cyan', decreasing_line_color= 'gray' )]) fig.show() |
出所:plotly公式サイト https://plotly.com/python/candlestick-charts/
表示されたチャートはこちら。
ローソク足の色が変更されています。
Simple Example with datetime Objects シンプルなローソク足
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
import plotly.graph_objects as go from datetime import datetime open_data = [33.0, 33.3, 33.5, 33.0, 34.1] high_data = [33.1, 33.3, 33.6, 33.2, 34.8] low_data = [32.7, 32.7, 32.8, 32.6, 32.8] close_data = [33.0, 32.9, 33.3, 33.1, 33.1] dates = [datetime(year=2013, month=10, day=10), datetime(year=2013, month=11, day=10), datetime(year=2013, month=12, day=10), datetime(year=2014, month=1, day=10), datetime(year=2014, month=2, day=10)] fig = go.Figure(data=[go.Candlestick(x=dates, open=open_data, high=high_data, low=low_data, close=close_data)]) fig.show() |
出所:plotly公式サイト https://plotly.com/python/candlestick-charts/
表示されたチャートはこちら。
株価データーをコード内で記載して、シンプルなローソク足を描画しています。
設定方法の解説
ここからは、サンプルコードを元に設定方法を解説してゆきます。
シンプルにグラフタイトル設定
タイトルを変更しましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
import plotly.graph_objects as go from datetime import datetime open_data = [33.0, 33.3, 33.5, 33.0, 34.1] high_data = [33.1, 33.3, 33.6, 33.2, 34.8] low_data = [32.7, 32.7, 32.8, 32.6, 32.8] close_data = [33.0, 32.9, 33.3, 33.1, 33.1] dates = [datetime(year=2013, month=10, day=10), datetime(year=2013, month=11, day=10), datetime(year=2013, month=12, day=10), datetime(year=2014, month=1, day=10), datetime(year=2014, month=2, day=10)] fig = go.Figure(data=[go.Candlestick(x=dates, open=open_data, high=high_data, low=low_data, close=close_data)]) #スライドバー非表示 fig.update_layout(xaxis_rangeslider_visible=False) # グラフタイトルを設定 #fig.update_layout(title="タイトルTitle") # グラフタイトルを設定 中央寄せ fig.update_layout(title="タイトル中央表示",title_x=0.5) # グラフタイトルを設定 フォント fig.update_layout(font=dict(family="Times",size=18,color="red")) fig.update_layout(legend_orientation="h") fig.show() |
表示されたチャートはこちら。
20行目:スライドバー非表示
26行目: グラフタイトルを設定 中央寄せ指定(title_x=0.5で中央 数を小さくすると左に寄ります)
29行目:タイトルのフォントや色を指定
グラフサイズとテーマを変更
グラフのサイズとテーマを変更します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
import plotly.graph_objects as go from datetime import datetime open_data = [1000.0] high_data = [2000.0] low_data = [500.0] close_data = [1500.0] dates = [datetime(year=2020, month=3, day=10)] fig = go.Figure(data=[go.Candlestick(x=dates, open=open_data, high=high_data, low=low_data, close=close_data)]) #スライドバー非表示 fig.update_layout(xaxis_rangeslider_visible=False) #グラフタイトル設定まとめ fig.update_layout(title="サイズ・テーマ変更",title_x=0.5, xaxis_title = "x軸", yaxis_title="y軸", font=dict(family="Times",size=30,color="black")) #グラフサイズ指定 fig.update_layout(width=500, height=600) #グラフテーマ指定 #fig.update_layout(template='ggplot2') fig.update_layout(template="plotly_white") fig.show() |
24行目:グラフサイズ指定(幅と高さを指定しています)
28行目:グラフテーマを指定(”plotly_white”を指定)
グラフテーマ
グラフテーマの種類は、公式サイトにありました。
Default template: ‘plotly’
Available templates:
[‘ggplot2’, ‘seaborn’, ‘simple_white’, ‘plotly’,
‘plotly_white’, ‘plotly_dark’, ‘presentation’, ‘xgridoff’,
‘ygridoff’, ‘gridon’, ‘none’]
出所: https://plotly.com/python/templates/
線グラフを追加する
株価分析ではローソク足に移動平均線などの線グラフを重ねて表示させる事が一般的です。 線グラフを追加してみましょう。
まずは線グラフの基本を超シンプルに解説します。
終値を結ぶ折れ線グラフを追加
終値を結ぶ折れ線グラフをローソク足チャートに追加します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
import plotly.graph_objects as go from datetime import datetime open_data = [33.0, 33.3, 33.5, 33.0, 34.1] high_data = [33.1, 33.3, 33.6, 33.2, 34.8] low_data = [32.7, 32.7, 32.8, 32.6, 32.8] close_data = [33.0, 32.9, 33.3, 33.1, 33.1] dates = [datetime(year=2013, month=10, day=10), datetime(year=2013, month=11, day=10), datetime(year=2013, month=12, day=10), datetime(year=2014, month=1, day=10), datetime(year=2014, month=2, day=10)] fig = go.Figure(data=[go.Candlestick(x=dates, open=open_data, high=high_data, low=low_data, close=close_data)]) #スライドバー非表示 fig.update_layout(xaxis_rangeslider_visible=False) #終値を結ぶ線グラフを追加 Scatter:折れ線グラフ fig.add_traces([go.Scatter(x=dates, y=close_data)]) fig.show() |
#終値を結ぶ線グラフを追加
Scatter:折れ線グラフ fig.add_traces([go.Scatter(x=dates, y=close_data)])
X軸 x=dates
Y軸 y=close_data
X軸は日付データー、Y軸は終値のデーターをしていして、折れ線グラフを描画しています。
折れ線グラフの基礎
X軸、Y軸の値を指定して折れ線グラフを描画します。
1 2 3 4 5 6 7 8 9 10 |
import plotly.graph_objects as go #plotly まず空のFigureを作る fig = go.Figure() #X軸、Y軸の値を指定 fig.add_traces(go.Scatter(x=[1,2,3], y=[2,1,2])) #フラフを描画 fig.show() |
折れ線グラフを2本引きます
つづいて、折れ線グラフを2本描画しましょう。
1 2 3 4 5 6 7 8 |
import plotly.graph_objects as go fig = go.Figure() fig.add_traces(go.Scatter(x=[1,2,3], y=[2,1,2])) fig.add_traces(go.Scatter(x=[1,2,3], y=[1,2,3])) fig.show() |
コード内で指定した、X座標Y座標にプロットされています。
右上に凡例も表示されました。
2本以上のグラフを描画すると、デフォルトで凡例が表示されるようです。
折れ線グラフの凡例追加やその他設定変更
折れ線グラフにも、凡例の追加やその他の変更を加えます。
1 2 3 4 5 6 7 8 9 10 11 |
fig = go.Figure() fig.add_traces(go.Scatter(x=[1,2,3,4,5], y=[2,1,2,1,2], name="A-line")) fig.add_traces(go.Scatter(x=[1,2,3,4,5], y=[1,2,3,4,5], name="B-line", mode="markers")) fig.add_traces(go.Scatter(x=[1,2,3,4,5], y=[5,4,3,2,1], name="C-line", mode='lines+markers')) fig.add_traces(go.Scatter(x=[1,2,3,4,5], y=[4,3,4,3,4], name="D-line", line={'width':10, 'color': 'red'} )) fig.show() |
凡例の名前を変更
折れ線グラフから、マーカーへ変更(B-line)
折れ線グラフから、ラインとマーカーへ変更(C-line)
折れ線グラフの、太さと色を変更(D-line)
移動平均線を追加する
公式サイトのサンプルコードを一部変更して、移動平均線を描画させましょう。
最初にみた公式サイトのサンプルコードを見てみます。
今回はローソク足チャートを表示せずに、株価データーの中身を見ます。
公式サイトのサンプルコードの14行目に df を追加して、データーの中身を見ます。
なお、16行目をコメントアウトしてチャートを表示させないようにしています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
import plotly.graph_objects as go import pandas as pd from datetime import datetime df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/finance-charts-apple.csv') fig = go.Figure(data=[go.Candlestick(x=df['Date'], open=df['AAPL.Open'], high=df['AAPL.High'], low=df['AAPL.Low'], close=df['AAPL.Close'])]) df #fig.show() |
出所:plotly公式サイト https://plotly.com/python/candlestick-charts/
表示されたデータはこちら。
右から3列目に移動平均のデーターが含まれているようです。
mavgのデーターを線グラフとして追加します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
import plotly.graph_objects as go import pandas as pd from datetime import datetime df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/finance-charts-apple.csv') #初期化 fig = go.Figure() #ローソク足を描画 fig = go.Figure(data=[go.Candlestick(x=df['Date'], open=df['AAPL.Open'], high=df['AAPL.High'], low=df['AAPL.Low'], close=df['AAPL.Close'])]) #スライドバー非表示 fig.update_layout(xaxis_rangeslider_visible=False) #移動平均線グラフを追加 fig.add_traces(go.Scatter(x=df['Date'], y=df['mavg'])) fig.show() |
表示されたチャートはこちらです。
移動平均線が描画されました。
まとめ
plotly初心者向けに設定方法の解説をしました。
plotlyを使うとグリグリ動くインタラクティブなチャートを描画することが出来ます。
動いている様子は、このブログに貼っている動画をご覧いただけると、おわかりになると思います。
今後はMACDやRSIなどの指標を使った分析方法なとも紹介する予定です。
この記事を書いた人
あしおゆたか
投資歴21年の個人投資家
机上の理論ではなく、実体験に基づいた記事作りをモットーにしています。
スポーツクラブに毎週2日~3日通い、サウナ後の暴飲暴食が趣味。(現在自粛中)
◇主な投資対象
日本株式
株式ETF(上場投資信託)
日経225先物
日経225先物オプション
◇運営者情報はこちら