網頁

2021年11月7日 星期日

python:輕鬆取得股價資訊

獲取股票資料庫的方式,大概有下列幾種:

1.向Bloomberg、CMoney等機構購買數據資料
2.網路爬蟲
3.yfinance API (Yahoo股價資料庫)  (最簡單)

本篇就講解如何用 yfinance 來取得美股的資料
首先,用 pip 安裝 yfinance 套件

pip install yfinance

接著我用蘋果(美股代號:AAPL)做範例,
import yfinance as yf
aapl = yf.Ticker("AAPL")
price_data = aapl.history(period="max")
print price_data

輸出結果: 




資料是從 1980~現在,所以資料相當多,通常我只要取得前一天的價格來做參考,
以將 period="max" 改為 "1d"

import yfinance as yf
aapl = yf.Ticker("AAPL")
price_data = aapl.history(period="1d")
print price_data

輸出結果: 


資料欄位分別是開盤價,當日最高價,當日最低價,收盤價,交易量等資訊,
如果只想要取得收盤價格可以 print price_data.Close

import yfinance as yf
aapl = yf.Ticker("AAPL")
price_data = aapl.history(period="1d")
print price_data.Close

輸出結果:



到這邊是不是很簡單呢?!

那如果要同時關注多個公司股價呢? 例如,我想同時取得蘋果(AAPL),微軟(MSFT),特斯拉(TSLA), 亞馬遜(AMZN)的前一天收盤價格該怎麼做?

首先將這些美股代碼放進一個 list,然後用迴圈去遍歷這些美股代號取得報價

import yfinance as yf

stock_lst = ['AAPL', 'MSFT', 'TSLA', 'AMZN']
for name in stock_lst:
    hist = yf.Ticker(name)
    price = hist.history(period='1d')
    print name, price.Close

輸出結果:








 
 
 
 
 
 
由上可以看到 price 是 dataframe 的格式所以輸出會有其他的相關資訊,像是資料型態是float64,所以我們要格式化一下數據,將收盤價取小數點2位再輸出

import yfinance as yf

stock_lst = ['AAPL', 'MSFT', 'TSLA', 'AMZN']
for name in stock_lst:
    hist = yf.Ticker(name)
    price = hist.history(period='1d')
    print '%4s:'%name, '%7.2f'%price.Close
print

輸出結果:


 

 

是不是很簡單呢!

另外一種方式是用 download 一次取得多筆股價,資料以panda dataframe 儲存

import yfinance as yf

df = yf.download('AAPL MSFT TSLA AMAZ', period='1d')
print df.Close 
 

輸出結果: 



 

 輸出至 csv 的檔案,可以藉由 Excel 開啟,範例中我將 df 資料存到 price.csv 檔案中

import yfinance as yf
import pandas as pd

df = yf.download('AAPL MSFT TSLA AMZN', period='1d')
print df.Close
df.Close.to_csv('price.csv')



 

 

也可以自訂期間

df = yf.download('AAPL MSFT TSLA AMZN', start='2021-10-20', end='2021-11-06')

 

 

另外可以參考R的做法:

R語言:簡易爬蟲(股價資訊)