[本文內容僅就一般性之證券投資公開資訊進行統計程式教學之範例,作者並不針對特定有價證券買賣提供建議]
- 安裝類別庫
在進行類神網路建立模型時,經常會使用的例子是利用股票市場的資料建立模型。一般在取得股票資經常使用的 python 類別庫是「yfinance」。安裝的方式也是利用 pip 來進行。
pip install yfinance
接下來就是引入這個類別庫,
import yfinance as yf
print(yf.__version__)
要注意的是,因為「 yfinance」 是透過爬蟲的方式取得 yahoo finance 網站的資料,如果 yahoo 網站格式變更就必須要更新;所以要儘量使用最新版本的「yfinance」。目前使用的版本是 0.2.65
接下來,指定要取得的股票資料內容及區間。如果是台灣加權指數,它的代號是「^TWII」,如果是美國道瓊指標則是「^DJI」,台積電 ADR則是「TSM」;而台灣的個股,例如台積電(2330),那麼代號就是「2300.TW」。
from datetime import date
from datetime import timedelta
from dateutil.relativedelta import relativedelta
import numpy as np
import matplotlib.pyplot as plt
idName='^TWII'
# idName='^DJI'
# idName='TSM'
# idName='2330.TW'
endDate=date.today()
beginDate=endDate-relativedelta(months=12)
dataYahoo=yf.download(idName,start=beginDate,end=endDate,auto_adjust=True)
print(dataYahoo.columns)
- 取得股票資料內容
從 yfinance 取得的資料包含'Close'(收盤),'High'(最高),'Low'(最低),'Open'(開盤),'Volume'(成交量)。例如,我們要把加權指數一年內的開盤及收盤的資料繪製出來。
#---------------
valueClose=dataYahoo['Close'].values.tolist()
valueOpen=dataYahoo['Open'].values.tolist()
nData=len(valueOpen)
x=np.arange(0,nData,1.0)
labelX=dataYahoo.index.strftime('%Y/%m/%d')
#----------------
plt.plot(x,valueOpen,'b-',label='Open')
plt.plot(x,valueClose,'r-',label='Close')
showTick=np.arange(0,nData,20)
plt.xticks(ticks=showTick,labels=labelX[showTick],
fontsize=8,rotation=45)
plt.legend(fontsize=10)
plt.ylabel('TW Stock Index')
plt.xlabel('Date')
plt.grid()
plt.show()

- 顯示中文的圖形
如果要使用中文來繪製完整的圖形及說明,則必須要先下載中文字形。Google有提供一些免費的中字字型,例如「NotoSansTC-VariableFont_wght.ttf」。下載解縮之後,放在跟程式同一個目錄就可以使用;所以,我們就可以將台灣加權指數以中文方式繪製出來。
# Google Chinese Font
# https://fonts.google.com/noto/specimen/Noto+Sans+TC?subset=chinese-traditional&script=Hant
import matplotlib.font_manager as fontManger
zhfont=fontManger.FontProperties(fname='NotoSansTC-VariableFont_wght.ttf')
plt.plot(x,valueOpen,'b-',label='開盤')
plt.plot(x,valueClose,'r-',label='收盤')
showTick=np.arange(0,nData,20)
plt.xticks(ticks=showTick,labels=labelX[showTick],
fontsize=8,rotation=45)
plt.legend(fontsize=10,prop=zhfont)
plt.ylabel('台灣加權指數',fontproperties=zhfont)
plt.xlabel('日期',fontproperties=zhfont)
plt.grid()
plt.show()
