- from datetime import timedelta, datetime
- import pandas as pd
- import yfinance as yf
- import matplotlib
- import mplfinance as mpf
- import talib as ta
- import matplotlib.pyplot as plt
- plt.rcParams['font.family'] = 'sans-serif'
- plt.rcParams['font.sans-serif'] = 'Noto Sans TC'
- plt.rcParams['axes.unicode_minus'] = False
- ticker_name = '台達電'
- stock_list = ['2308.TW']
- delta = timedelta(days=-300) #
- today = datetime.now()
- Data = yf.download(stock_list, today + delta)
- # Setting date as index
- Data["Date"] = Data.index
- # Giving column names
- Data = Data[["Date", "Open", "High", "Low", "Close", "Adj Close", "Volume"]]
- # Resetting the index values
- Data.reset_index(drop=True, inplace=True)
- # getting the first 5 rows of the data
- print(Data.head())
- df = pd.DataFrame(Data, columns=['Date', 'Volume', 'Open', 'High', 'Low', 'Close'] )
- df['Date'] = pd.to_datetime(df['Date'], format='%Y-%m-%d')
- df.index = pd.DatetimeIndex(df['Date'])
- # trim volume to avoid exponential form
- Data['Volume'] = Data['Volume'] / 10
- mc = mpf.make_marketcolors(up='r',
- down='g',
- edge='',
- wick='inherit',
- volume='inherit')
- s = mpf.make_mpf_style(base_mpf_style='yahoo', marketcolors=mc, rc={'font.sans-serif': 'Noto Sans TC'})
- # macd
- Data["macd"], Data["macd_signal"], Data["macd_hist"] = ta.MACD(Data['Close'])
- # macd panel
- colors = ['g' if v >= 0 else 'r' for v in Data["macd_hist"]]
- macd_plot = mpf.make_addplot(Data["macd"], panel=1, color='fuchsia', title="MACD")
- macd_hist_plot = mpf.make_addplot(Data["macd_hist"], type='bar', panel=1, color=colors)
- macd_signal_plot = mpf.make_addplot(Data["macd_signal"], panel=1, color='b')
- # plot
- plots = [macd_plot, macd_signal_plot, macd_hist_plot]
- mpf.plot(df, type='candle', style=s, mav=(5,20,60), figscale=1.5,addplot=plots, title="台達電", volume=True, volume_panel=2, ylabel='', ylabel_lower='Shares')
複製代碼
Q1)中文亂碼關鍵:A1) rc={'font.sans-serif': 'Noto Sans TC'}Q2)"TypeError: Expect data.index as DatetimeIndex". ?
A2) df.index = pd.DatetimeIndex(df['Date'])
data['Date'] = pd.to_datetime(data['Date'])
data = data.set_index('Date')
|