返回列表 发布新帖

量化研究--下载全部财务数据教程

24 0

最近在做量化研究,需要使用到全部的财务数据,我看了很多平台,ptrade的数据比较全面,我们怎么样第哦啊有代码,下载全部的财务数据保存到本地做研究,今天我给研究的教程

先看一下财务数据的读取接口

36c7af9eb8e2b462f47fe91e181c1a47.png

对应的参数说明

fields:指明数据结果集中所需输出业务字段,支持多个业务字段输出(list类型),如fields='settlement_provi', 'client_provi';输出具体字段请参考

date:查询日期,按日期查询模式,返回查询日期之前对应的财务数据,输入形式如'20170620';支持datetime.date时间格式输入,不能与start_year与end_year同时作用;支持按日期查询模式,不传入date时默认取回测日期的上一个交易日数据(str);

start_year:查询开始年份,按年份查询模式,返回输入年份范围内对应的财务数据,如'2015',start_year与end_year必须同时输入,且不能与date同时作用(str)

end_year:查询截止年份,按年份查询模式,返回输入年份范围内对应的财务数据,如'2015',start_year与end_year必须同时输入,且不能与date同时作用(str)

report_types:财报类型;如果为年份查询模式(start_year/end_year),不输入report_types返回当年可查询到的全部类型财报;如果为日期查询模式(date),不输入report_types返回距离指定日期最近一份财报(str)。

  • '1':表示获取一季度财报
  • '2':表示获取半年报
  • '3':表示获取截止到三季度财报
  • '4':表示获取年度财报

~(已废弃)date_type:数据参考时间设置,该参数只适用于按日期查询模式(date参数模式)(int) :~

  • ~(已废弃)date_type不传或传入date_type = None,返回发布日期(publ_date)在查询日期(date)之前指定财报类型数据(report_types),若未指定财报类型(report_types)则默认为离查询日期(date)最近季度的数据,数据未公布用NAN填充~
  • ~(已废弃)date_type传入1,返回会计周期(end_date)在查询日期(date)之前指定财报类型数据(report_types),若未指定财报类型(report_types)则默认为查询日期(date)最近季度会计周期的数据,数据未公布用NAN填充~

merge_type:数据更新设置;相关财务数据信息会不断进行修正更新,为了避免未来数据影响,可以通过参数获取原始发布或最新发布数据信息;只有部分表包含此字段(int) :

  • merge_type不传或传入merge_type = None,获取首次发布的数据,即使实际数据发生变化,也只返回原样数据信息;回测场景为避免未来数据建议使用此模式
  • merge_type传入1,获取已发布财报数据的更新数据,更新数据范围包括但不限于相关日期数据,研究场景或交易场景建议使用此模式,但需要指定报告期,否则会获取到历史最近一期有过更新情况的财报数据(不一定是最近一个财报期)

is_dataframe:True-返回DataFrame格式;False-返回pandas.Panel格式(默认,仅python3.5的按年份查询模式有效)。

注意:

  • date字段与start_year/end_year不能同时输入,否则按日期查询模式(date参数模式)
  • 当date和start_year/end_year相关数据都不传入时,默认为按日期查询模式(date参数模式),研究和回测中date取值有所不同:在研究中,date取的是当前日期;回测中取回测日期的上一个交易日数据
  • fields不传入的情况下,date必须传入,否则会报错。正确调用示例:get_fundamentals('600570.XSHG', 'balance_statement', date='2018-06-01')

比如我们需要下载资产负债表表

b93f3a230dc5bcdaddb685e49fd5a454.png

简单的例子参考

# 获取数据的两种模式
# 1. 按日期查询模式(默认以发布日期为参考时间):返回输入日期之前对应的财务数据
# 在回测中获取单一股票中对应回测日期资产负债表中资产总计(total_assets)数据
get_fundamentals('.SS','balance_statement','total_assets','20160628')
# 2. 按年份查询模式:返回输入年份范围内对应季度的财务数据
# 获取恒生电子(600570.SS)从2013年至2015年第一季度资产负债表中资产总计
#(total_assets)数据
get_fundamentals('0.SS','balance_statement','total_assets',start_year='2013',end_year='2015', report_types='1')

根据上面的思路,我们可以下载全部的财务数据,我用2014年开始下载,

65bd3781515a939970498b28fa0bef9c.png

大概的思路是先读取研究环境的路径,设置开始的时间

4b18a70ea9fed32aef734e38973c6912.png

读取全市场的股票代码,在报告期没有上市的股票,财务数据是空的,比如2024年没有上市的标的,这个函数是读取最新全市场股票

e7a228068001bb4eb8c9c300e9b401aa.png

写好代码挂模型交易就会自动下载数据,设置好下载的时间

98ce305a78e73299ff483ee5f42210d9.png

挂策略交易就可以

22b961c60cb0e9d402210b9667e7d550.png

下载好的数据保存在交易环境里面,研究里面

c5299da5bf5db07aa039d58ef5191de0.png

点击数据,点击下载按钮就可以保存到本地,点击鼠标右键,选择下载按钮就可以

67f38e7ae7dd7fee9ff96b09008dfeb1.png

下载的数据还是很不错的,可以自己保存到本地研究

3bd3f09b8fc5b0382a57e25fbf51506c.png

37f936190c78e7976ae723672ef614ca.png

不懂的问我就可以,加我备注入群可以加入量化研究群

174911d9f02189bf64cc0ace18b9f867.jpg

代码参考学习。不做交易参考

'''
下载全部财务数据
'''
import pandas as pd
def initialize(context):
    # 初始化策略
    g.path=get_research_path()
    g.start_year='2014'
    g.end_year='2060'
    run_daily(context, func=down_data, time='14:15')
def handle_data(context, data):
    pass
    
def down_data(context):
    '''
    下载数据函数
    '''
    print("营运能力下载数据函数*********************************")
    stock_list=get_Ashares()
    print(stock_list)
    df=get_fundamentals(stock_list,'operating_ability',start_year=g.start_year,end_year=g.end_year)
    df.to_excel(r'{}/营运能力.xlsx'.format(g.path))
    print('营运能力数据下载完成******************************************')
    #####################################################################
    df=get_fundamentals(stock_list,'eps',start_year=g.start_year,end_year=g.end_year)
    df.to_excel(r'{}/每股指标.xlsx'.format(g.path))
    print('每股指标数据下载完成******************************************')
    ###########################################################################
    df=get_fundamentals(stock_list,'profit_ability',start_year=g.start_year,end_year=g.end_year)
    df.to_excel(r'{}/盈利能力.xlsx'.format(g.path))
    print('盈利能力数据下载完成******************************************')
    #####################################
    df=get_fundamentals(stock_list,'growth_ability',start_year=g.start_year,end_year=g.end_year)
    df.to_excel(r'{}/成长能力.xlsx'.format(g.path))
    print('成长能力数据下载完成******************************************')
    ########################################################
    df=get_fundamentals(stock_list,'cashflow_statement',start_year=g.start_year,end_year=g.end_year)
    df.to_excel(r'{}/现金流量表.xlsx'.format(g.path))
    print('现金流量表数据下载完成******************************************')
    ####################################################
    df=get_fundamentals(stock_list, 'valuation', date = '20500101')
    df.to_excel(r'{}/估值数据.xlsx'.format(g.path))
    print('估值数据数据下载完成******************************************')
    #########################################################################
    df=get_fundamentals(stock_list,'debt_paying_ability',start_year=g.start_year,end_year=g.end_year)
    df.to_excel(r'{}/偿债能力.xlsx'.format(g.path))
    print('偿债能力数据下载完成******************************************')
    #######################################
    df=get_fundamentals(stock_list,'income_statement',start_year=g.start_year,end_year=g.end_year)
    df.to_excel(r'{}/利润表.xlsx'.format(g.path))
    print('利润表数据下载完成******************************************')
    #######################################
    df=get_fundamentals(stock_list,'balance_statement',start_year=g.start_year,end_year=g.end_year)
    df.to_excel(r'{}/资产负债表.xlsx'.format(g.path))
    print('数据下载完成******************************************')

回复

您需要登录后才可以回帖 登录 | 立即注册

客服专线

400-080-8112

用思考的速度交易,用真诚的态度合作,我们是认真的!
  • 关注公众号
  • 添加微信客服
Copyright © 2001-2026 迅投QMT社区 版权所有 All Rights Reserved. 京ICP备2025122616号-3
关灯 快速发帖
扫一扫添加微信客服
QQ客服返回顶部
快速回复 返回顶部 返回列表