Python案例如何实现股票数据获取?

wen python案例 5

本文目录导读:

Python案例如何实现股票数据获取?

  1. 使用akshare库(推荐,数据来源丰富)
  2. 使用tushare库(需要注册获取token)
  3. 使用baostock库(免费,数据质量好)
  4. 使用yfinance库(获取美股和港股)
  5. 综合示例:股票数据获取与分析
  6. 安装依赖
  7. 注意事项

我来介绍几种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

注意事项

  1. 数据频率限制:免费API通常有调用频率限制
  2. 数据延迟:非交易时间的数据可能有延迟
  3. 跨市场支持:不同库支持不同市场
  4. 稳定性:建议添加异常处理和重试机制
  5. 合规性:注意遵守各平台的使用条款

选择哪个库取决于你的具体需求:

  • 国内A股:akshare或baostock
  • 美股/港股:yfinance
  • 专业量化:tushare(需要付费获取更多数据)

抱歉,评论功能暂时关闭!