Python实时股票行情数据获取库详解
1. Tushare Pro
import tushare as ts
ts.set_token('your_token')
pro = ts.pro_api()
# 获取实时行情
df = ts.get_realtime_quotes('000001') # 上证指数
2. baostock
import baostock as bs
import pandas as pd
# 登陆系统
lg = bs.login()
# 获取实时数据
rs = bs.query_history_k_data_plus("sh.600000",
"date,time,code,open,high,low,close,volume,amount",
start_date='2024-03-07', frequency="5")
3. yfinance
import yfinance as yf
# 获取实时数据
tsla = yf.Ticker("TSLA")
data = tsla.history(period="1d", interval="1m")
4. akshare
import akshare as ak
# 获取A股实时行情
stock_zh_a_spot_df = ak.stock_zh_a_spot()
5. mplfinance
import mplfinance as mpf
# 绘制K线图
mpf.plot(data, type='candle', volume=True)
主要特点比较
1. Tushare Pro
2. baostock
3. yfinance
4. akshare
使用建议
1. A股数据获取
2. 美股数据获取
3. 数据获取示例代码
# 使用tushare获取实时数据
import tushare as ts
ts.set_token('your_token')
pro = ts.pro_api()
def get_realtime_data(stock_code):
try:
df = ts.get_realtime_quotes(stock_code)
return df[['code', 'name', 'price', 'bid', 'ask', 'volume', 'amount']]
except Exception as e:
print(f"Error getting realtime data: {e}")
return None
# 使用baostock获取历史K线数据
def get_historical_data(stock_code, start_date, end_date):
bs.login()
rs = bs.query_history_k_data_plus(stock_code,
"date,code,open,high,low,close,volume,amount",
start_date=start_date, end_date=end_date,
frequency="d", adjustflag="3")
data_list = []
while (rs.error_code == '0') & rs.next():
data_list.append(rs.get_row_data())
result = pd.DataFrame(data_list, columns=rs.fields)
bs.logout()
return result
# 使用akshare获取股票基本面数据
def get_stock_fundamentals(stock_code):
try:
# 获取市盈率、市净率等指标
pe_df = ak.stock_a_lg_indicator(symbol=stock_code)
# 获取公司基本信息
info_df = ak.stock_individual_info_em(symbol=stock_code)
return pe_df, info_df
except Exception as e:
print(f"Error getting fundamental data: {e}")
return None, None
# 使用yfinance下载美股历史数据并绘制图表
def plot_stock_chart(ticker_symbol, period="1y"):
try:
# 获取股票数据
stock = yf.Ticker(ticker_symbol)
hist = stock.history(period=period)
# 使用mplfinance绘制K线图
mpf.plot(hist,
type='candle',
title=f'{ticker_symbol} Stock Price',
ylabel='Price ($)',
volume=True,
style='charles',
savefig='stock_chart.png')
except Exception as e:
print(f"Error plotting chart: {e}")
# 实际使用示例
if __name__ == "__main__":
# A股实时数据示例
sh_index = get_realtime_data('000001') # 上证指数
print("上证指数实时数据:")
print(sh_index)
# A股历史数据示例
hist_data = get_historical_data("sh.600000", "2024-01-01", "2024-03-07")
print("\n浦发银行历史数据:")
print(hist_data.head())
# 基本面数据示例
pe_data, info_data = get_stock_fundamentals("000001")
print("\n平安银行基本面数据:")
if pe_data is not None:
print(pe_data.head())
# 美股图表示例
plot_stock_chart("AAPL") # 绘制苹果公司股票图表
4. 高级应用场景
数据分析和回测
import pandas as pd
import numpy as np
def calculate_ma(data, window=20):
"""计算移动平均线"""
return data['close'].rolling(window=window).mean()
def simple_strategy(data):
"""简单的均线交易策略"""
data['MA20'] = calculate_ma(data, 20)
data['MA60'] = calculate_ma(data, 60)
# 生成交易信号
data['Signal'] = 0
data.loc[data['MA20'] > data['MA60'], 'Signal'] = 1 # 买入信号
data.loc[data['MA20'] < data['MA60'], 'Signal'] = -1 # 卖出信号
return data
# 使用示例
stock_data = get_historical_data("sh.600000", "2023-01-01", "2024-03-07")
if not stock_data.empty:
stock_data['close'] = stock_data['close'].astype(float)
result = simple_strategy(stock_data)
print("\n策略信号:")
print(result[['date', 'close', 'MA20', 'MA60', 'Signal']].tail())
实时监控预警
import time
from datetime import datetime
def price_alert(stock_code, target_price, check_interval=60):
"""
价格预警监控
:param stock_code: 股票代码
:param target_price: 目标价格
:param check_interval: 检查间隔(秒)
"""
while True:
try:
current_data = get_realtime_data(stock_code)
if current_data is not None:
current_price = float(current_data['price'].iloc[0])
print(f"当前时间: {datetime.now()}")
print(f"当前价格: {current_price}")
if current_price >= target_price:
print(f"警报!{stock_code} 已达到目标价格 {target_price}")
break
time.sleep(check_interval)
except Exception as e:
print(f"监控出错: {e}")
break
# 使用示例
# price_alert('000001', 16.5) # 监控平安银行价格
5. 注意事项与最佳实践
- 数据获取频率限制
- 错误处理
- 数据存储
- 性能优化
6. 官方文档和资源链接
Tushare Pro
baostock
yfinance
akshare
mplfinance
7. 安装指南
所有库都可以通过pip安装:
# Tushare Pro
pip install tushare
# baostock
pip install baostock
# yfinance
pip install yfinance
# akshare
pip install akshare
# mplfinance
pip install mplfinance
对于国内用户,建议使用镜像源加速安装:
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple 包名
8. 社区支持
作者:老大白菜