I have this below which is working but I want to plot the moving average also inside the candlestick chart at col=1 and row=1
import plotly.graph_objects as go
from plotly.subplots import make_subplots
fig = make_subplots(rows=3, cols=1, shared_xaxes=True, vertical_spacing=0.03, row_width=[0.3, 0.2, 0.7])
fig.add_trace(go.Candlestick(x=df.index,open=df['Open'], high=df['High'], low=df['Low'], close=df['Close'], name='Price'), row=1, col=1) ###line need to change
fig.add_trace(go.Bar(x=df.index, y=df['Volume'], name='Volume'), row=2, col=1)
fig.add_trace(go.Scatter(x=df.index, y=df['RSI'], line=dict(color="black"), name='RSI'), row=3, col=1)
fig.add_hrect(y0=0, y1=30, fillcolor="red", opacity=0.25, line_width=0, row=3, col=1)
fig.add_hrect(y0=70, y1=100, fillcolor="green", opacity=0.25, line_width=0, row=3, col=1)
fig.update_yaxes(title_text='Price', row=1, col=1)
fig.update_yaxes(title_text='Volume', row=2, col=1)
fig.update_yaxes(title_text='RSI', row=3, col=1)
so I change the line marked by comment ###line need to change above with following code which I verified to be working if running alone.
fig = go.Figure(data=[go.Candlestick(x=df.index,
open=df.Open,
high=df.High,
low=df.Low,
close=df.Close),
go.Scatter(x=df.index, y=df.SMA20, line=dict(color='orange', width=1)),
go.Scatter(x=df.index, y=df.SMA50, line=dict(color='green', width=1))])
as such the final code looked like shown below but somehow is not working. any idea? Any clue will be appreciated. Thanks!
import plotly.graph_objects as go
from plotly.subplots import make_subplots
fig = make_subplots(rows=3, cols=1, shared_xaxes=True, vertical_spacing=0.03, row_width=[0.3, 0.2, 0.7])
fig.add_trace(go.Figure(data=[go.Candlestick(x=df.index,
open=df.Open,
high=df.High,
low=df.Low,
close=df.Close),
go.Scatter(x=df.index, y=df.SMA20, line=dict(color='orange', width=1)),
go.Scatter(x=df.index, y=df.SMA50, line=dict(color='green', width=1))]), row=1, col=1) ###line need to change
fig.add_trace(go.Bar(x=df.index, y=df['Volume'], name='Volume'), row=2, col=1)
fig.add_trace(go.Scatter(x=df.index, y=df['RSI'], line=dict(color="black"), name='RSI'), row=3, col=1)
fig.add_hrect(y0=0, y1=30, fillcolor="red", opacity=0.25, line_width=0, row=3, col=1)
fig.add_hrect(y0=70, y1=100, fillcolor="green", opacity=0.25, line_width=0, row=3, col=1)
fig.update_yaxes(title_text='Price', row=1, col=1)
fig.update_yaxes(title_text='Volume', row=2, col=1)
fig.update_yaxes(title_text='RSI', row=3, col=1)
the error is :
ValueError:
Invalid element(s) received for the 'data' property of
Invalid elements include: [Figure({
'data': [{'close': array([452.04, 460.04, 459.63, ..., 146.14, 146.09, 145.6 ]),
'high': array([453.1 , 464.17, 460. , ..., 147.11, 146.7 , 147.71]),
'low': array([441.19, 455.71, 452.18, ..., 145.63, 145.52, 145.3 ]),
'open': array([441.99 , 457.72 , 459.315, ..., 146.35 , 146.2 , 146.44 ]),
'type': 'candlestick',
'x': [2020-08-12 00:00:00, 2020-08-13 00:00:00, 2020-08-14 00:00:00,
..., 2021-08-06 00:00:00, 2021-08-09 00:00:00, 2021-08-10
00:00:00]},
{'line': {'color': 'orange', 'width': 1},
'type': 'scatter',
'x': [2020-08-12 00:00:00, 2020-08-13 00:00:00, 2020-08-14 00:00:00,
..., 2021-08-06 00:00:00, 2021-08-09 00:00:00, 2021-08-10
00:00:00],
'y': array([409.057 , 412.7545, 416.4705, ..., 146.4395, 146.519 , 146.517 ])},
{'line': {'color': 'green', 'width': 1},
'type': 'scatter',
'x': [2020-08-12 00:00:00, 2020-08-13 00:00:00, 2020-08-14 00:00:00,
..., 2021-08-06 00:00:00, 2021-08-09 00:00:00, 2021-08-10
00:00:00],
'y': array([378.5454, 381.2438, 383.99 , ..., 137.7988, 138.215 , 138.6348])}],
'layout': {'template': '...'}
})]
The 'data' property is a tuple of trace instances
that may be specified as:
- A list or tuple of trace instances
(e.g. [Scatter(...), Bar(...)])
- A single trace instance
(e.g. Scatter(...), Bar(...), etc.)
- A list or tuple of dicts of string/value properties where:
- The 'type' property specifies the trace type
One of: ['bar', 'barpolar', 'box', 'candlestick',
'carpet', 'choropleth', 'choroplethmapbox',
'cone', 'contour', 'contourcarpet',
'densitymapbox', 'funnel', 'funnelarea',
'heatmap', 'heatmapgl', 'histogram',
'histogram2d', 'histogram2dcontour', 'icicle',
'image', 'indicator', 'isosurface', 'mesh3d',
'ohlc', 'parcats', 'parcoords', 'pie',
'pointcloud', 'sankey', 'scatter',
'scatter3d', 'scattercarpet', 'scattergeo',
'scattergl', 'scattermapbox', 'scatterpolar',
'scatterpolargl', 'scatterternary', 'splom',
'streamtube', 'sunburst', 'surface', 'table',
'treemap', 'violin', 'volume', 'waterfall']
- All remaining properties are passed to the constructor of
the specified trace type
(e.g. [{'type': 'scatter', ...}, {'type': 'bar, ...}])
