拓冰建站拓冰建站
首页 / 资讯中心 / 正文

免費用 Python 拉取股票數據完整指南:yfinance 從安裝到金融分析實戰

免費用 Python 拉取股票數據完整指南yfinance 從安裝到金融分析實戰【免费下载链接】yfinanceDownload market data from Yahoo! Finances API项目地址: https://gitcode.com/GitHub_Trending/yf/yfinance做金融分析時最磨人的往往是數據源官方 API 要鑰匙、要錢數據到手還得清洗半天。yfinance 就是為此而生的 Python 金融數據庫——免費、免 API 密鑰直接從雅虎財經Yahoo Finance拉取股票、指數、加密貨幣與基金的行情、財務和持倉數據返回標準 pandas 對象開箱即用。一、為什麼值得選 yfinance對個人開發者和數據分析初學者而言yfinance 的核心價值有三點零門檻不需要申請密鑰不需要付費pip一裝就能跑數據全日 K 到分鐘級行情、三張財務報表、股權結構、期權鏈、分紅與拆股記錄一應俱全貼近分析返回的幾乎全是pandas.DataFrame/Series可以直接接pct_change()、rolling()、cov()等分析方法。 它的原理很簡單模擬瀏覽器請求訪問雅虎財經的數據接口把返回的 JSON 解析、時區對齊並套用一套價格修復與清洗邏輯例如修復缺失的分紅調整、拆股調整最後交給你的代碼。代碼庫體量不大但結構清晰核心入口在 yfinance/ticker.py歷史數據抓取與修復邏輯集中在 yfinance/scrapers/history.py財務類數據在 yfinance/scrapers/fundamentals.py。二、快速上手三步拿到第一份股票數據第 1 步安裝。pip install yfinance第 2 步創建 Ticker 對象它代表單一資產是取數據的主要入口import yfinance as yf msft yf.Ticker(MSFT) info msft.info print(f公司: {info.get(longName)}) print(f行業: {info.get(industry)}) print(f現價: {info.get(currentPrice):.2f} USD) print(f52週區間: {info.get(fiftyTwoWeekLow):.2f} ~ {info.get(fiftyTwoWeekHigh):.2f})第 3 步拉取歷史股價並落地。period控制時間範圍interval控制粒度hist msft.history(period5y, interval1d) print(hist.shape, hist.columns.tolist()) hist.to_csv(msft_5y.csv)你可以把MSFT換成任何雅虎財經代碼——港股、德股、ETF 乃至BTC-USD這類加密貨幣都能用同一套接口拿到。多股票則用yf.Tickers(AAPL MSFT GOOG)一次建立多對象再調用history()得到「第一層是字段Open/Close…、第二層是代碼」的多級列 DataFrame方便直接做橫向對比。三、數據能力全景四大數據域yfinance 的能力可以歸成四個數據域每個域對應一組固定 API數據域能拿到什麼關鍵 API行情開高低收、成交量、Adj Close、分紅、拆股Ticker.history(period, interval)、download()財務利潤表、資產負債表、現金流、盈利預測quarterly_financials、balance_sheet、cashflow、earnings持倉機構/內部人持倉、分紅與拆股序列major_holders、institutional_holders、dividends、splits期權各到期日的認購/認沽鏈、隱含波動率options、option_chain(date) 三個使用小貼士fast_info比info輕量只要報價類字段時用它更快download([AAPL,MSFT], threadsTrue)是多股票批量拉取的官方方式支持並發線程history(repairTrue)會觸發價格修復見下文避坑指南返回結果多一列Repaired?標記被修過的行。圖中這類「拆股後前段價格未調整」的壞數據repairTrue會自動補上調整出處price_repair 文檔。四、場景化實戰四類高頻分析下面四張「場景卡片」覆蓋最常見的需求每张按「目標 → 關鍵做法 → 可落地結論」給出最小可行代碼。卡片 1趨勢識別與預測目標判斷價格相對均線的位置並給出短期外推。t yf.Ticker(TSLA).history(period2y) t[MA50], t[MA200] (t[Close].rolling(w).mean() for w in (50, 200)) # 用 statsmodels 做 ARIMA 外推參數需按 AIC 自行尋優 from statsmodels.tsa.arima.model import ARIMA fc ARIMA(t[Close].dropna(), order(5, 1, 0)).fit().forecast(steps30)結論收盤價站上 50 日線且 50 日線上穿 200 日線金叉常被視為趨勢轉強信號ARIMA 外推僅作參考實盤前務必做參數優化並加入基本面因子。卡片 2組合風險測算目標量化一組資產的相關性與組合層面的波動。w {AAPL: .30, MSFT: .25, GOOG: .20, AMZN: .15, META: .10} close yf.Tickers(list(w)).history(period3y)[Close] ret close.pct_change().dropna() cov ret.cov() * 252 # 年化協方差矩陣 port_ret sum(w[k] * ret[k].mean() * 252 for k in w) weights list(w.values()) port_vol (weights cov.values weights) ** 0.5 print(f年化收益 {port_ret:.2%}年化波動 {port_vol:.2%})結論協方差矩陣热力圖sns.heatmap(cov)能直接看出哪些資產高度聯動、哪些真正起到分散作用在此基礎上可繼續做馬科維茨均値-方差優化。卡片 3加密貨幣市場掃描目標比較主流幣的風險收益特徵與聯動性。coins [BTC-USD, ETH-USD, BNB-USD, SOL-USD, ADA-USD] ret yf.Tickers(coins).history(period1y)[Close].pct_change().dropna() adj pd.DataFrame({年化收益: ret.mean() * 252, 年化波動: ret.std() * 252 ** 0.5}) adj[夏普] adj[年化收益] / adj[年化波動] print(ret.corr().round(2)) # 相關性矩陣結論加密資產收益與波動都顯著高於股權且彼此相關性偏高分散效應有限事件驅動特徵強可結合新聞情緒做補充信號。卡片 4行業板塊輪動目標對比行業板塊的累計表現找出相對強強的方向。sectors {科技: [AAPL, MSFT, NVDA, META], 金融: [JPM, BAC, GS], 醫療: [JNJ, UNH, MRK], 能源: [XOM, CVX, EOG]} close yf.Tickers([t for v in sectors.values() for t in v]) \ .history(period1y)[Close] for name, syms in sectors.items(): print(name, ((1 close[syms].pct_change()).cumprod() - 1).iloc[-1].mean())結論等權平均的板塊累計收益可作為輪動篩選器進一步可疊加估值指標PE/PB與宏觀數據並用 GICS 標準細分板塊。五、性能與工程化更快更穩的四個抓手用足內置緩存。時區等元數據默認緩存在本地可調yf.set_tz_cache_location(path)改位置對行情數據再包一層自定義 TTL 緩存按md5(ticker_period_interval)命名文件超過時長就重新拉取高頻回調場景能省掉大量重複請求。並發批量拉取。少量股票用download(threadsTrue)或yf.Tickers即可更大規模可基於asyncioaiohttp自己組一套用信號量把並發數壓在 5~10失敗的股票收集後重試。存儲分層。批量歷史行情落 Parquet列存、壓縮高、查詢快需要按日期反覆查詢、增量更新的進 SQLiteto_sql/read_sqlindex_colindex保留時間軸極端頻次再考慮 InfluxDB/TimescaleDB 這類時序庫。指標庫常備。布林帶rolling(20)均値 ± 2 倍標準差、MACD12/26 期 EMA 差值再對其取 9 期 EMA 作信號線、KDJ14 期最高最低價歸一化都可以用幾行 pandas 寫出來與上面的數據源銜接後就是完整的技術分析管線。六、選型對比哪種金融數據工具適合你工具核心優勢主要劣勢數據覆蓋易用性價格適用場景yfinance免費、免密鑰、pandas 原生數據質量不穩定、無官方 SLA股票/指數/加密/基金★★★★★免費學習、原型、小型項目pandas-datareader與 pandas 無縫、多數據源雅虎接口不穩、部分源要密鑰股票/指數/宏觀★★★★☆免費部分收費數據科學項目Alpha Vantage數據準確、API 穩定免費版 5 次/分鐘、要密鑰股票/指數/加密/外匯★★★☆☆免費版限額付費 $29.99/月起對質量要求高的商業應用Quandl大量替代數據、學術友好高級數據付費、API 較複雜股票/期貨/經濟/替代數據★★★☆☆基礎免費高級 $30/月起學術研究、專業分析Bloomberg API全品類、實時強、工具專業極貴、需終端、學習曲線陡全品類★★☆☆☆終端約 $24,000/年機構級分析與交易IEX CloudAPI 設計好、文檔完善免費版數據有限、計費複雜股票/指數/加密★★★★☆免費版限額$9/月起創業公司、中小團隊Tiingo含新聞數據、響應快、清洗完善價格偏高、高級功能加價股票/ETF/加密/新聞★★★★☆免費版限額$19/月起新聞情感、量化交易 一句話選型學習和原型選 yfinance商業要穩定性看 Alpha Vantage / IEX Cloud學術研究看 Quandl機構級需求才上 Bloomberg。七、避坑指南高頻問題快問快答Q請求失敗、返回為空怎麼辦加重試按指數退避如 0.3 × 2^attempt 秒重試 3 次仍失敗檢查網絡代理可設yf.config.network.proxy。Qperiod 和 interval 不匹配會報錯嗎不會崩yfinance 會自動調整並發警告——例如 1m 粒度不支持超過 7 天的區間。Q非美股歷史價格對不上分紅/拆股沒調history(repairTrue)或download(..., repairTrue)返回多一列Repaired?標記修復行注意幣種混錯時應看history_metadata[currency]而非info。Q數據有異常值怎麼處理先 ffill 補缺失成交量為 0 視為缺失後用 7 日均値回填再用 IQR 法Q1−1.5×IQR ~ Q31.5×IQR標出異常、interpolate(methodtime)補齊。Q接口哪天又變了定期檢查yfinance版本並升級關鍵鏈路準備備援數據源如 pandas-datareader 或其他需密鑰的商業 API做降級。結語從三行代碼拉到第一份股價到板塊輪動掃描和組合風險測算yfinance 把「數據獲取」這個最耗時的環節壓縮到了幾乎可忽略的程度——它讓你可以把精力真正放在分析本身。建議你先從history(period5y)開始接上自己的一套指標與回測邏輯同時關注項目更新修復策略、緩存與接口適配都在持續進化。上圖是典型的開發分支策略yfinance 作為活躍的開源項目同樣遵循main 發布穩定版本dev 集成新功能feature 分支開發具體能力緊急修復走熱修復分支——這種結構保證了穩定發布與快速迭代的平衡。更多接口細節可參閱 官方文檔 與 高級主題。【免费下载链接】yfinanceDownload market data from Yahoo! Finances API项目地址: https://gitcode.com/GitHub_Trending/yf/yfinance创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门