如何使用jqdata获取上市公司自由现金流

本文介绍自由现金流的概念及其计算方法,包括经营性现金流、资本性支出等关键因素,并通过贵州茅台的实际案例展示了自由现金流的具体计算过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

By 陈鹏

自由现金流有很多著名的拥护者,其中最著名的莫过于巴菲特和贝索斯了。巴菲特认为企业所能够产生的自由现金流,才是投资者真正拥有的财富。与此同时,贝索斯认为,一个公司的核心能力是自由现金流,投资者有多少钱能够支付到对未来的投资上去,才是决定公司价值的核心指标。

那么,如何才能追随两位大师的步伐,以及在实际应用中将自由现金流模型贯彻落实呢?首先来看一下下面的模型。

DCF模型,即贴现自由现金流模型,全称为Discounted Cash Flow,这个模型是由美国的John Burr Williams在1937年哈佛大学的博士论文中首次提出,并于1938年发表于《The Theory of Investment Value》一书中。它是巴菲特、贝索斯自由现金流模型的理论版,具体做法就是把企业在未来持续经营期间内的所有自由现金流贴现到今日,最终得到的数值就是企业的价值。DCF模型公式如下:

p=∑t=1nCFt(1r)t

p=∑t=1nCFt(1r)tp=∑t=1nCFt(1r)t


其中:P为企业价值;CFt为企业第t年的自由现金流;r为折现率;t为预测期间

 

我们先对其中的CF因素进行探讨。理解自由现金流,需从如下两个方面入手:

​ 1.自由现金流的定义是什么?

​ 2.自由现金流的公式如何计算?

第一个问题,自由现金流就是企业日常经营活动中产生的,减去各种税费,扣除企业相关投资需求后,能够分配给股东和债权人的最大现金流量。

第二个问题,我们考证了金融学领域的经典教材,由美国MIT斯隆管理学院斯蒂芬·A·罗斯撰写的《公司理财》一书,书中给出了完整的自由现金流的计算方法,即自由现金流=经营性现金流-资本性支出-净营运资本的增加。本文通过实例来验证自由现金流数据,所采用的数据取自于聚宽数据出品的JQData本地量化金融数据,测试对象为贵州茅台("600519.XSHG")2017年年报,以上公式中用到的数据在JQData中都可以直接获取,测试代码如下:

计算上市公司的FCFF,自由现金流=经营性现金流-资本性支出-净营运资本的增加

 

from jqdatasdk import *
auth('用户名','密码')
#经营性现金流=息税前利润 折旧-当期税款
#计算息税前利润(息税前利润=净利润 所得税 利息费用)
def EBIT(code,report_date):
    #从合并利润表中获取净利润、所得税、利息费用数据
    df = finance.run_query(query(finance.STK_INCOME_STATEMENT.code,
                                 finance.STK_INCOME_STATEMENT.report_type,
                                 finance.STK_INCOME_STATEMENT.net_profit,
                                 finance.STK_INCOME_STATEMENT.income_tax,
                                 finance.STK_INCOME_STATEMENT.interest_expense).filter(
                                 finance.STK_INCOME_STATEMENT.code==code,
                                 finance.STK_INCOME_STATEMENT.report_date==report_date))
    df = df.fillna(0)
    df = df[df['report_type']==0]   
    df['EBIT'] = df['net_profit']   df['income_tax']   df['interest_expense']  #息税前利润=净利润 所得税 利息费用
    return df['EBIT'][1]
    
#计算本期折旧(本期折旧=本期累计折旧-上期累计折旧)
def depreciation(code,report_date):
    #从合并现金流量表中获取折旧数据
    df_depreciation = finance.run_query(query(finance.STK_CASHFLOW_STATEMENT.code,
                                              finance.STK_CASHFLOW_STATEMENT.report_type,
                                              finance.STK_CASHFLOW_STATEMENT.fixed_assets_depreciation).filter(
                                              finance.STK_CASHFLOW_STATEMENT.code==code,
                                              finance.STK_CASHFLOW_STATEMENT.report_date==report_date))
    df_depreciation = df_depreciation.fillna(0)
    #本期折旧=本期累计折旧-上期累计折旧
    depreciation = df_depreciation[(df_depreciation.report_type==0)]['fixed_assets_depreciation'][1]-df_depreciation[(df_depreciation.report_type==1)]['fixed_assets_depreciation'][0]
    return depreciation

#计算当期税款(当期税款=所得税-递延所得税)
def current_tax(code,report_date):
    #从合并利润表中获取所得税数据
    df = finance.run_query(query(finance.STK_INCOME_STATEMENT.code,
                                 finance.STK_INCOME_STATEMENT.report_type,
                                 finance.STK_INCOME_STATEMENT.income_tax).filter(
                                 finance.STK_INCOME_STATEMENT.code==code,
                                 finance.STK_INCOME_STATEMENT.report_date==report_date))
    df = df.fillna(0)
    df = df[df['report_type']==0]
    current_tax = df['income_tax'][1]-deferred_income_taxes(code,report_date)  #当期税款=所得税-递延所得税
    return current_tax

#计算递延所得税(递延所得税=递延所得税资产的减少 递延所得税负债的增加)
def deferred_income_taxes(code,report_date):
    #从合并现金流量表中获取递延所得税资产的减少、递延所得税负债的增加数据
    df = finance.run_query(query(finance.STK_CASHFLOW_STATEMENT.code,
                                 finance.STK_CASHFLOW_STATEMENT.report_type,
                                 finance.STK_CASHFLOW_STATEMENT.deffered_tax_asset_decrease,
                                 finance.STK_CASHFLOW_STATEMENT.deffered_tax_liability_increase).filter(
                                 finance.STK_CASHFLOW_STATEMENT.code==code,
                                 finance.STK_CASHFLOW_STATEMENT.report_date==report_date))
    df = df.fillna(0)
    df = df[df['report_type']==0]
    df['deferred_income_taxes'] = df['deffered_tax_asset_decrease'] df['deffered_tax_liability_increase']  #递延所得税=递延所得税资产的减少 递延所得税负债的增加
    return df['deferred_income_taxes'][1]
    
#计算资本性支出(资本性支出=期末固定资产净额-期初固定资产净额 折旧)
def capital_expenditure(code,report_date):
    #从合并资产负债表中获取固定资产净额数据
    df_fixed_assets = finance.run_query(query(finance.STK_BALANCE_SHEET.code,
                                              finance.STK_BALANCE_SHEET.report_type,
                                              finance.STK_BALANCE_SHEET.fixed_assets).filter(
                                              finance.STK_BALANCE_SHEET.code==code,
                                              finance.STK_BALANCE_SHEET.report_date==report_date))
    df_fixed_assets = df_fixed_assets.fillna(0)
    fix_assets = df_fixed_assets[(df_fixed_assets.report_type==0)]['fixed_assets'][1]-df_fixed_assets[(df_fixed_assets.report_type==1)]['fixed_assets'][0]
    depreciation_ = depreciation(code,report_date)
    capital_expenditure = fix_assets depreciation_  #资本性支出=期末固定资产净额-期初固定资产净额 本期折旧
    return capital_expenditure

#计算净营运资本增加额(期末净营运资本-期初净营运资本     其中:净营运资本=流动资产-流动负债)
def net_working_capital_increment(code,report_date):
    #从合并资产负债表中获取本期和上期的流动资产&流动负债数据
    df = finance.run_query(query(finance.STK_BALANCE_SHEET.code,
                                 finance.STK_BALANCE_SHEET.report_type,
                                 finance.STK_BALANCE_SHEET.total_current_assets,
                                 finance.STK_BALANCE_SHEET.total_current_liability).filter(
                                 finance.STK_BALANCE_SHEET.code==code,
                                 finance.STK_BALANCE_SHEET.report_date==report_date))
    df = df.fillna(0)
    end_working_capital = df[(df.report_type==0)]['total_current_assets'][1]-df[(df.report_type==0)]['total_current_liability'][1]
    begin_working_capital = df[(df.report_type==1)]['total_current_assets'][0]-df[(df.report_type==1)]['total_current_liability'][0]
    net_working_capital_increment = end_working_capital-begin_working_capital  #净营运资本增加额=期末净营运资本-期初净营运资本
    return net_working_capital_increment

#计算FCFF自由现金流(自由现金流=息税前利润-当期税款-资本性支出-净营运资本增加额 折旧)
def FCFF(code,report_date):
    #自由现金流=息税前利润-当期税款-资本性支出-净营运资本增加额 折旧
    FCFF = EBIT(code,report_date)-current_tax(code,report_date)-capital_expenditure(code,report_date)-net_working_capital_increment(code,report_date) depreciation(code,report_date)
    return FCFF

CFF中传入code和report_date 形如 FCFF('600519.XSHG','2017-12-31')

其中:report_date可以是"XXXX-03-31","XXXX-06-30","XXXX-09-30","XXXX-12-31"

分别表示XXXX年的一季报、半年报、三季报以及年报

print(FCFF('600519.XSHG','2017-12-31'))

代码运行结果为8180290417.57,为了验证数据的准确性,我们对比了几个主流平台的相应的数据。

数据来源贵州茅台2017年年报企业自由现金流(亿元)
jqdata81.80
Wind296.07
i问财84.48

最后可以看出,jqdata的数据和i问财的数据之间是比较接近的,而Wind和我们的计算差异较大。

 
<think>好的,我现在需要帮助用户解决如何安装jqdata库的问题。用户提到想查找jqdata的安装方法或解决安装问题,所以我的回答应该详细覆盖安装步骤和常见问题的解决方法。首先,我要回顾提供的引用内容,确保信息准确。 引用[1]提到可以使用pip安装,或者下载高校版一键安装,特别是针对Windows用户。引用[2]指出手动安装时可能需要单独安装某些包,比如sqlalchemy,并指定版本和镜像源。引用[3]则说明了更新JQData的方法,使用git命令。引用[4]强调安装后的认证步骤,需要用户名和密码。 接下来,我需要组织步骤,分为常规安装、Windows用户的一键安装、手动处理依赖问题和验证安装是否成功。每个步骤都要清晰,给出具体的命令,比如pip install jqdatasdk,以及可能用到的镜像源如清华或阿里云。对于常见错误,比如依赖包版本冲突,要提到单独安装指定版本的包,比如sqlalchemy==1.2.8。 同时,安装后的认证步骤不能遗漏,需要提醒用户替换成自己的账号密码。可能还需要提到更新JQData的方法,方便用户以后使用。另外,考虑到用户可能遇到的网络问题,建议使用国内镜像加速下载。 需要检查是否有遗漏的部分,比如是否需要管理员权限运行命令行,或者Python环境是否正确。此外,引用中的高校版安装链接可能需要确认是否有效,但用户可能无法点击,所以描述要准确。最后,生成相关问题,帮助用户扩展了解,比如版本升级、认证失败处理、数据获取方法等。 确保回答结构清晰,分步骤说明,使用代码块展示命令,符合用户的系统级指令要求,如正确使用$$格式,但这里主要是代码块,所以用三个反引号包裹。同时,回答使用中文,自然引用相关的引用标记,如[^1][^2][^3][^4],并正确对应到各个步骤中。最后的问题部分要覆盖安装后的常见问题和使用场景,帮助用户进一步解决问题。</think>### 分步安装JQData教程(附常见问题解决) #### 一、常规安装方法(推荐) 1. **通过pip安装**(需提前配置Python环境) ```bash pip install jqdatasdk -i https://pypi.tuna.tsinghua.edu.cn/simple ``` *注:使用清华镜像源加速下载[^3]* 2. **Windows用户一键安装**(无需配置Python环境) - 下载高校版安装包[点击查看一键安装教程](https://www.joinquant.com/help/api/help?name=JQData#JQData%E9%AB%98%E6%A0%A1%E7%89%88) [^1] - 安装后自动创建独立Python环境 #### 二、手动处理依赖问题 若安装报错`sqlalchemy`等包版本冲突: ```bash pip install sqlalchemy==1.2.8 -i https://mirrors.aliyun.com/pypi/simple/ [^2] ``` #### 三、验证安装 ```python import jqdatasdk jqdatasdk.auth('您的聚宽账号', '密码') # 替换为真实凭证[^4] print(jqdatasdk.get_price('000001.XSHE')) ``` #### 四、更新到最新版 ```bash pip install -U git+https://github.com/JoinQuant/jqdatasdk.git [^3] ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值