Issue
The below code works to create one chart from "stock1" taken from Yfinance. I am now trying to plot multiple charts using "myTickers" to collect a set of tickers from YFinance. I can get the data, but I can't get it to plot that data to multiple charts.
I want them to share the x-axis and be aligned vertically (the window can scroll if they do not fit on screen). So far any attempts have resulted in empty charts or dataframe errors that I can't solve.
I tried to adapt it to the suggestion from Daniel Goldfarb in this link Plot multiple mplfinance plots sharing x axis but so far failed to have any success. The github info for matplotlib has also not given me enough info to get past the dataframe errors.
import pandas as pd
import numpy as np
import yfinance as yf
import datetime as dt
import mplfinance as mpf
import matplotlib.pyplot as plt
from pandas_datareader import data as pdr
yf.pdr_override() # Activate Yahoo Finance Workaround
stock1 = 'M6A=F' # Gets individual ticker
# collect many tickers instead of one
myTickers = ['M6A=F','M6B=F','M6C=F','M6E=F','MBT=F','MGC=F','SIL=F','MCL=F','MES=F','MNQ=F','MYM=F','M2K=F']
startDay = 1 # Day to start gathering data
startMonth = 1 # Month to start gathering data
startYear = 2022 # Year to start gathering data
startDate = dt.datetime(startYear, startMonth, startDay) # Date to start gathering data
endDate = dt.datetime.now() # Today's date
df = pdr.get_data_yahoo(stock1, startDate, endDate) # Get data for selected stock1, from start date until today
print(df.tail())
# get data for all myTickers
#myData = pdr.get_data_yahoo(myTickers, startDate, endDate)
#print(myData.tail())
# Create custom chart style, based on Yahoo style, with black outline
chartColors = mpf.make_marketcolors(base_mpf_style="yahoo", edge="#505050", wick="#505050")
chartStyle = mpf.make_mpf_style(base_mpf_style="yahoo", marketcolors=chartColors)
# Plot custom candlestick chart for chosen stock
mpf.plot(df, type="candle", volume=True, show_nontrading=True, style=chartStyle, title="{} Daily Chart".format(stock1)) # original single chart code method
#
Solution
There are a few points to be realized using the technique in the answer to the link in the question: from the structure of mplfinance, to add graphs of other tickers to the base graph, the first ticker must be the graph to the base, and the stocks to be added must be given panel numbers. Simply put, the first floor is the first graph, and then the graph continues up to the 11th floor. You can understand this if you think of the panel number as a floor. Later, it makes no sense to display volume only on the base graph, so I have disabled it. The title position is not appropriate, so I have corrected it using the method described in this response. Check here for details on additional graphs.
import pandas as pd
import numpy as np
import yfinance as yf
import datetime as dt
import mplfinance as mpf
import matplotlib.pyplot as plt
from pandas_datareader import data as pdr
yf.pdr_override() # Activate Yahoo Finance Workaround
stock1 = 'M6A=F' # Gets individual ticker
# collect many tickers instead of one
myTickers = ['M6A=F','M6B=F','M6C=F','M6E=F','MBT=F','MGC=F','SIL=F','MCL=F','MES=F','MNQ=F','MYM=F','M2K=F']
startDay = 1 # Day to start gathering data
startMonth = 1 # Month to start gathering data
startYear = 2022 # Year to start gathering data
startDate = dt.datetime(startYear, startMonth, startDay) # Date to start gathering data
endDate = dt.datetime.now() # Today's date
df = pdr.get_data_yahoo(stock1, startDate, endDate)
# Get data for selected stock1, from start date until today
df1 = pdr.get_data_yahoo(myTickers[1:], startDate, endDate, group_by='ticker')
# get data for all myTickers
aps = []
for i,t in enumerate(myTickers[1:]):
aps.append(mpf.make_addplot(df1.loc[:,t], panel=i+1, ylabel=t, type='candle'))
# Create custom chart style, based on Yahoo style, with black outline
chartColors = mpf.make_marketcolors(base_mpf_style="yahoo", edge="#505050", wick="#505050")
chartStyle = mpf.make_mpf_style(base_mpf_style="yahoo", marketcolors=chartColors)
# Plot custom candlestick chart for chosen stock
fig,axlist = mpf.plot(df, type="candle", volume=False,
show_nontrading=True, style=chartStyle,
panel_ratios=(1,1),
figratio=(1,1),
figscale=3.0,
addplot=aps,
returnfig=True)
fig.suptitle("12 Ticker Daily Chart", y=0.90, x=0.59, fontsize=18)
Answered By - r-beginners
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.