最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

深度解析Python?yfinance的核心功能和高級(jí)用法

 更新時(shí)間:2025年08月15日 16:01:16   作者:hiquant  
yfinance是一個(gè)功能強(qiáng)大且易于使用的Python庫(kù),用于從Yahoo Finance獲取金融數(shù)據(jù),本教程將深入探討yfinance的核心功能和高級(jí)用法,感興趣的朋友跟隨小編一起看看吧

yfinance 深度解析教程 (Python)

yfinance 是一個(gè)非常流行的 Python 庫(kù),允許用戶從 Yahoo Finance 下載金融市場(chǎng)數(shù)據(jù)。它提供了一種簡(jiǎn)單方便的方式來(lái)獲取股票價(jià)格、歷史數(shù)據(jù)、基本面信息、期權(quán)數(shù)據(jù)等。本教程將深入探討 yfinance 的核心功能和高級(jí)用法。

1. 簡(jiǎn)介與安裝

1.1 什么是 yfinance?

yfinance 是一個(gè)開源的 Python 庫(kù),它最初是作為 pandas-datareader 庫(kù)修復(fù)雅虎財(cái)經(jīng) API 變化的解決方案而創(chuàng)建的,后來(lái)發(fā)展成為一個(gè)獨(dú)立且功能強(qiáng)大的庫(kù),專門用于從 Yahoo Finance 獲取數(shù)據(jù)。

1.2 為什么選擇 yfinance?

  • 免費(fèi): 無(wú)需 API 密鑰即可訪問大量金融數(shù)據(jù)。
  • 易用: API 設(shè)計(jì)簡(jiǎn)潔直觀。
  • 功能豐富: 支持多種數(shù)據(jù)類型(歷史價(jià)格、基本面、期權(quán)等)。
  • 與 Pandas 集成: 返回的數(shù)據(jù)通常是 Pandas DataFrame 或 Series 格式,方便后續(xù)分析。

1.3 安裝 yfinance

使用 pip 可以輕松安裝:

pip install yfinance --upgrade --no-cache-dir

建議加上 --upgrade --no-cache-dir 以確保安裝最新版本并避免緩存問題。

同時(shí),我們通常需要 pandas 來(lái)處理數(shù)據(jù),如果未安裝,也一并安裝:

pip install pandas

2. 核心對(duì)象:Ticker

yfinance 的主要入口點(diǎn)是 Ticker 類。你需要為你想要獲取數(shù)據(jù)的每個(gè)金融工具(股票、ETF、指數(shù)等)創(chuàng)建一個(gè) Ticker 實(shí)例。

2.1 創(chuàng)建 Ticker 對(duì)象

import yfinance as yf
import pandas as pd # 通常會(huì)用到 pandas
# 創(chuàng)建一個(gè)代表蘋果公司 (AAPL) 的 Ticker 對(duì)象
aapl = yf.Ticker("AAPL")
# 創(chuàng)建一個(gè)代表微軟公司 (MSFT) 的 Ticker 對(duì)象
msft = yf.Ticker("MSFT")
# 也可以獲取其他市場(chǎng)的股票,例如騰訊控股 (0700.HK)
tencent = yf.Ticker("0700.HK")
# 獲取指數(shù),例如標(biāo)普 500 (^GSPC)
sp500 = yf.Ticker("^GSPC")
print(aapl)
# 輸出類似: yfinance.Ticker object <AAPL>

這里的 “AAPL”, “MSFT”, “0700.HK”, “^GSPC” 就是所謂的 Ticker Symbol(股票代碼)。你需要知道你感興趣的金融工具在 Yahoo Finance 上的代碼。

2.2 獲取股票信息 (info)

info 屬性返回一個(gè)包含該股票大量信息的 Python 字典。

# 獲取蘋果公司的詳細(xì)信息
aapl_info = aapl.info
# 查看信息字典中的部分內(nèi)容
print(f"公司名稱: {aapl_info.get('longName', 'N/A')}")
print(f"所在行業(yè): {aapl_info.get('industry', 'N/A')}")
print(f"所在板塊: {aapl_info.get('sector', 'N/A')}")
print(f"公司簡(jiǎn)介: {aapl_info.get('longBusinessSummary', 'N/A')[:100]}...") # 只顯示前100個(gè)字符
print(f"市值: {aapl_info.get('marketCap', 'N/A')}")
print(f"市盈率 (TTM): {aapl_info.get('trailingPE', 'N/A')}")
print(f"遠(yuǎn)期市盈率: {aapl_info.get('forwardPE', 'N/A')}")
print(f"股息率: {aapl_info.get('dividendYield', 'N/A')}")
# info 字典包含非常多的字段,你可以打印所有鍵來(lái)看看
# print(aapl_info.keys())

注意: info 字典中的字段并非對(duì)所有 Ticker 都完整可用,某些字段可能缺失(返回 None 或不存在)。使用 .get(key, default_value) 是更安全的訪問方式。

3. 獲取歷史市場(chǎng)數(shù)據(jù) (history)

這是 yfinance 最常用的功能之一,用于獲取 OHLCV(開盤價(jià)、最高價(jià)、最低價(jià)、收盤價(jià)、成交量)數(shù)據(jù)。

3.1 基本用法 (周期period)

history() 方法可以通過 period 參數(shù)指定獲取數(shù)據(jù)的時(shí)間跨度。

# 獲取蘋果公司過去一年的日線數(shù)據(jù)
hist_1y = aapl.history(period="1y")
print("過去一年的日線數(shù)據(jù) (前5條):")
print(hist_1y.head())
# 可用的 period 值包括: "1d", "5d", "1mo", "3mo", "6mo", "1y", "2y", "5y", "10y", "ytd" (年初至今), "max" (所有可用數(shù)據(jù))
hist_max = aapl.history(period="max")
print(f"\n獲取了 {len(hist_max)} 條歷史數(shù)據(jù) (從 {hist_max.index.min()} 到 {hist_max.index.max()})")

3.2 指定時(shí)間范圍 (start,end)

也可以使用 startend 參數(shù)指定具體的開始和結(jié)束日期(格式通常為 “YYYY-MM-DD”)。

# 獲取 2023 年全年的日線數(shù)據(jù)
hist_2023 = aapl.history(start="2023-01-01", end="2024-01-01") # end日期不包含
print("\n2023 年全年日線數(shù)據(jù) (后5條):")
print(hist_2023.tail())

3.3 不同時(shí)間間隔 (interval)

interval 參數(shù)用于指定數(shù)據(jù)的時(shí)間頻率。

# 獲取過去 5 天的 1 分鐘 K 線數(shù)據(jù)
# 注意:分鐘級(jí)別的數(shù)據(jù)獲取有時(shí)間范圍限制,通常只能獲取最近幾十天的數(shù)據(jù)
hist_5d_1m = aapl.history(period="5d", interval="1m")
print("\n過去 5 天的 1 分鐘 K 線數(shù)據(jù) (前5條):")
print(hist_5d_1m.head())
# 可用的 interval 值包括:
# 分鐘級(jí)別: "1m", "2m", "5m", "15m", "30m", "60m", "90m"
# 小時(shí)級(jí)別: "1h" (注意: 60m 和 1h 可能略有不同)
# 日線及以上: "1d", "5d", "1wk", "1mo", "3mo"
# 獲取過去 6 個(gè)月的周線數(shù)據(jù)
hist_6mo_wk = aapl.history(period="6mo", interval="1wk")
print("\n過去 6 個(gè)月的周線數(shù)據(jù) (前5條):")
print(hist_6mo_wk.head())

重要提示:

  • 分鐘級(jí)別 (1m, 2m 等) 的數(shù)據(jù)通常只能獲取最近 7 天(對(duì)于 1m)或 60 天(對(duì)于其他分鐘級(jí)別)的數(shù)據(jù)。
  • 請(qǐng)求過于頻繁或數(shù)據(jù)量過大可能導(dǎo)致 Yahoo Finance 暫時(shí)阻止你的 IP。

3.4 數(shù)據(jù)格式 (Pandas DataFrame)

history() 方法返回的是一個(gè) Pandas DataFrame,索引是日期(或時(shí)間戳),列包括:

  • Open: 開盤價(jià)
  • High: 最高價(jià)
  • Low: 最低價(jià)
  • Close: 收盤價(jià)
  • Volume: 成交量
  • Dividends: 股息 (如果當(dāng)天有派息)
  • Stock Splits: 股票分割比例 (如果當(dāng)天有分割)
print("\n歷史數(shù)據(jù) DataFrame 的列名:")
print(hist_1y.columns)
print("\n歷史數(shù)據(jù) DataFrame 的索引類型:")
print(type(hist_1y.index))

3.5 其他參數(shù) (如actions)

默認(rèn)情況下,DividendsStock Splits 列包含在內(nèi)。你也可以通過 actions=True (默認(rèn)) 或 actions=False 控制是否獲取這些信息。還有其他參數(shù)如 auto_adjust (自動(dòng)調(diào)整價(jià)格以反映股息和拆分,默認(rèn)為 True) 等,可以查閱文檔了解更多。

# 不獲取股息和拆分信息
hist_no_actions = aapl.history(period="1y", actions=False)
print("\n不包含 actions 的列名:")
print(hist_no_actions.columns)
# 獲取未調(diào)整的價(jià)格 (會(huì)多出 'Adj Close' 列,表示前復(fù)權(quán)收盤價(jià))
hist_unadjusted = aapl.history(period="1y", auto_adjust=False)
print("\n未自動(dòng)調(diào)整價(jià)格的列名:")
print(hist_unadjusted.columns)
print(hist_unadjusted.head())

4. 獲取基本面數(shù)據(jù)

yfinance 提供了訪問公司財(cái)務(wù)報(bào)表和其他基本面數(shù)據(jù)的方法。

4.1 財(cái)務(wù)報(bào)表 (financials,balance_sheet,cashflow)

這些方法返回包含年度和季度財(cái)務(wù)報(bào)表的 Pandas DataFrame。

# 獲取年度損益表 (Income Statement)
financials = aapl.financials
print("\n年度損益表 (部分):")
print(financials) # DataFrame 的列是年份或季度
# 獲取年度資產(chǎn)負(fù)債表 (Balance Sheet)
balance_sheet = aapl.balance_sheet
print("\n年度資產(chǎn)負(fù)債表 (部分):")
print(balance_sheet.head())
# 獲取年度現(xiàn)金流量表 (Cash Flow Statement)
cashflow = aapl.cashflow
print("\n年度現(xiàn)金流量表 (部分):")
print(cashflow.head())

4.2 盈利 (earnings)

這個(gè)屬性似乎已被整合或棄用,更常用的查看盈利信息的方式是通過 financialscalendar / earnings_dates。舊版本可能有 aapl.earnings。

4.3 季度數(shù)據(jù)

默認(rèn)情況下,上述財(cái)務(wù)報(bào)表方法返回年度數(shù)據(jù)??梢酝ㄟ^相應(yīng)的 quarterly_ 屬性獲取季度數(shù)據(jù)。

# 獲取季度損益表
q_financials = aapl.quarterly_financials
print("\n季度損益表 (部分):")
print(q_financials)
# 獲取季度資產(chǎn)負(fù)債表
q_balance_sheet = aapl.quarterly_balance_sheet
print("\n季度資產(chǎn)負(fù)債表 (部分):")
print(q_balance_sheet.head())
# 獲取季度現(xiàn)金流量表
q_cashflow = aapl.quarterly_cashflow
print("\n季度現(xiàn)金流量表 (部分):")
print(q_cashflow.head())

5. 獲取其他關(guān)鍵數(shù)據(jù)

Ticker 對(duì)象還提供了許多其他有用的屬性。

5.1 股票行為 (actions,dividends,splits)

  • actions: 返回一個(gè)包含所有股息和股票分割記錄的 DataFrame。
  • dividends: 只返回股息記錄 (Series)。
  • splits: 只返回股票分割記錄 (Series)。
# 獲取所有歷史行為
actions = aapl.actions
print("\n股票行為 (股息與拆分):")
print(actions.tail()) # 顯示最近的行為
# 獲取股息歷史
dividends = aapl.dividends
print("\n股息歷史 (最近 5 條):")
print(dividends.tail())
# 獲取拆分歷史
splits = aapl.splits
print("\n股票分割歷史:")
print(splits)

5.2 持股信息 (major_holders,institutional_holders)

  • major_holders: 主要股東信息 (通常是內(nèi)部人士和持股比例較大的股東)。
  • institutional_holders: 機(jī)構(gòu)持股者信息。
# 獲取主要股東信息
major_holders = aapl.major_holders
print("\n主要股東:")
print(major_holders)
# 獲取機(jī)構(gòu)持股者信息
inst_holders = aapl.institutional_holders
print("\n機(jī)構(gòu)持股者 (前 10):")
print(inst_holders.head(10))

注意: 這些持股數(shù)據(jù)更新可能不及時(shí),且并非對(duì)所有 Ticker 都可用。

5.3 推薦評(píng)級(jí) (recommendations)

獲取分析師對(duì)該股票的推薦評(píng)級(jí)歷史。

recommendations = aapl.recommendations
print("\n分析師推薦評(píng)級(jí) (最近 10 條):")
print(recommendations.tail(10))

DataFrame 通常包含日期、評(píng)級(jí)機(jī)構(gòu)、評(píng)級(jí)變化(例如 從 Buy 到 Strong Buy)等信息。

5.4 公司日歷與盈利日期 (calendar,earnings_dates)

  • calendar: 通常包含下一次盈利發(fā)布的日期范圍和相關(guān)事件。
  • earnings_dates: 提供歷史上的盈利公告日期、EPS 預(yù)期和實(shí)際值。
# 獲取公司日歷 (如下次財(cái)報(bào)日期)
calendar = aapl.calendar
print("\n公司日歷 (下次財(cái)報(bào)):")
print(calendar)
# 獲取歷史盈利日期信息
try:
    earnings_dates = aapl.earnings_dates
    print("\n歷史盈利日期 (最近幾次):")
    print(earnings_dates.tail())
except Exception as e:
    print(f"\n獲取盈利日期失敗: {e}") # 有時(shí)可能因數(shù)據(jù)不可用而出錯(cuò)

5.5 ISIN 代碼 (isin)

獲取股票的國(guó)際證券識(shí)別碼 (ISIN)。

isin = aapl.isin
print(f"\nAAPL 的 ISIN 代碼: {isin}")
# 對(duì)于非美國(guó)股票,這個(gè)可能更有用
# tencent_isin = tencent.isin
# print(f"0700.HK 的 ISIN 代碼: {tencent_isin}")

注意: isin 屬性有時(shí)可能返回 - 或空值,如果 Yahoo Finance 沒有提供該數(shù)據(jù)。

5.6 相關(guān)新聞 (news)

獲取與該 Ticker 相關(guān)的最新新聞標(biāo)題和鏈接。

news = aapl.news
print("\n相關(guān)新聞 (部分):")
if news: # 檢查列表是否為空
    for item in news[:5]: # 只顯示前 5 條
        print(f"- 標(biāo)題: {item.get('title')}")
        print(f"  發(fā)布者: {item.get('publisher')}")
        print(f"  鏈接: {item.get('link')}")
        # print(f"  發(fā)布時(shí)間: {pd.to_datetime(item.get('providerPublishTime'), unit='s')}") # 時(shí)間戳轉(zhuǎn)換
else:
    print("未能獲取到相關(guān)新聞。")

新聞列表包含字典,每個(gè)字典代表一條新聞,包含標(biāo)題 (title)、鏈接 (link)、發(fā)布者 (publisher)、發(fā)布時(shí)間 (providerPublishTime - Unix時(shí)間戳) 等信息。

6. 獲取期權(quán)數(shù)據(jù)

yfinance 也可以用來(lái)獲取股票的期權(quán)鏈數(shù)據(jù)。

6.1 獲取期權(quán)到期日 (options)

options 屬性返回一個(gè)包含所有可用期權(quán)到期日的元組。

# 獲取蘋果公司所有可用的期權(quán)到期日
try:
    option_dates = aapl.options
    print("\n可用的期權(quán)到期日 (前幾個(gè)):")
    print(option_dates[:5])
except Exception as e:
    print(f"\n獲取期權(quán)到期日失敗 (可能該 Ticker 沒有期權(quán)): {e}")

6.2 獲取特定到期日的期權(quán)鏈 (option_chain)

使用 option_chain() 方法,并傳入一個(gè)到期日字符串,可以獲取該日期的看漲 (Calls) 和看跌 (Puts) 期權(quán)鏈。

if option_dates: # 確保我們獲取到了到期日
    # 獲取第一個(gè)到期日的期權(quán)鏈
    first_expiry = option_dates[0]
    opt_chain = aapl.option_chain(first_expiry)
    # 期權(quán)鏈對(duì)象包含 .calls 和 .puts 兩個(gè) DataFrame
    calls = opt_chain.calls
    puts = opt_chain.puts
    print(f"\n{first_expiry} 到期的看漲期權(quán) (部分):")
    print(calls.head()) # 顯示前幾行看漲期權(quán)數(shù)據(jù)
    print(f"\n{first_expiry} 到期的看跌期權(quán) (部分):")
    print(puts.head()) # 顯示前幾行看跌期權(quán)數(shù)據(jù)
    # 查看期權(quán) DataFrame 的列名,了解包含哪些信息
    print("\n看漲期權(quán)數(shù)據(jù)列名:")
    print(calls.columns)
    # 通常包含: contractSymbol, lastTradeDate, strike, lastPrice, bid, ask, change, percentChange, volume, openInterest, impliedVolatility, inTheMoney, contractSize, currency

注意: 期權(quán)數(shù)據(jù)可能比較龐大,獲取時(shí)可能需要一些時(shí)間。

7. 處理多個(gè) Ticker (Tickers)

如果你需要同時(shí)處理多個(gè)股票代碼,使用 Tickers 類比為每個(gè)代碼單獨(dú)創(chuàng)建 Ticker 對(duì)象更高效,尤其是在批量下載歷史數(shù)據(jù)時(shí)。

7.1 創(chuàng)建 Tickers 對(duì)象

將多個(gè) Ticker Symbol 字符串(用空格分隔)或一個(gè)列表傳遞給 yf.Tickers()。

# 創(chuàng)建包含多個(gè)股票代碼的 Tickers 對(duì)象
tickers_list = ["AAPL", "MSFT", "GOOG", "AMZN"]
tickers = yf.Tickers(" ".join(tickers_list)) # 或者直接 yf.Tickers("AAPL MSFT GOOG AMZN")
print(tickers)
# 輸出類似: yfinance.Tickers object <AAPL,MSFT,GOOG,AMZN>

7.2 批量下載歷史數(shù)據(jù)

Tickers 對(duì)象的 history() 方法可以一次性下載所有 Ticker 的歷史數(shù)據(jù)。返回的 DataFrame 使用多層列索引 (MultiIndex),第一層是 Ticker Symbol,第二層是 OHLCV 等數(shù)據(jù)字段。

# 批量獲取過去一個(gè)月的數(shù)據(jù)
multi_hist = tickers.history(period="1mo")
print("\n批量獲取的歷史數(shù)據(jù) (部分):")
print(multi_hist.head())
# 查看列索引結(jié)構(gòu)
print("\n多層列索引:")
print(multi_hist.columns)
# 訪問特定股票的特定列數(shù)據(jù)
print("\n訪問 AAPL 的收盤價(jià):")
print(multi_hist['AAPL']['Close'].head())
# 或者使用 stack() 方法轉(zhuǎn)換數(shù)據(jù)結(jié)構(gòu),更方便按 Ticker 分組處理
# stacked_hist = multi_hist.stack(level=0).reset_index().rename(columns={'level_1': 'Ticker'})
# print("\n轉(zhuǎn)換后的數(shù)據(jù)結(jié)構(gòu):")
# print(stacked_hist.head())

7.3 訪問單個(gè) Ticker 數(shù)據(jù)

Tickers 對(duì)象內(nèi)部包含一個(gè)字典 tickers.tickers,其鍵是 Ticker Symbol,值是對(duì)應(yīng)的 Ticker 對(duì)象。你可以通過這個(gè)字典訪問單個(gè) Ticker 的所有方法和屬性。

# 訪問 Tickers 對(duì)象中的 Google (GOOG) Ticker 對(duì)象
goog_ticker = tickers.tickers['GOOG']
# 獲取 Google 的 info
goog_info = goog_ticker.info
print(f"\nGoogle 的公司名稱: {goog_info.get('longName')}")
# 獲取 Google 的財(cái)務(wù)數(shù)據(jù)
goog_financials = goog_ticker.financials
print("\nGoogle 的年度損益表 (部分):")
print(goog_financials.head())

這種方式在需要獲取不同類型數(shù)據(jù)(如某些股票的歷史數(shù)據(jù),另一些股票的基本面信息)時(shí)很有用,但如果是統(tǒng)一獲取同一種數(shù)據(jù)(如所有股票的歷史收盤價(jià)),直接使用 Tickers 對(duì)象的批量方法通常更優(yōu)。

7.4 使用yf.download()批量下載

yfinance 還提供了一個(gè)便捷的頂層函數(shù) yf.download(),專門用于批量下載歷史數(shù)據(jù),通常比 Tickers.history() 更常用且可能更穩(wěn)定。

# 使用 yf.download() 批量下載歷史數(shù)據(jù)
data = yf.download("NVDA TSLA NFLX", start="2024-01-01", end="2024-04-01")
print("\n使用 yf.download() 獲取的數(shù)據(jù) (部分):")
print(data.head())
# download 返回的 DataFrame 默認(rèn)按數(shù)據(jù)字段分組 (Open, High, Low, Close, Adj Close, Volume)
print("\nyf.download() 返回的列索引:")
print(data.columns)
# 訪問特定字段的所有股票數(shù)據(jù)
print("\n所有股票的收盤價(jià):")
print(data['Close'].head())
# 訪問特定股票的所有數(shù)據(jù)
print("\nTSLA 的所有數(shù)據(jù):")
print(data.xs('TSLA', level=1, axis=1).head()) # 使用 xs 進(jìn)行跨層級(jí)選擇
# 也可以設(shè)置 group_by='ticker' 使列索引先按 Ticker 分組
data_grouped_by_ticker = yf.download("NVDA TSLA NFLX", start="2024-01-01", end="2024-04-01", group_by='ticker')
print("\n按 Ticker 分組的數(shù)據(jù) (部分):")
print(data_grouped_by_ticker.head())
print("\n按 Ticker 分組的列索引:")
print(data_grouped_by_ticker.columns)
print("\n訪問 TSLA 的收盤價(jià) (按 Ticker 分組):")
print(data_grouped_by_ticker['TSLA']['Close'].head())

yf.download() 是批量獲取歷史數(shù)據(jù)的推薦方式。

8. 高級(jí)技巧與注意事項(xiàng)

8.1 錯(cuò)誤處理 (無(wú)效 Ticker)

當(dāng)請(qǐng)求一個(gè)不存在或 Yahoo Finance 沒有數(shù)據(jù)的 Ticker 時(shí),yfinance 可能會(huì)拋出錯(cuò)誤或返回空數(shù)據(jù)。在處理用戶輸入或大量 Ticker 列表時(shí),進(jìn)行錯(cuò)誤處理很重要。

invalid_ticker_symbol = "INVALIDTICKERXYZ"
try:
    invalid_ticker = yf.Ticker(invalid_ticker_symbol)
    # 嘗試獲取數(shù)據(jù),這通常會(huì)失敗或返回空
    info = invalid_ticker.info
    hist = invalid_ticker.history(period="1d")
    if not info and hist.empty:
        print(f"\nTicker '{invalid_ticker_symbol}' 似乎無(wú)效或沒有數(shù)據(jù)。")
    # 注意:某些情況下 info 可能返回 {},history 可能直接拋錯(cuò),具體行為可能變化
except Exception as e:
    print(f"\n處理 Ticker '{invalid_ticker_symbol}' 時(shí)發(fā)生錯(cuò)誤: {e}")
# 對(duì)于 yf.download(),它通常會(huì)打印錯(cuò)誤消息但繼續(xù)下載其他有效的 Ticker
data = yf.download("AAPL INVALIDTICKERXYZ GOOG", period="1d")
print("\n嘗試下載包含無(wú)效 Ticker 的數(shù)據(jù):")
# 查看下載結(jié)果,INVALIDTICKERXYZ 的數(shù)據(jù)列通常會(huì)是 NaN
# print(data)

8.2 數(shù)據(jù)可視化 (簡(jiǎn)單示例)

獲取的數(shù)據(jù)通常是 Pandas DataFrame,可以方便地使用 matplotlibseaborn 進(jìn)行可視化。

import matplotlib.pyplot as plt
# 獲取微軟過去一年的數(shù)據(jù)
msft_hist = msft.history(period="1y")
# 繪制收盤價(jià)曲線
plt.figure(figsize=(10, 5))
msft_hist['Close'].plot(title='Microsoft (MSFT) Stock Price (Last Year)')
plt.ylabel('Price (USD)')
plt.xlabel('Date')
plt.grid(True)
plt.show()
# 繪制成交量柱狀圖
plt.figure(figsize=(10, 3))
msft_hist['Volume'].plot(kind='bar', title='Microsoft (MSFT) Trading Volume (Last Year)')
plt.ylabel('Volume')
plt.xlabel('Date')
# 由于日期標(biāo)簽太多,可能需要調(diào)整顯示方式,例如只顯示部分標(biāo)簽或按月聚合
# plt.xticks(rotation=45) # 旋轉(zhuǎn)標(biāo)簽
plt.show()

8.3 代理設(shè)置 (Proxy)

如果在網(wǎng)絡(luò)受限的環(huán)境(如公司網(wǎng)絡(luò))或因請(qǐng)求頻繁被暫時(shí)限制,可能需要設(shè)置代理。

# 示例:設(shè)置 HTTP 和 HTTPS 代理
# proxies = {
#     'http': 'http://user:password@proxy.server.com:port',
#     'https': 'https://user:password@proxy.server.com:port',
# }
# 在 Ticker 對(duì)象級(jí)別設(shè)置 (會(huì)話級(jí)別)
# msft = yf.Ticker("MSFT")
# msft.set_proxy(proxies)
# hist = msft.history(period="1d")
# 或者在 download 函數(shù)中設(shè)置
# data = yf.download("AAPL", period="1d", proxy=proxies)
# 注意:代理設(shè)置的 API 可能會(huì)隨版本變化,請(qǐng)查閱最新文檔。
# 較新版本傾向于使用 Session 對(duì)象進(jìn)行更底層的控制,但這超出了基礎(chǔ)教程范圍。
print("\n代理設(shè)置: 請(qǐng)參考 yfinance 文檔以獲取最新和最可靠的代理設(shè)置方法。")

8.4 請(qǐng)求頻率限制

Yahoo Finance 并未公開其確切的請(qǐng)求頻率限制,但過于頻繁的請(qǐng)求(尤其是在短時(shí)間內(nèi)大量請(qǐng)求不同 Ticker 的多種數(shù)據(jù))可能導(dǎo)致 IP 被暫時(shí)封禁(通常返回 HTTP 403 或 429 錯(cuò)誤)。

  • 策略:
    • 盡量使用 Tickers 對(duì)象或 yf.download() 進(jìn)行批量操作,而不是在循環(huán)中單獨(dú)請(qǐng)求每個(gè) Ticker。
    • 如果在循環(huán)中進(jìn)行請(qǐng)求,請(qǐng)?jiān)诿看握?qǐng)求后加入適當(dāng)?shù)难舆t(例如 time.sleep(1))。
    • 避免不必要的數(shù)據(jù)請(qǐng)求。
    • 如果需要大量數(shù)據(jù),考慮分批次、在不同時(shí)間進(jìn)行。
import time
tickers_to_fetch = ["AAPL", "MSFT", "GOOG", "AMZN", "META", "NVDA", "TSLA"] # 示例列表
all_info = {}
for symbol in tickers_to_fetch:
    try:
        print(f"正在獲取 {symbol} 的信息...")
        ticker = yf.Ticker(symbol)
        all_info[symbol] = ticker.info
        # 在每次請(qǐng)求后加入短暫延遲,避免過快請(qǐng)求
        time.sleep(1) # 暫停 1 秒
    except Exception as e:
        print(f"獲取 {symbol} 信息失敗: {e}")
print("\n獲取到的部分信息:")
# print(all_info.get("AAPL", {}).get("longName"))
# print(all_info.get("MSFT", {}).get("longName"))

9. 總結(jié)

yfinance 是一個(gè)功能強(qiáng)大且易于使用的 Python 庫(kù),用于從 Yahoo Finance 獲取金融數(shù)據(jù)。本教程涵蓋了其核心功能:

  • 使用 Ticker 對(duì)象獲取單個(gè)金融工具的數(shù)據(jù)(info, history, financials, options, news 等)。
  • 使用 Tickers 對(duì)象或 yf.download() 高效處理多個(gè)金融工具。
  • 了解了數(shù)據(jù)的格式 (Pandas DataFrame/Series) 和一些常用參數(shù)。
  • 討論了錯(cuò)誤處理、可視化基礎(chǔ)以及請(qǐng)求頻率等注意事項(xiàng)。

要進(jìn)一步深入,建議:

  • 閱讀官方文檔: 雖然 yfinance 的文檔可能不如一些大型庫(kù)詳盡,但仍然是獲取最新信息的主要來(lái)源。
  • 實(shí)踐: 嘗試獲取不同類型 Ticker(股票、ETF、指數(shù)、加密貨幣等)的數(shù)據(jù),探索不同的參數(shù)組合。
  • 結(jié)合其他庫(kù):yfinance 獲取的數(shù)據(jù)與 pandas 進(jìn)行深入分析,與 matplotlib/seaborn/plotly 進(jìn)行高級(jí)可視化,或與 scikit-learn 等庫(kù)進(jìn)行量化分析。

希望本教程能幫助你更好地理解和使用 yfinance 庫(kù)!

到此這篇關(guān)于 深度解析Python yfinance的核心功能和高級(jí)用法的文章就介紹到這了,更多相關(guān)python yfinance用法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Django 內(nèi)置權(quán)限擴(kuò)展案例詳解

    Django 內(nèi)置權(quán)限擴(kuò)展案例詳解

    這篇文章主要介紹了Django 內(nèi)置權(quán)限擴(kuò)展案例詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • Python實(shí)現(xiàn)多線程下載腳本的示例代碼

    Python實(shí)現(xiàn)多線程下載腳本的示例代碼

    這篇文章主要介紹了Python實(shí)現(xiàn)多線程下載腳本的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • Python利用pandas和matplotlib實(shí)現(xiàn)繪制圓環(huán)圖

    Python利用pandas和matplotlib實(shí)現(xiàn)繪制圓環(huán)圖

    在可視化的過程中,圓環(huán)圖是一種常用的方式,特別適合于展示各類別占比情況,本文將介紹如何使用 Python中的 pandas 和 matplotlib 庫(kù),來(lái)制作一個(gè)店鋪銷量占比的圓環(huán)圖,需要的可以參考下
    2023-11-11
  • 通過python實(shí)現(xiàn)Google的精準(zhǔn)搜索功能

    通過python實(shí)現(xiàn)Google的精準(zhǔn)搜索功能

    這篇文章主要介紹了通過python實(shí)現(xiàn)Google的精準(zhǔn)搜索功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2024-05-05
  • python簡(jiǎn)單實(shí)現(xiàn)插入排序?qū)嵗a

    python簡(jiǎn)單實(shí)現(xiàn)插入排序?qū)嵗a

    在本篇文章里小編給大家整理了一篇關(guān)于python簡(jiǎn)單實(shí)現(xiàn)插入排序?qū)嵗a,有需要的朋友們可以學(xué)習(xí)參考下。
    2020-12-12
  • python之PyInstaller(將Python腳本打包為可執(zhí)行文件方式)

    python之PyInstaller(將Python腳本打包為可執(zhí)行文件方式)

    PyInstaller將Python腳本打包為跨平臺(tái)可執(zhí)行文件,自動(dòng)處理依賴庫(kù),支持單文件/目錄模式,便于分發(fā),適用于GUI、數(shù)據(jù)文件處理及多平臺(tái)部署,優(yōu)化體積與權(quán)限問題
    2025-09-09
  • python tkinter實(shí)現(xiàn)界面切換的示例代碼

    python tkinter實(shí)現(xiàn)界面切換的示例代碼

    今天小編就為大家分享一篇python tkinter實(shí)現(xiàn)界面切換的示例代碼,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧
    2019-06-06
  • 基于Python編寫一個(gè)圖片批量修改尺寸工具

    基于Python編寫一個(gè)圖片批量修改尺寸工具

    在日常辦公和內(nèi)容創(chuàng)作中,我們經(jīng)常需要批量處理大量圖片尺寸,今天我要分享一個(gè)用Python開發(fā)的圖片批量修改尺寸工具,它能幫你輕松解決這個(gè)問題
    2025-09-09
  • 深入理解Python中的*重復(fù)運(yùn)算符

    深入理解Python中的*重復(fù)運(yùn)算符

    這篇文章主要介紹了深入理解Python中的*重復(fù)運(yùn)算符,小編覺得還是挺不錯(cuò)的,這里分享給大家,供需要的朋友參考。
    2017-10-10
  • 20個(gè)職場(chǎng)人必須會(huì)的Python辦公腳本分享

    20個(gè)職場(chǎng)人必須會(huì)的Python辦公腳本分享

    在這個(gè)數(shù)據(jù)爆炸的時(shí)代,Python?早就不是程序員的專屬,它是每個(gè)職場(chǎng)人手里最強(qiáng)的武器,本文分享了20個(gè)拿來(lái)就能用的Python腳本,直接解決你90%的重復(fù)勞動(dòng),希望對(duì)大家有所幫助
    2026-04-04

最新評(píng)論

赣州市| 信丰县| 八宿县| 汶川县| 彭州市| 花垣县| 长汀县| 龙胜| 固始县| 罗江县| 海安县| 准格尔旗| 吕梁市| 平安县| 峨眉山市| 卢氏县| 拜城县| 上虞市| 吕梁市| 珠海市| 林口县| 桂林市| 苍南县| 南充市| 杨浦区| 惠东县| 皮山县| 利辛县| 双峰县| 晴隆县| 嘉黎县| 科技| 滨海县| 巴南区| 碌曲县| 泉州市| 东山县| 淮北市| 定南县| 连城县| 南京市|