get_fundamentals - 查询财务数据
getfundamentals
(_query, entry_date=None, interval='1d', report_quarter=False)- 获取历史财务数据表格。目前支持中国市场超过400个指标,具体请参考 财务数据文档 。目前仅支持中国市场。需要注意,一次查询过多股票的财务数据会导致系统运行缓慢。
参数:
- query (SQLAlchemyQueryObject) – SQLAlchmey的Query对象。其中可在’query’内填写需要查询的指标,’filter’内填写数据过滤条件。具体可参考 sqlalchemy’s query documentation 学习使用更多的方便的查询语句。从数据科学家的观点来看,sqlalchemy的使用比sql更加简单和强大
- entry_date (str | datetime.date | datetime.datetime | pandas.Timestamp) – 查询财务数据的基准日期,应早于策略当前日期。默认为策略当前日期前一天。
- interval (str) – 查询财务数据的间隔,默认为‘1d’。例如,填写‘5y’,则代表从entry_date开始(包括entry_date)回溯5年,返回数据时间以年为间隔。’d’ - 天,’m’ - 月, ‘q’ - 季,’y’ - 年
report_quarter (bool) – 是否显示报告期,默认为False,不显示。’Q1’ - 一季报,’Q2’ - 半年报,’Q3’ - 三季报,’Q4’ - 年报返回:pandas.DataPanel 如果查询结果为空,返回空 pandas.DataFrame 如果给定间隔为1d, 1m, 1q, 1y,返回 pandas.DataFrameExample:
获取财务数据中的pe_ration和revenue指标:
- # 并且通过filter过滤掉得到符合一定范围的pe_ration的结果
- # 最后只拿到按照降序排序之后的前10个
- fundamental_df = get_fundamentals(
- query(
- fundamentals.income_statement.revenue, fundamentals.eod_derivative_indicator.pe_ratio
- ).filter(
- fundamentals.eod_derivative_indicator.pe_ratio > 25
- ).filter(
- fundamentals.eod_derivative_indicator.pe_ratio < 30
- ).order_by(
- fundamentals.income_statement.revenue.desc()
- ).limit(
- 10
- )
- )
- context.stocks = fundamental_df.columns.values
- update_universe(context.stocks)
- 获取某些指定股票的财务数据:
- def init(context):
- context.stocks = industry('A01')
- logger.info("industry stocks: " + str(context.stocks))
- #每个表都有一个stockcode在用来方便通过股票代码来过滤掉查询的数据,比如次数是只查询'A01'板块的revenue 和 pe_ratio
- context.fundamental_df = get_fundamentals(
- query(
- fundamentals.income_statement.revenue, fundamentals.eod_derivative_indicator.pe_ratio
- ).filter(
- fundamentals.eod_derivative_indicator.pe_ratio > 5
- ).filter(
- fundamentals.eod_derivative_indicator.pe_ratio < 300
- ).filter(
- fundamentals.income_statement.stockcode.in_(context.stocks)
- )
- )
- logger.info(context.fundamental_df)
- update_universe(context.fundamental_df.columns.values)