本文目录导读:

- 使用akshare库(推荐,数据来源丰富)
- 使用tushare库(需要注册获取token)
- 使用baostock库(免费,数据质量好)
- 使用yfinance库(获取美股和港股)
- 综合示例:股票数据获取与分析
- 安装依赖
- 注意事项
我来介绍几种Python获取股票数据的常用方法:
使用akshare库(推荐,数据来源丰富)
import akshare as ak
import pandas as pd
# 获取A股实时行情
def get_stock_realtime():
# 获取所有A股实时数据
df = ak.stock_zh_a_spot_em()
return df
# 获取历史数据
def get_stock_history(symbol="000001", start_date="20240101", end_date="20241231"):
# 获取个股历史行情
df = ak.stock_zh_a_hist(symbol=symbol,
period="daily",
start_date=start_date,
end_date=end_date,
adjust="qfq") # qfq:前复权
return df
# 获取板块数据
def get_sector_data():
df = ak.stock_board_industry_name_em()
return df
# 使用示例
if __name__ == "__main__":
# 获取贵州茅台历史数据
stock_data = get_stock_history("600519", "20240101", "20241231")
print(stock_data.head())
# 获取实时行情
realtime = get_stock_realtime()
print(realtime.head())
使用tushare库(需要注册获取token)
import tushare as ts
# 需要先注册获取token
token = "your_token_here"
ts.set_token(token)
pro = ts.pro_api()
def get_tushare_data():
# 获取日线行情
df = pro.daily(ts_code="000001.SZ",
start_date="20240101",
end_date="20241231")
return df
# 获取实时行情
def get_realtime_quote():
df = ts.get_today_ticks("000001")
return df
使用baostock库(免费,数据质量好)
import baostock as bs
import pandas as pd
# 登录系统
lg = bs.login()
def get_baostock_data():
# 获取历史K线数据
rs = bs.query_history_k_data_plus(
"sh.600519", # 贵州茅台
"date,code,open,high,low,close,volume,amount,adjustflag",
start_date='2024-01-01',
end_date='2024-12-31',
frequency="d", # 日线
adjustflag="3" # 不复权
)
# 转换为DataFrame
data_list = []
while rs.error_code == '0' and rs.next():
data_list.append(rs.get_row_data())
df = pd.DataFrame(data_list, columns=rs.fields)
return df
# 退出系统
bs.logout()
使用yfinance库(获取美股和港股)
import yfinance as yf
def get_yahoo_finance():
# 获取美股数据
msft = yf.Ticker("MSFT")
# 获取历史数据
hist = msft.history(period="1y")
# 获取实时信息
info = msft.info
# 获取港股
tencent = yf.Ticker("0700.HK")
tencent_hist = tencent.history(period="1mo")
return hist, info
综合示例:股票数据获取与分析
import akshare as ak
import pandas as pd
import numpy as np
from datetime import datetime, timedelta
class StockDataFetcher:
def __init__(self):
self.data = None
def get_stock_data(self, symbol, days=60):
"""
获取股票数据并添加技术指标
"""
end_date = datetime.now().strftime("%Y%m%d")
start_date = (datetime.now() - timedelta(days=days)).strftime("%Y%m%d")
# 获取数据
df = ak.stock_zh_a_hist(
symbol=symbol,
period="daily",
start_date=start_date,
end_date=end_date,
adjust="qfq"
)
# 数据清洗和重命名
df.columns = ['日期', '开盘', '收盘', '最高', '最低', '成交量', '成交额',
'振幅', '涨跌幅', '涨跌额', '换手率']
df['日期'] = pd.to_datetime(df['日期'])
# 添加技术指标
self._add_technical_indicators(df)
return df
def _add_technical_indicators(self, df):
"""添加技术指标"""
# 移动平均线
df['MA5'] = df['收盘'].rolling(window=5).mean()
df['MA10'] = df['收盘'].rolling(window=10).mean()
df['MA20'] = df['收盘'].rolling(window=20).mean()
# 布林带
df['20标准差'] = df['收盘'].rolling(window=20).std()
df['上轨'] = df['MA20'] + 2 * df['20标准差']
df['下轨'] = df['MA20'] - 2 * df['20标准差']
# RSI指标
delta = df['收盘'].diff()
gain = (delta.where(delta > 0, 0)).rolling(window=14).mean()
loss = (-delta.where(delta < 0, 0)).rolling(window=14).mean()
rs = gain / loss
df['RSI'] = 100 - (100 / (1 + rs))
return df
# 使用示例
def main():
fetcher = StockDataFetcher()
# 获取股票数据
stock_code = "000001" # 平安银行
data = fetcher.get_stock_data(stock_code, days=100)
print(f"股票代码: {stock_code}")
print("最新数据:")
print(data.tail())
# 简单分析
latest = data.iloc[-1]
print(f"\n最新收盘价: {latest['收盘']:.2f}")
print(f"涨幅: {latest['涨跌幅']:.2f}%")
print(f"RSI指标: {latest['RSI']:.2f}")
if __name__ == "__main__":
main()
安装依赖
pip install akshare tushare baostock yfinance pandas numpy
注意事项
- 数据频率限制:免费API通常有调用频率限制
- 数据延迟:非交易时间的数据可能有延迟
- 跨市场支持:不同库支持不同市场
- 稳定性:建议添加异常处理和重试机制
- 合规性:注意遵守各平台的使用条款
选择哪个库取决于你的具体需求:
- 国内A股:akshare或baostock
- 美股/港股:yfinance
- 专业量化:tushare(需要付费获取更多数据)
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播