聚宽平台实际上提供了两种查询数据的方法,第一种是线上在聚宽平台可以使用的API:jqdata,另外一种则是本地的接口:JQData,是的,你没有看错,只是大小写的不同,搞得一开始我以为完全是同一种。jqdata可以线上通过import jqdata
来引入数据接口,本地的JQData则是通过import jqdatasdk
来引入。两种数据源唯一的不同就是jqdata对接了聚源数据(一个更高阶的数据源)而JQData没有。本文就来介绍一下聚源数据端口以及其他需要数据库操作的查询方法。
在介绍聚源接口之前,我们有必要了解一下SQLAlchemy,聚源数据的提取就是基于SQLAlchemy进行的。
SQL,即*(Structured Query Language 结构化查询语言)*是一种声明式的语言,是关系型数据库的通用语言。SQL查询是客户端发送给数据库服务器的文本字符串,指明需要执行的具体操作。SQL十分有用,是一个数据分析师必备的技能,关于SQL以及数据库相关的知识要深究的话其实很多,几本书都写不完,在此我不做深入介绍,以后有时间我会写相关的文章总结。
回到SQLAlchemy。对于所有的关系型数据库而言,SQL是不完全相同的,每一种是数据库实现的是包含自己特征和哲学的方言。许多函数库用于消除它们之间的差异,其中最著名的跨数据库的Python库是SQLAlchemy。
以下层级是可以使用SQLAlchemy的:
在创建会话后,可以通过SQLAlchemy的query对象来进行查询:q = session.query(SomeMappedClass)
其中聚宽涉及到SQLAlchemy的基本的查询方式有:
以下两条语句都会引入数据库的查询操作
from jqdata import jy
from jqdata import finance
涉及使用数据库的操作有:
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)
date和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')
报告期财务数据是上市公司定期公告中按照报告期统计的财务数据,同样使用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:收录了财务报表补充科目。