LoginSignup
0
2

More than 1 year has passed since last update.

超初心者がPythonでMACDと5分足チャートをPlotlyを使って同時にグラフに表示してみた

Last updated at Posted at 2021-07-29

MACDの値はY軸の単位が違うので、ローソク足チャートと同時に表示するにはY軸が2つ必要になる。PlotlyでY軸2つを設定する方法をやってた。ここではグラフ表示部分のコードだけ紹介。MACDの計算やらはなんとなく察してどうぞ。

参考

Plotlyを使ったグラフ化は以下でもやってます。こちらはY軸1つ。

MACDの計算方法は以下でやってます。

コード


# グラフ化
interval = 12
vals = []
labels = []
for i in range(len(df)//interval):
    vals.append(df.index[i*interval])
    labels.append(df.index[i*interval].strftime('%Y-%m-%d %H:%M'))

fig = go.Figure(
        data=[
                go.Candlestick(
                    x=df.index,
                    open=df.Open,
                    high=df.High,
                    low=df.Low,
                    close=df.Close,
                    hovertext=['date:{}<br>open:{}<br>high:{}<br>low:{}<br>close:{}'
                        .format(i.strftime('%Y-%m-%d %H:%M'), 
                                df.loc[i,'Open'],
                                df.loc[i,'High'],
                                df.loc[i,'Low'],
                                df.loc[i,'Close']) for i in df.index],
                    hoverinfo="text",
                    name="Candle",
                    yaxis='y1'
                ),
                go.Scatter(x=df.index, y=df.MACD, line=dict(color='blue', width=1), name="macd", yaxis='y2'),
                go.Scatter(x=df.index, y=df.Signal, line=dict(color='red', width=1), name="signal", yaxis='y2')
            ],
        layout = go.Layout(
                xaxis = dict(
                    ticktext = labels,
                    tickvals = vals,
                    tickangle = -90
                ),
                yaxis = dict(title='y1', side='left', showgrid=False, range=[df.Low.min(), df.High.max()]), 
                yaxis2 = dict(title='y2', side='right', overlaying='y', range=[min(df.Signal.min(), df.MACD.min()), max(df.MACD.max(), df.Signal.max())])
        )
)
fig.show()

グラフ

スクリーンショット 2021-07-29 9.11.52.png

ちょっと説明

go.Candlestick、go.Scatterの引数でY軸を指定してる。デフォルトだとy1が左でy2が右。その後、layoutでyaxis(=左)とyaxis2(=右)の設定をしている。yaxis2でoverlayingを指定しとかないとyaxisを上書きしてy1のデータがグラフに表示されないので注意。

rangeでY軸の最小値と最大値を指定できるので、適宜計算する。

感想

Plotly便利だなぁ(小並感)

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2