Quant | JQData使用API简单梳理(二)

聚宽平台实际上提供了两种查询数据的方法,第一种是线上在聚宽平台可以使用的API:jqdata,另外一种则是本地的接口:JQData,是的,你没有看错,只是大小写的不同,搞得一开始我以为完全是同一种。jqdata可以线上通过import jqdata来引入数据接口,本地的JQData则是通过import jqdatasdk来引入。两种数据源唯一的不同就是jqdata对接了聚源数据(一个更高阶的数据源)而JQData没有。本文就来介绍一下聚源数据端口以及其他需要数据库操作的查询方法。


Quant | JQData使用API简单梳理(二)_第1张图片

文章目录

      • SQLAlchemy
      • 聚源数据的引入
      • 获取融资融券汇总数据
      • 获取股票资金流向数据
      • 获取龙虎榜数据
      • 上市公司分红送股(除权除息)数据
      • 沪深市场每日成交概况
      • 市场通
      • 上市公司概况
        • 上市公司员工情况
        • 上市公司基本信息
        • 上市公司状态变动
        • 股票上市信息
        • 股票简称变更情况
        • 公司管理人员任职情况
      • 上市公司股东和股本信息
        • 十大股东
        • 十大流通股东
        • 股东股份质押
        • 股东股份冻结
        • 股东户数
        • 大股东增减持
        • 受限股份上市公告事情
        • 受限股份实际解禁日期
        • 上市公司股本变动
      • 获取单季度/年度财务数据
        • 调用方法
        • 示例
        • 财务数据的列表如下
      • 获取报告期财务数据
        • 业绩预告
        • 合并利润表
        • 母公司利润表
        • 合并现金流量表
        • 母公司现金流量表
        • 合并资产负债表
        • 母公司资产负债表
        • 财务报表补充科目

SQLAlchemy

在介绍聚源接口之前,我们有必要了解一下SQLAlchemy,聚源数据的提取就是基于SQLAlchemy进行的。

SQL,即*(Structured Query Language 结构化查询语言)*是一种声明式的语言,是关系型数据库的通用语言。SQL查询是客户端发送给数据库服务器的文本字符串,指明需要执行的具体操作。SQL十分有用,是一个数据分析师必备的技能,关于SQL以及数据库相关的知识要深究的话其实很多,几本书都写不完,在此我不做深入介绍,以后有时间我会写相关的文章总结。

回到SQLAlchemy。对于所有的关系型数据库而言,SQL是不完全相同的,每一种是数据库实现的是包含自己特征和哲学的方言。许多函数库用于消除它们之间的差异,其中最著名的跨数据库的Python库是SQLAlchemy。

以下层级是可以使用SQLAlchemy的:

  • 底层负责处理数据库连接池,执行SQL命令以及返回结果。
  • 往上是SQL表达式语言,更像Python的SQL生成器
  • 较高级的是对象关系模型(ORM),使用SQL表达式语言,将应用程序代码和关系型数据结构结合起来。

在创建会话后,可以通过SQLAlchemy的query对象来进行查询:q = session.query(SomeMappedClass)

其中聚宽涉及到SQLAlchemy的基本的查询方式有:

  • query 填写需要查询的对象,可以是整张表,也可以是表中的多个字段或计算出的结果
  • filter 填写过滤条件,多个过滤条件可以用逗号隔开,或者用and*,or*这样的语法
  • order_by 填写排序条件
    1. .desc() 降序排列
    2. .asc() 升序排列
  • limit 限制返回的个数
  • order_by 排序条件

聚源数据的引入

以下两条语句都会引入数据库的查询操作

  • from jqdata import jy
  • from jqdata import finance

涉及使用数据库的操作有:

  • get_fundamentals (股票单季度财务数据)
  • finance (股票数据,基金数据等)
  • opt (期权数据)
  • macro (宏观数据)
  • jy (聚源数据)

获取融资融券汇总数据

finance.run_query(
    query(finance.STK_MT_TOTAL)
    .filter(finance.STK_MT_TOTAL.date=='2019-05-23')
    .limit(n))

数据表finance.STK_MT_TOTAL:收录了融资融券汇总数据

表结构和字段信息如下:

名称 类型 描述
date date 交易日期
exchange_code varchar(12) 交易市场
fin_value decimal(20,2) 融资余额(元)
fin_buy_value decimal(20,2) 融资买入额(元)
sec_volume int 融券余量(股)
sec_value decimal(20,2) 融券余量金额(元)
sec_sell_volume int 融券卖出量(股)
fin_sec_value decimal(20,2) 融资融券余额(元)

获取股票资金流向数据

get_money_flow(security_list, start_date=None, end_date=None, fields=None, count=None)

补充:获取一只或者多只股票在一个时间段内的资金流向数据

返回一个DataFrame对象,含有字段有

字段名 含义
date 日期
sec_code 股票代码
change_pct 涨跌幅(%)
net_amount_main 主力净额(万)
net_pct_main 主力净占比(%)
net_amount_xl 超大单净额(万)
net_pct_xl 超大单净占比(%)
net_amount_l 大单净额(万)
net_pct_l 大单净占比(%)
net_amount_m 中单净额(万)
net_pct_m 中单净占比(%)
net_amount_s 小单净额(万)
net_pct_s 小单净占比(%)

接下来将直接列出相应的表单,query操作基本与上相同,因此将略去,字段也将略去,可至官方API文档Ctrl+F查找相应内容

获取龙虎榜数据

get_billboard_list(stock_list, start_date, end_date, count)

补充:获取指定日期区间内的龙虎榜数据

返回一个DataFrame对象,含有字段有

pandas.DataFrame, 各 column 的含义如下:

code: 股票代码

day: 日期

direction: ALL 表示『汇总』,SELL 表示『卖』,BUY 表示『买』

abnormal_code: 异常波动类型

abnormal_name: 异常波动名称

sales_depart_name: 营业部名称

rank: 0 表示汇总, 1~5 对应买入金额或卖出金额排名第一到第五

buy_value:买入金额

buy_rate:买入金额占比(买入金额/市场总成交额)

sell_value:卖出金额

sell_rate:卖出金额占比(卖出金额/市场总成交额)

net_value:净额(买入金额 - 卖出金额)

amount:市场总成交额

上市公司分红送股(除权除息)数据

finance.run_query(
  query(finance.STK_XR_XD)
    .filter(finance.STK_XR_XD.code==code)
    .order_by(finance.STK_XR_XD.report_date)
    .limit(n))

finance.STK_XR_XD:代表除权除息数据表,记录由上市公司年报、中报、一季报、三季报统计出的分红转增情况。

表结构和字段信息太长,在此略,可去官网查看API

沪深市场每日成交概况

finance.run_query(
  query(finance.STK_EXCHANGE_TRADE_INFO)
    .filter(finance.STK_EXCHANGE_TRADE_INFO.exchange_code==exchange_code)
    .limit(n)

finance.STK_EXCHANGE_TRADE_INFO:代表沪深市场每日成交概况表,记录沪深两市股票交易的成交情况,包括市值、成交量,市盈率等情况。

市场通

finance.run_query(
  query(finance.STK_AH_PRICE_COMP)
  .filter(finance.STK_AH_PRICE_COMP.a_code==a_code)
    .order_by(finance.STK_AH_PRICE_COMP.day)
    .limit(n))

finance.STK_AH_PRICE_COMP:代表了A股和H股上市的股票的价格比对表,收录了同时在A股和H股上市的股票的价格对比情况,包括收盘价,涨跌幅等。

上市公司概况

上市公司员工情况

finance.run_query(
    query(finance.STK_EMPLOYEE_INFO)
    .filter(finance.STK_EMPLOYEE_INFO.code==code)
    .limit(n))

finance.STK_EMPLOYEE_INFO:代表上市公司员工情况表,收录了上市公司在公告中公布的员工情况。

上市公司基本信息

finance.run_query(
	query(finance.STK_COMPANY_INFO)
	.filter(finance.STK_COMPANY_INFO.code==code)
	.limit(n))

finance.STK_COMPANY_INFO:代表上市公司基本信息表,收录了上市公司最新公布的基本信息。

上市公司状态变动

finance.STK_STATUS_CHANGE:代表上市公司状态变动表,收录了上市公司已发行未上市、正常上市、实行ST、*ST、暂停上市、终止上市的变动情况等。

股票上市信息

finance.STK_LIST:代表股票上市信息表,收录了沪深A股的上市信息,包含上市日期、交易所、发行价格、初始上市数量等。

股票简称变更情况

finance.STK_NAME_HISTORY:代表股票简称变更表,收录了在A股市场和B股市场上市的股票简称的变更情况。

公司管理人员任职情况

finance.STK_MANAGEMENT_INFO:代表了公司管理人员任职情况表,收录了上市公司管理人员的任职情况。

上市公司股东和股本信息

十大股东

finance.STK_SHAREHOLDER_TOP10:代表上市公司十大股东表,收录了上市公司前十大股东的持股情况,包括持股数量,所持股份性质,变动原因等。

十大流通股东

finance.STK_SHAREHOLDER_FLOATING_TOP10:代表上市公司十大流通股东表,收录了上市公司前十大流通股东的持股情况,包括持股数量,所持股份性质,变动原因等。

股东股份质押

finance.STK_SHARES_PLEDGE:代表上市公司股东股份质押表,收录了上市公司股东股份的质押情况。

股东股份冻结

finance.STK_SHARES_FROZEN:代表上市公司股东股份冻结表,收录了上市公司股东股份的冻结情况。

股东户数

finance.STK_HOLDER_NUM:代表上市公司股东户数表,收录了上市公司全部股东户数,A股股东、B股股东、H股股东的持股户数情况。

大股东增减持

finance.STK_SHAREHOLDERS_SHARE_CHANGE:代表上市公司大股东增减持情况表,收录了大股东的增减持情况。

受限股份上市公告事情

finance.STK_LIMITED_SHARES_LIST:代表受限股份上市公告日期表,收录了上市公司受限股份上市公告和预计解禁的日期。

受限股份实际解禁日期

finance.STK_LIMITED_SHARES_UNLIMIT:代表上市公司受限股份实际解禁表,收录了上市公司受限股份实际解禁的日期信息。

上市公司股本变动

finance.STK_CAPITAL_CHANGE:代表上市公司的股本变动表,收录了上市公司发生上市、增发、配股,转增等时间带来的股本变动情况。

获取单季度/年度财务数据

查询股票的市值数据、资产负债数据、现金流数据、利润数据、财务指标数据

调用方法

get_fundamentals(query_object, date=None, statDate=None)

datestatDate参数只能传入一个:

  • 传入date时, 查询指定日期date所能看到的最近(对市值表来说, 最近一天, 对其他表来说, 最近一个季度)的数据, 我们会查找上市公司在这个日期之前(包括此日期)发布的数据, 不会有未来函数.
  • 传入statDate时, 查询statDate指定的季度或者年份的财务数据

示例

# 查询'000001.XSHE'的所有市值数据, 时间是2015-10-15
q = query(valuation)
	.filter(valuation.code == '000001.XSHE')
df = get_fundamentals(q, '2015-10-15')
# 打印出总市值
log.info(df['market_cap'][0])

# 查询平安银行2014年的年报
q = query(
    income.statDate,
    income.code,
    income.basic_eps,
    cash_flow.goods_sale_and_service_render_cash
).filter(
    income.code == '000001.XSHE',
)
# 选出所有的总市值大于1000亿元, 市盈率小于10, 营业总收入大于200亿元的股票
ret = get_fundamentals(q, statDate='2014')
  df = get_fundamentals(query(
          valuation.code, valuation.market_cap, valuation.pe_ratio, income.total_operating_revenue
      ).filter(
          valuation.market_cap > 1000,
          valuation.pe_ratio < 10,
          income.total_operating_revenue > 2e10
      ).order_by(
          # 按市值降序排列
          valuation.market_cap.desc()
      ).limit(
          # 最多返回100个
          100
      ), date='2015-10-15')

财务数据的列表如下

  • 市值数据 valuation
  • 资产负债数据 balance
  • 现金流数据 cash_flow
  • 利润数据 income
  • 财务指标数据 indicator
  • 银行业专项数据 bank_indicator
  • 券商业专项数据 security_indicator
  • 保险业专项数据 表名: insurance_indicator

获取报告期财务数据

报告期财务数据是上市公司定期公告中按照报告期统计的财务数据,同样使用run_query()方法进行查询。

例如:

finance.run_query(query(finance.STK_FIN_FORCAST).filter(finance.STK_FIN_FORCAST.code==code).limit(n))

业绩预告

finance.STK_FIN_FORCAST:代表上市公司业绩预告表,收录了上市公司的业绩预告信息。

合并利润表

finance.STK_INCOME_STATEMENT:代表上市公司合并利润表,收录了上市公司定期公告中公布的合并利润表数据。

母公司利润表

finance.STK_INCOME_STATEMENT_PARENT:代表上市公司母公司利润表,收录了上市公司母公司的利润信息。

合并现金流量表

finance.STK_CASHFLOW_STATEMENT:代表上市公司合并现金流量表,收录了上市公司定期公告中公布的合并现金流量表数据。

母公司现金流量表

finance.STK_CASHFLOW_STATEMENT_PARENT:代表上市公司母公司现金流量表,收录了上市公司定期公告中公布的母公司现金流量表数据。

合并资产负债表

finance.STK_BALANCE_SHEET:代表上市公司合并资产负债表信息,收录了上市公司定期公告中公布的合并资产负债表数据。

母公司资产负债表

finance.STK_BALANCE_SHEET_PARENT:代表上市公司母公司资产负债表信息,收录了上市公司定期公告中公布的母公司资产负债表数据。

财务报表补充科目

sup.STK_FINANCE_SUPPLEMENT:收录了财务报表补充科目。


欢迎关注我的微信公众号:DatCat,定期分享python,数据科学和量化金融相关知识Quant | JQData使用API简单梳理(二)_第2张图片

你可能感兴趣的:(DatCat-量化投资)