Quay lại danh sách bài viết
Hướng dẫn lấy dữ liệu cổ phiếu từ Yahoo Finance bằng Python
30 tháng 11, 2025
•admin
# Hướng dẫn lấy dữ liệu cổ phiếu từ Yahoo Finance bằng Python
Yahoo Finance là một nguồn dữ liệu tài chính phong phú và miễn phí. Với thư viện `yfinance` của Python, chúng ta có thể dễ dàng truy cập và phân tích dữ liệu thị trường. Bài viết này sẽ hướng dẫn bạn cách sử dụng `yfinance` để lấy và xử lý dữ liệu cổ phiếu.
## 1. Cài đặt và thiết lập
### Cài đặt thư viện yfinance
```bash
pip install yfinance pandas numpy matplotlib seaborn
```
### Import các thư viện cần thiết
```python
import yfinance as yf
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from datetime import datetime, timedelta
```
## 2. Lấy dữ liệu cơ bản
### Lấy thông tin cổ phiếu
```python
# Tạo đối tượng Ticker
aapl = yf.Ticker("AAPL")
# Lấy thông tin cơ bản
info = aapl.info
print("Thông tin cơ bản:")
print(f"Tên công ty: {info['longName']}")
print(f"Ngành: {info['industry']}")
print(f"Giá hiện tại: ${info['currentPrice']}")
print(f"Vốn hóa thị trường: ${info['marketCap']:,.2f}")
```

### Lấy dữ liệu lịch sử
```python
# Lấy dữ liệu 1 năm gần nhất
hist = aapl.history(period="1y")
print("\nDữ liệu lịch sử:")
print(hist.head())
# Vẽ biểu đồ giá đóng cửa
plt.figure(figsize=(12, 6))
plt.plot(hist.index, hist['Close'])
plt.title('Giá đóng cửa AAPL trong 1 năm')
plt.xlabel('Ngày')
plt.ylabel('Giá ($)')
plt.grid(True)
plt.show()
```

## 3. Lấy dữ liệu nâng cao
### Lấy dữ liệu nhiều cổ phiếu
```python
# Định nghĩa danh sách cổ phiếu
tickers = ['AAPL', 'MSFT', 'GOOGL', 'AMZN']
# Lấy dữ liệu cho nhiều cổ phiếu
data = pd.DataFrame()
for ticker in tickers:
stock = yf.Ticker(ticker)
hist = stock.history(period='1y')
data[ticker] = hist['Close']
# Tính toán lợi nhuận hàng ngày
returns = data.pct_change()
# Vẽ biểu đồ so sánh
plt.figure(figsize=(12, 6))
for column in data.columns:
plt.plot(data.index, data[column], label=column)
plt.title('So sánh giá đóng cửa')
plt.xlabel('Ngày')
plt.ylabel('Giá ($)')
plt.legend()
plt.grid(True)
plt.show()
```

### Lấy dữ liệu theo khoảng thời gian tùy chỉnh
```python
# Định nghĩa khoảng thời gian
start_date = '2020-01-01'
end_date = '2023-12-31'
# Lấy dữ liệu theo khoảng thời gian
hist = aapl.history(start=start_date, end=end_date)
# Tính toán các chỉ số
hist['Daily_Return'] = hist['Close'].pct_change()
hist['Cumulative_Return'] = (1 + hist['Daily_Return']).cumprod()
# Vẽ biểu đồ lợi nhuận tích lũy
plt.figure(figsize=(12, 6))
plt.plot(hist.index, hist['Cumulative_Return'])
plt.title('Lợi nhuận tích lũy AAPL')
plt.xlabel('Ngày')
plt.ylabel('Lợi nhuận tích lũy')
plt.grid(True)
plt.show()
```

## 4. Phân tích dữ liệu
### Phân tích biến động
```python
# Tính toán các chỉ số thống kê
stats = pd.DataFrame({
'Giá trung bình': hist['Close'].mean(),
'Độ lệch chuẩn': hist['Close'].std(),
'Giá cao nhất': hist['Close'].max(),
'Giá thấp nhất': hist['Close'].min(),
'Biến động trung bình': hist['Daily_Return'].std() * np.sqrt(252)
})
print("\nThống kê cơ bản:")
print(stats)
# Vẽ biểu đồ phân phối lợi nhuận
plt.figure(figsize=(12, 6))
sns.histplot(hist['Daily_Return'].dropna(), kde=True)
plt.title('Phân phối lợi nhuận hàng ngày')
plt.xlabel('Lợi nhuận')
plt.ylabel('Tần suất')
plt.show()
```

### Phân tích tương quan
```python
# Tính toán ma trận tương quan
correlation = returns.corr()
# Vẽ biểu đồ nhiệt
plt.figure(figsize=(10, 8))
sns.heatmap(correlation, annot=True, cmap='coolwarm', center=0)
plt.title('Ma trận tương quan giữa các cổ phiếu')
plt.show()
```

## 5. Lấy dữ liệu bổ sung
### Lấy dữ liệu tài chính
```python
# Lấy báo cáo tài chính
financials = aapl.financials
balance_sheet = aapl.balance_sheet
cash_flow = aapl.cashflow
print("\nBáo cáo tài chính:")
print(financials.head())
# Vẽ biểu đồ doanh thu
plt.figure(figsize=(12, 6))
plt.bar(financials.columns, financials.loc['Total Revenue'])
plt.title('Doanh thu theo quý')
plt.xlabel('Quý')
plt.ylabel('Doanh thu ($)')
plt.xticks(rotation=45)
plt.show()
```

### Lấy dữ liệu cổ tức
```python
# Lấy thông tin cổ tức
dividends = aapl.dividends
# Vẽ biểu đồ cổ tức
plt.figure(figsize=(12, 6))
plt.bar(dividends.index, dividends)
plt.title('Lịch sử cổ tức')
plt.xlabel('Ngày')
plt.ylabel('Cổ tức ($)')
plt.grid(True)
plt.show()
```

## 6. Xử lý dữ liệu thời gian thực
### Lấy dữ liệu realtime
```python
# Lấy dữ liệu realtime
ticker = yf.Ticker("AAPL")
realtime = ticker.history(period="1d", interval="1m")
# Vẽ biểu đồ giá trong ngày
plt.figure(figsize=(12, 6))
plt.plot(realtime.index, realtime['Close'])
plt.title('Giá AAPL trong ngày')
plt.xlabel('Thời gian')
plt.ylabel('Giá ($)')
plt.grid(True)
plt.show()
```

## Kết luận
Thư viện `yfinance` cung cấp một cách đơn giản và hiệu quả để truy cập dữ liệu tài chính từ Yahoo Finance. Với Python, chúng ta có thể:
- Lấy thông tin cơ bản về cổ phiếu
- Truy cập dữ liệu lịch sử
- Phân tích biến động và tương quan
- Xem báo cáo tài chính
- Theo dõi dữ liệu thời gian thực
## Tài liệu tham khảo
- [Yfinance Documentation](https://pypi.org/project/yfinance/)
- [Pandas Documentation](https://pandas.pydata.org/)
- [Matplotlib Documentation](https://matplotlib.org/)
- [Seaborn Documentation](https://seaborn.pydata.org/)
python
finance
yahoo-finance
data-analysis
stock-market
Chia sẻ:
Bài viết liên quan
Top 5 thư viện Python cần biết: Pandas, Numpy, Matplotlib, Yfinance, TA-Lib
Top 5 thư viện Python cần biết: Pandas, Numpy, Matplotlib, Yfinance, TA-Lib Python là một trong những ngôn ngữ lập trình phổ biến nhất hiện nay, đặ...
SQLAlchemy với SQL Server
Cách sử dụng thư viện SQLAlchemy để thao tác cơ sở dữ liệu SQL Server  SQLAlchemy là một t...
Phân tích danh mục đầu tư với Python – Dữ liệu, hiệu suất, phân bổ
Phân tích danh mục đầu tư với Python – Dữ liệu, hiệu suất, phân bổ Phân tích danh mục đầu tư là một phần quan trọng trong quản lý tài chính. Với Py...