qstock 一个不错的免费数据获取开源项目

好的,这是一份关于 qstock 库的详细中文教程。qstock 是一个专注于 A 股的 Python 量化数据获取和可视化库,旨在简化数据流程,方便进行量化分析。


qstock 详细中文教程

目录

  1. 引言:什么是 qstock?
  2. 主要特点
  3. 安装
  4. 核心功能与使用
  5. 常用代码示例
  6. 注意事项与最佳实践
  7. 数据源说明
  8. 资源链接

1. 引言:什么是 qstock?

qstock 是一个由国内开发者维护的 Python 库,专注于中国 A 股市场。它的主要目标是提供一个简洁、易用的接口来获取股票、指数、基金等的行情数据、基本面数据(部分),并内置了强大的可视化功能(基于 Plotly),可以直接绘制交互式的 K 线图和其他图表。它通常整合了多个免费的数据源(如新浪财经、东方财富、腾讯财经等),为用户屏蔽了底层数据获取的复杂性。

主要面向用户:

  • 量化交易爱好者
  • 金融数据分析师
  • 需要快速获取和可视化 A 股数据的开发者或研究人员

2. 主要特点

  • 专注 A 股: 主要面向中国股票市场。
  • 易于使用: API 设计简洁直观,易于上手。
  • 数据获取: 支持获取历史行情(日/周/月线)、实时行情、股票列表、指数列表等。
  • 内置可视化: 使用 Plotly 作为后端,可以方便地绘制交互式 K 线图,并支持添加常用技术指标(MA, MACD, RSI等)。
  • 数据格式: 返回的数据通常是 Pandas DataFrame 格式,方便后续处理和分析。
  • 整合多数据源: 尝试从多个公开渠道获取数据,提高数据的可用性。

3. 安装

通过 pip 可以方便地安装 qstock

pip install qstock -U --no-cache-dir
  • -U: 表示如果已安装则升级到最新版本。
  • --no-cache-dir: 避免使用缓存,确保安装的是最新代码(有时 Pypi 缓存会导致问题)。

依赖: qstock 会自动安装其依赖库,主要包括 pandas, plotly, requests, lxml 等。

4. 核心功能与使用

首先,导入 qstock 库,通常简写为 qs

import qstock as qs
import pandas as pd # 通常也会用到 pandas
4.1 获取股票/指数列表
  • 获取 A 股列表:

    stock_list = qs.stock_list()
    print("A 股列表 (部分):")
    print(stock_list.head())
    # 输出通常包含代码(code)、名称(name)、所属市场(market)等列
    
  • 获取指数列表:

    index_list = qs.index_list()
    print("\n指数列表 (部分):")
    print(index_list.head())
    
  • 获取其他列表 (基金、港股、美股等,取决于库实现):

    # 检查库是否支持,例如:
    # fund_list = qs.fund_list()
    # hk_stock_list = qs.hk_stock_list()
    
4.2 获取历史行情数据 (K线)

这是最常用的功能之一,通常使用 qs.get_price() 函数。

# 获取单只股票日线数据 (默认前复权)
# code: 股票代码,格式通常是 '股票代码.市场' (如 '600000.SH') 或直接 '600000' (库会自动判断)
# freq: 频率, 'D' (日线), 'W' (周线), 'M' (月线), '5m', '15m', '30m', '60m' (分钟线,部分数据源支持)
# start_date: 开始日期 'YYYY-MM-DD'
# end_date: 结束日期 'YYYY-MM-DD'
# fq: 复权类型, 'qfq' (前复权), 'hfq' (后复权), None (不复权)

# 获取浦发银行 (600000) 2023年的日线数据 (前复权)
code = '600000'
start = '2023-01-01'
end = '2023-12-31'

df_daily = qs.get_price(code, start_date=start, end_date=end, freq='D', fq='qfq')
print(f"\n{code} {start}{end} 日线数据 (前复权, 部分):")
print(df_daily.head())
print(df_daily.tail())

# 获取指数数据,例如上证指数 (000001 或 sh)
sh_index = qs.get_price('sh', start_date=start, end_date=end, freq='D')
print("\n上证指数 2023年日线数据 (部分):")
print(sh_index.head())

# 获取周线数据
df_weekly = qs.get_price(code, start_date='2022-01-01', end_date=end, freq='W')
print(f"\n{code} 周线数据 (部分):")
print(df_weekly.head())

返回的 DataFrame 通常包含以下列:

  • date 或 索引: 日期
  • open: 开盘价
  • close: 收盘价
  • high: 最高价
  • low: 最低价
  • volume: 成交量
  • amount: 成交额 (有时)
  • turnoverturn: 换手率 (有时)
4.3 获取实时行情数据

qstock 通常提供获取当前最新行情快照的功能。

  • 获取单只或多只股票的实时行情:
    # 获取单只股票实时行情
    realtime_quote = qs.realtime_data('600519') # 贵州茅台
    print("\n贵州茅台 (600519) 实时行情:")
    print(realtime_quote)
    
    # 获取多只股票实时行情
    codes = ['600000', '000001', '300750'] # 浦发银行, 平安银行, 宁德时代
    realtime_quotes_multi = qs.realtime_data(codes)
    print("\n多只股票实时行情:")
    print(realtime_quotes_multi)
    
    返回的 DataFrame 通常包含:代码(code)、名称(name)、当前价(price)、涨跌幅(change_pct)、成交量(volume)、成交额(amount)、最高(high)、最低(low)、开盘(open)、昨收(prev_close) 等字段。
4.4 数据可视化 (K线图)

qstock 的强大之处在于其内置的可视化功能,使用 qs.plot_k()

# 绘制单只股票的 K 线图
# code: 股票代码
# data: 可选,如果已获取 DataFrame,可以直接传入,否则函数会内部调用 get_price
# start_date, end_date: 如果不传入 data,则需要指定时间范围
# title: 图表标题
# indicators: 要添加的技术指标列表,如 ['MA', 'MACD', 'RSI']
# mav: 移动平均线的周期列表,如 [5, 10, 20]

# 直接根据代码绘制 (内部获取数据)
qs.plot_k('600000', start_date='2023-01-01', end_date='2023-12-31',
          title='浦发银行 (600000) 日K线图 (2023)',
          indicators=['MA', 'MACD'], mav=[5, 10, 20])

# 先获取数据,再绘制 (推荐,更灵活)
df_maotai = qs.get_price('600519', start_date='2023-06-01', end_date='2023-12-31')
qs.plot_k(data=df_maotai, code='600519', # code 参数主要用于图例显示
          title='贵州茅台 (600519) 日K线图 (2023下半年)',
          indicators=['MACD', 'RSI'], mav=[10, 30])

# 绘制指数 K 线图
sh_index_data = qs.get_price('sh', start_date='2023-01-01', end_date='2023-12-31')
qs.plot_k(data=sh_index_data, code='sh', title='上证指数 (2023)', indicators=['MA'], mav=[20, 60, 120])

plot_k 会生成一个交互式的 Plotly 图表,通常会直接在 Jupyter Notebook 或浏览器中显示。你可以缩放、平移、查看具体数值等。

4.5 计算技术指标

qstock 可能内置了一些常用指标的计算,通常在 get_priceplot_k 中直接使用。如果需要更复杂的指标或自定义计算,可以利用返回的 Pandas DataFrame 结合 TA-Libpandas-ta 等库。

  • 通过 get_price 获取带指标的数据 (部分版本/数据源可能支持):

    # 尝试在获取数据时直接计算 MA (具体参数看文档或尝试)
    # 注意:这个功能不一定所有版本的 qstock 或其依赖的数据接口都支持
    # df_with_ma = qs.get_price('600000', start_date=start, end_date=end, indicators=['MA'], mav=[5, 10])
    # print(df_with_ma.head())
    
  • 使用 pandas-ta 计算指标 (更通用的方法):

    # 如果未安装 pandas-ta: pip install pandas-ta
    import pandas_ta as ta
    
    # 获取数据
    df = qs.get_price('000001', start_date='2023-01-01', end_date='2023-12-31') # 平安银行
    
    # 计算 SMA (简单移动平均)
    df.ta.sma(length=10, append=True) # 计算10日SMA并添加到 DataFrame,列名为 SMA_10
    df.ta.sma(length=20, append=True) # 计算20日SMA并添加到 DataFrame,列名为 SMA_20
    
    # 计算 MACD
    df.ta.macd(append=True) # 计算默认参数的 MACD,添加 MACD_12_26_9, MACDh_12_26_9, MACDs_12_26_9 列
    
    # 计算 RSI
    df.ta.rsi(append=True) # 计算默认14日 RSI,添加 RSI_14 列
    
    print("\n平安银行数据 + TA 指标:")
    print(df.tail())
    
    # 你可以将计算好指标的 DataFrame 传递给 qs.plot_k()
    # 注意:plot_k 可能无法自动识别 pandas-ta 添加的列作为指标绘图,
    # 但 K 线本身会绘制,你可能需要用 Plotly 或其他库自行绘制指标线。
    # 或者,直接在 plot_k 中使用它内置支持的指标 ['MA', 'MACD', 'RSI'] 等。
    qs.plot_k(data=df.iloc[-100:], code='000001', title='平安银行 K线 + 手动计算的指标 (部分)',
              indicators=['MA'], mav=[10, 20]) # plot_k 仍按其内置方式画 MA
    
4.6 获取其他数据

qstock 的不同版本或其依赖的数据源可能还支持获取其他类型的数据,例如:

  • 龙虎榜数据: qs.top_list() 或类似函数。
  • 行业分类数据: qs.industry_list(), qs.get_industry()
  • 概念题材数据: qs.concept_list(), qs.get_concept()
  • 基本面数据: 如 qs.get_fundamentals() (可能需要特定数据源支持,如 Tushare,可能需要 token)。
  • 新闻公告: qs.get_news()

使用这些功能前,建议查阅 qstock 的最新文档或使用 help(qs)dir(qs) 查看可用的函数。

5. 常用代码示例

示例1:获取单只股票日线数据并绘制K线图
import qstock as qs

# 获取宁德时代 (300750) 2023年至今的数据
code = '300750'
df_catl = qs.get_price(code, start_date='2023-01-01') # end_date 默认为今天

# 绘制 K 线图,带 MA(5, 10, 20, 60) 和 MACD 指标
qs.plot_k(data=df_catl, code=code, title=f'{code} - 宁德时代 日K线图',
          indicators=['MA', 'MACD'], mav=[5, 10, 20, 60])
示例2:获取多只股票收盘价并比较
import qstock as qs
import pandas as pd
import plotly.express as px # 使用 plotly express 绘图

codes = ['600519', '000858', '600809'] # 茅台, 五粮液, 山西汾酒
start = '2023-01-01'

# 创建一个空的 DataFrame 来存储收盘价
close_prices = pd.DataFrame()

# 循环获取每只股票的数据
for code in codes:
    try:
        df = qs.get_price(code, start_date=start, fq='qfq') # 使用前复权数据
        if not df.empty:
            # 获取股票名称用于图例 (假设实时数据接口可用)
            stock_info = qs.realtime_data(code)
            stock_name = stock_info['name'].iloc[0] if not stock_info.empty else code
            close_prices[f'{stock_name}_{code}'] = df['close']
        else:
            print(f"Warning: No data retrieved for {code}")
    except Exception as e:
        print(f"Error retrieving data for {code}: {e}")

# 归一化处理 (将起点设为1,方便比较相对涨跌幅)
normalized_prices = close_prices / close_prices.iloc[0]

# 使用 Plotly Express 绘制线图
fig = px.line(normalized_prices, title=f'白酒股走势比较 (自 {start} 起, 归一化)')
fig.show()
示例3:获取指数数据并添加移动平均线
import qstock as qs

# 获取创业板指数 (399006 或 cyb) 2022年至今数据
index_code = 'cyb'
start_date = '2022-01-01'
df_cyb = qs.get_price(index_code, start_date=start_date)

# 绘制 K 线图,包含 20 日和 60 日均线
qs.plot_k(data=df_cyb, code=index_code, title='创业板指数 K 线图',
          indicators=['MA'], mav=[20, 60])
示例4:获取实时行情快照
import qstock as qs
import time

codes_to_watch = ['sh', 'sz', 'cyb', '601318', '000002'] # 上证, 深证, 创业板, 中国平安, 万科A

print("实时行情快照:")
try:
    realtime_df = qs.realtime_data(codes_to_watch)
    print(realtime_df[['code', 'name', 'price', 'change_pct', 'volume', 'amount']])
except Exception as e:
    print(f"获取实时行情失败: {e}")

# 可以结合循环实现简单监控
# while True:
#     try:
#         rt_data = qs.realtime_data(codes_to_watch[3:]) # 只看个股
#         print("\n--- 更新 ---")
#         print(rt_data[['name', 'price', 'change_pct']])
#         time.sleep(10) # 每10秒刷新一次
#     except KeyboardInterrupt:
#         print("停止监控.")
#         break
#     except Exception as e:
#         print(f"获取失败: {e}")
#         time.sleep(5)

6. 注意事项与最佳实践

  • 股票代码格式: 留意 qstock 接受的代码格式,通常是 xxxxxx 或带市场后缀如 xxxxxx.SH / xxxxxx.SZ。指数代码可能用简称如 sh, sz, cyb 或官方代码 000001, 399001, 399006
  • 数据频率与时间范围: 获取分钟线数据时,时间跨度不宜过长,否则可能请求失败或数据量过大。日线、周线、月线数据则可以获取较长时间范围。
  • 复权类型: 分析个股时,通常使用前复权 (qfq) 数据来消除分红送股对价格连续性的影响。指数本身不存在复权问题。
  • 数据更新: 实时行情有一定延迟(通常几秒到几十秒)。历史日线数据通常在收盘后更新。
  • 网络问题: 数据获取依赖网络连接和数据源服务器状态,有时可能会因网络波动或数据源限制导致获取失败。建议添加适当的错误处理 (try-except)。
  • API 变更: 开源库的 API 可能会随着版本更新而变化。如果遇到问题,检查 qstock 的官方文档或 GitHub 仓库是否有更新说明。
  • 数据量限制: 频繁大量请求数据可能会触发数据源的访问频率限制。合理安排请求次数和间隔。
  • 数据准确性: 免费数据源的数据质量可能不如付费数据源,偶尔可能出现数据错误或缺失,使用时需注意甄别。

7. 数据源说明

qstock 通常聚合了以下一个或多个公开免费的数据源:

  • 新浪财经 (Sina Finance): 提供实时行情、部分历史数据。
  • 东方财富 (East Money): 提供实时行情、历史数据、龙虎榜、基本面等。
  • 腾讯财经 (Tencent Finance): 提供实时行情、历史数据。
  • 网易财经 (NetEase Finance): 提供历史数据。
  • 雪球 (Xueqiu): 提供实时行情等。

qstock 库内部会处理这些数据源的选择和数据清洗。用户通常不需要关心具体是从哪个源获取的,除非遇到特定数据源的问题。

8. 资源链接

  • PyPI 页面: https://pypi.org/project/qstock/ (可以查看最新版本和基本信息)
  • GitHub 仓库: (请在 PyPI 页面或通过搜索引擎查找 qstock 的 GitHub 仓库地址,通常包含更详细的文档、示例和问题反馈区)

希望这份详细的 qstock 教程能帮助你快速上手并利用它进行 A 股数据的获取和分析!在使用过程中,结合官方文档和实际尝试是最好的学习方式。

# 简介 qstock由“Python金融量化”公众号开发,试图打造成个人量化投研分析开源库,目前包括数据获取(data)、可视化(plot)、选股(stock)和量化回测(backtest)四个模块。其中数据模块(data)数据来源于东方财富网、同花顺、新浪财经等网上公开数据qstock致力于为用户提供更加简洁和规整化的金融市场数据接口,其中可视化模块为用户提供基于web的交互图形简单操作接口;选股模块提供了同花顺的技术选股和公众号策略选股,包括RPS、MM趋势、财务指标、资金流模型等,回测模块为大家提供向量化(基于pandas)和基于事件驱动的基本框架和模型。 读者直接在cmd或anaconda prompt上输入“pip install qstock ”进行安装,或输入“pip install -upgrade qstock”进行更新。 qstock免费开源金融量化库,已在pypi官网和GitHub上发布,更新至1.3.5版本,添加了问财的数据访问功能,通过qstock.wencai('选股条件')调用。使用“pip install qstock ”进行安装,通过’pip install –upgrade qstock’进行更新。目前部分策略选股和策略回测功能仅供知识星球会员使用,会员可在知识星球置顶帖子上获取 qstock 的离线安装包。 关于 qstock 更详细的使用方法,请参考微信公众号Python金融量化 qstock 专题系列文章: 【qstock开源了】数据篇之行情交易数据qstock数据篇】行业概念板块与资金流 【qstock量化】数据篇之股票基本面数据qstock量化】数据篇之宏观指标和财经新闻文本 【qstock量化】动态交互数据可视化 【qstock量化】技术形态与概念热点选股池 【手把手教你】使用qstock实现量化策略选股 【手把手教你】使用qstock进行量化回测 基于qstock的量化复盘与自动盯盘 下面为大家介绍qstock各模块的具体调用方式和应用举例。 ```python #导入qstock模块 import qstock as qs ``` # 数据模块 # 行情交易数据接口 ## 实时行情数据 获取指定市场所有标的或单个或多个证券最新行情指标 realtime_data(market='沪深A', code=None): - market表示行情名称或列表,默认'沪深A股', '沪深京A':沪深京A股市场行情; '沪深A':沪深A股市场行情;'沪A':沪市A股市场行情 '深A':深市A股市场行情;北A :北证A股市场行情;'可转债':沪深可转债市场行情; '期货':期货市场行情;'创业板':创业板市场行情;'美股':美股市场行情; '港股':港股市场行情;'中概股':中国概念股市场行情;'新股':沪深新股市场行情; '科创板':科创板市场行情;'沪股通' 沪股通市场行情;'深股通':深股通市场行情; '行业板块':行业板块市场行情;'概念板块':概念板块市场行情; '沪深指数':沪深系列指数市场行情;'上证指数':上证系列指数市场行情 '深证指数':深证系列指数市场行情;'ETF' ETF基金市场行情;'LOF' LOF 基金市场行情 - code:输入单个或多个证券的list,不输入参数,默认返回某市场实时指标 如code='中国平安',或code='000001',或code=['中国平安','晓程科技','东方财富'] ### 某市场所有标的最新行情 ```python #获取沪深A股最新行情指标 df=qs.realtime_data() #查看前几行 df.head() ``` ```python #获取期货最新行情指标 df=qs.realtime_data('期货') #查看前几行 df.head() ``` ```python #获 -------- 该资源内项目源码是个人的毕设,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! <项目介绍> 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 --------
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值