Python量化炒股的财务因子选股

Python量化炒股的财务因子选股-财务因子选股

选股是股市投资的第一步,是最基础的一步,也是最重要的一步。

初识财务因子选股

量化选股是利用数量化的方法选择股票组合,期望该股票组合能够获得超越基准收益率的投资行为。总的来说,量化选股可分为两类,分别是基本面选股和技术面选股。

在实际股票投资中,往往利用基本面选出要操作的股票,放入自选股中,然后根据技术面来确定交易的时机,即根据技术判断来确定何时买入、何时加仓、何时减仓、何时全部卖出。

在基本面选股中,最常用的选股方法是财务因子选股。财务因子选股可以进一步分4类,分别是成长类因子选股、规模类因子选股、价值类因子选股和质量因子选股。

成长类因子选股

在Python财务因子量化选股中,成长类因为有6个,分别是营业收入同比增长率、营业收入环比增长率、净利润同比增长率、净利润环比增长率、营业利润率、销售净利率和销售毛利率。

需要注意的是,成长类因子都在财务指标数据表indicator中。

营业收入同比增长率(inc_revenue_year_on_year)选股

营业收入是指在一定时期内,企业销售商品或提供劳务所获得的货币收入,如商业企业的商品销售收入、生产加工企业的产品销售收入、饮食业的饮食品销售收入、服务业的服务收入、仓储企业的仓储收入、运输企业的运费收入、代办运输收入等。营业收入的计算公式如下:

营业收入 = 主营业务收入 + 其他业务收入

或营业收入 = 产品销售量(或服务量)x 产品单价(或服务单价)

主副产品(或不同等级产品)的销售收入应全部计入营业收入,所提供的不同类型服务收入也应计入营业收入。营业收入同比增长率是指企业在一定期间内取得营业收入与其上年同期营业收入的增长的百分比,以反映企业在此期间内营业收入的增长或下降等情况。营业收入同比增长率计算公诉如下:

营业收入同比增长率 = (当期营业收入 - 上期营业收入)➗ 上期营业收入 ✖️ 100%

当期营业收入按使用者的需要可以是月度、季度或年度,也可以是会计年度起始日至会计报表截止日,如2019年1月1日至2019年9月30日等。另外,也可以是分析者采用的年化数据,如2018年10月1日至2019年9月30日。

上期营业收入是指与当期营业收入相对应的上一个年度此期间的营业收入。营业收入同比增长率越大,说明企业当期获得的营业收入相对去年同期增长越大,对企业盈利有正面影响,而营业收入同比增长率为负时,则表明企业营业收入出现下降,应引起企业管理者或投资者的注意。

连续地观察营业收入同比增长率的历史趋势,可以反映出企业的营业收入在不同的会计期间其增长变化的情况,对后期的预测带来一定的帮助。

单击聚宽JoinQuant量化炒股平台中的“策略研究/研究环境”命令,进入Jupyter Notebook的研究平台。然后单击“新建”按钮,创建Python3文件,输入如下代码:

import pandas as pd
df1 = get_fundamentals(query(indicator).filter(indicator.inc_revenue_year_on_year > 800), date='2024-04-26')
df1

首先导入Pandas包,并设置名为pd,然后调用get_fundamentals()函数获取财务指标数据,返回值dataframe。indicator为财务指标数据表名,查询条件时营业收入同比增长率大于800,即indicator.inc_revenue_year_on_year > 800,时间为2024-04-26。

单击工具栏运行按钮,快捷键(shift+enter),运行结果如下图:

显示营业收入同比增长率大于800的所有股票的股票代码和营业收入同比增长率,具体代码如下:

print('营业收入同比增长率大于800的所有股票的股票代码:\n', df1['code'])
print('营业收入同比增长率大于800的所有股票的营业收入同比增长率:\n', df1['inc_revenue_year_on_year'])

单击工具栏运行按钮,快捷键(shift+enter),运行结果如下图:

Screenshot 2024-04-27 at 21.53.03

显示营业收入同比增长率大于800的股票近10个交易日的收盘价信息,具体代码如下:

df2 = history(10, unit='1d', field='close', security_list=df2['code'],df=True,skip_paused=False,fq='pre')
df2

单击工具栏运行按钮,快捷键(shift+enter),运行结果如下图:

Screenshot 2024-04-27 at 22.06.35

营业收入环比增长率(inc_revenue_annual)选股

营业收入环比增长率 =(本期营业收入的值 - 上一期营业收入的值)➗上一期营业收入的值✖️100%

需要注意的是,环比增长率是相对于上一期的,而同比增长率是相对于上一年度的同一期的。

单击聚宽JoinQuant量化炒股平台中的“策略研究/研究环境”命令,进入Jupyer Notebook的研究平台。然后单击“新建”按钮,创建Python3文件,接着输入如下代码:

import pandas as pd
df1 = get_fundamentals(query(indicator.code, indicator.inc_revenue_annual).filter(indicator.inc_revenue_annual > 900), date='2024-04-26')
df1

查询条件是营业收入环比增长率大于900,即indicator.inc_revenue_annual > 900,时间为2024年04月26日。需要注意的是,这里只显示了股票代码和股票的营业收入环比增长率。

单击工具栏运行按钮,快捷键(shift+enter),运行结果如下图:

Screenshot 2024-04-27 at 22.19.31

利用图表显示营业收入环比增长率大于900的营业收入环比增长率,具体代码如下:

from matplotlib import pyplot as plt
plt.figure()
plt.plot(df1['inc_revenue_annual'], 'ob')
plt.show()

单击工具栏运行按钮,快捷键(shift+enter),运行结果如下图:

Screenshot 2024-04-27 at 22.27.27

净利润同比增长率(inc_net_profit_year_on_year)选股

净利润是指企业当期利润总额减去所得税后的金额,即企业的税后利润。净利润是一个企业经营的最终成果。净利润多,企业的经营效益就好;净利润小,企业的经营效益就差。它是衡量一个企业经营效益的主要目标。

净利润同比增长率低计算公式如下:

净利润同比增长率 = (当期净利润 - 上期净利润)➗ 上期净利润低绝对值✖️100%

单击聚宽JoinQuant量化炒股平台中的“策略研究/研究环境”命令,进入Jupyter Notebook的研究平台。然后单击“新建”按钮,创建Python3文件,接着输入如下代码:

import pandas as pd
df = get_fundamentals(query(indicator).filter(indicator.inc_net_profit_year_on_year > 200, indicator.inc_revenue_year_on_year > 300, indicator.inc_revenue_annual > 300), date='2024-04-26')
df['code']

indicator为财务指标数据表名,查询条件有3个,分别是净利润同比增长率大于200, 营业收入同比增长率大于300,营业收入环比增长率大于300。时间为2024-04-26。这里只显示选出股票的代码。

单击工具栏中的运行按钮,快捷键(shift+enter),运行结果如下图:

Screenshot 2024-04-28 at 08.53.45

净利润环比增长率(inc_net_profit_annual)选股

净利润环比增长率 = (本期净利润的值 = 上一期净利润的值)➗ 上一期净利润的值的绝对值 ✖️ 100%

单击聚宽JoinQuant量化炒股平台中的“策略研究/研究环境”命令,进入Jupyter Notebook的研究平台。然后单击“新建”按钮,创建Python3文件,接着输入如下代码:

import pandas as pd
df = get_fundamentals(query(indicator).filter(indicator.inc_net_profit_annual > 600, indicator.inc_revenue_annual > 500), date='2024-04-26')
print('净利润环比增长率大于600, 营业收入环比增长率大于500的股票代码:\n', df['code'])
print('净利润环比增长率大于600,营业收入环比增长率大于500的净利润环比增长率:\n', df['inc_net_profit_annual'])
print('净利润环比增长率大于600, 营业收入环比增长率大于500的营业收入环比增长率:\n', df['inc_revenue_annual'])

indicator为财务指标数据名,查询条件有两个,分别是净利润环比增长率大于600,营业收入环比增长率大于500。时间为2024-04-26。

单击工具栏中的运行按钮,快捷键(shift+enter),运行结果如下图:

Screenshot 2024-04-28 at 09.10.37

利用图表显示净利润环比增长率大于600,营业收入环比增长率大于500的净利润环比增长率和营业收入环比增长率,具体代码如下:

myc1 = df['inc_net_profit_annual']        # 净利润环比增长率
myc2 = df['inc_revenue_annual']     # 营业收入环比增长率
plt.figure(figsize=(12, 6))
# 激活第一个subplot
plt.subplot(2, 1, 1)
plt.plot(myc1, '-b')        # 净利润环比增长率
plt.subplot(2, 1, 2)
plt.plot(myc2, '-r')        # 营业收入环比增长率
plt.show()

单击工具栏中的运行按钮,快捷键(shift+enter),运行结果如下图:

Screenshot 2024-04-28 at 09.19.03

营业利润率(operation_profit_to_total_revenue)选股

营业利润率是指经营所得的营业利润占销货净额的百分比,或占投入资本额的百分比,其计算公式如下:

营业利润率 = 营业利润 ➗ 全部业务收入 ✖️ 100%

营业利润率越高,说明企业商品销售额提供的营业利润越多,企业的盈利能力越强。反之,此比率越低,说明企业盈利能力越弱。

单击聚宽JoinQuant量化炒股平台中的“策略研究/研究环境”命令,进入Jupyter Notebook的研究平台。然后单击“新建”按钮,创建Python3文件,接着输入如下代码:

import pandas as pd
df = get_fundamentals(query(indicator).filter(indicator.operation_profit_to_total_revenue > 160), date='2024-04-26')
df

单击工具栏中的运行按钮,快捷键(shift+enter),运行结果如下图:

Screenshot 2024-04-28 at 09.34.13

显示营业利润大于160的股票的近12个交易日的收盘价信息,具体代码如下:

df2 = history(12, unit='1d', field='close', security_list=df['code'], df=True, skip_paused=False, fq='pre')
df2

单击工具栏中的运行按钮,快捷键(shift+enter),运行结果如下图:

Screenshot 2024-04-28 at 09.50.46

销售净利率(net_profit_margiin)选股

销售净利润是指企业实现净利润与销售收入的对比关系,用以衡量企业在一定时期的销售收入获取的能力,其计算公式如下:

销售净利润 = 净利润 ➗ 销售收入 ✖️ 100%

销售净利率与净利润成正比关系,与销售收入成反比关系,企业在增加销售收入额的同时,必须相应地获得更多的净利润,才能使销售净利率保持不变或有所提高。

单击聚宽JoinQuant量化炒股平台中的“策略研究/研究环境”命令,进入Jupyter Notebook的研究平台。然后单击“新建”按钮,创建Python3文件,接着输入如下代码:

import pandas as pd
df1 = get_fundamentals(query(indicator.code, indicator.net_profit_margin, indicator.operation_profit_to_total_revenue).filter(indicator.net_profit_margin > 100,indicator.operation_profit_to_total_revenue > 120), date='2024-04-26')
df1

indicator为财务指标数据表名,查询条件有两个,分别是销售净利率大于100,营业利润率大于120。时间为2024-04-26。注意:这里显示的是股票代码、销售净利率和营业利润率。单击工具栏运行按钮,快捷键(shift+enter),运行结果如下图:

Screenshot 2024-04-28 at 10.01.18

利用图表显示销售净利率大于100,营业利润率大于120的销售净利率和营业利润率,具体代码如下:

myc1 = df1['net_profit_margin']            # 销售净利率
myc2 = df1['operation_profit_to_total_revenue']      # 营业利润率
matplotlib.rcParams.update({'font.size': 15, 'font.family': 'serif'})
fig, ax = plt.subplots()
ax.plot(myc1, label='销售净利率')
ax.plot(myc2, label='营业利润率')
ax.legend();
ax.set_title('销售净利率和营业利润率')

单击工具栏运行按钮,快捷键(shift+enter),运行结果如下图:

Screenshot 2024-04-28 at 10.07.17

销售毛利率(gross_profit_margin)选股

销售毛利率是毛利占销售净值的百分比,通常称为毛利率。其中,毛利是销售净收入与产品成本的差,其计算公式如下:

销售毛利率 = (销售净收入 - 产品成本) ➗ 销售净收入 ✖️100%

销售毛利率是上市公司的重要经营指标,能反映公司产品的竞争力和获利潜力。它反映了企业产品销售的初始获利能力,是企业净利润的起点,没有足够高的毛利率便不能形成较大的盈利。与同行业比较,如果公司的毛利率显著高于同行业水平,则说明公司产品附加值高,产品定价高,或与同行业比较公司存在成本上的优势,有竞争力。

与历史比较,如果公司的毛利率显著提高,则可能是公司所在行业处于复苏时期,产品价格大幅上升。在这种情况下投资者需要考虑这种价格的上升是否能持续,公司将来的盈利能力是否有保证。相反,如果公司毛利率显著降低,则可能是公司所在行业竞争激烈,毛利率下降往往伴随着价格战的爆发或成本的失控,这种情况预示产品盈利能力的下降。

单击聚宽JoinQuant量化炒股平台中的“策略研究/研究环境”命令,进入Jupyter Notebook的研究平台。然后单击“新建”按钮,创建Python3文件,接着输入如下代码:

import pandas as pd
df1 = get_fundamentals(query(indicator).filter(indicator.gross_profit_margin > 60, indicator.operation_profit_to_total_revenue > 80), date='2024-04-26')
df1['code']

indicator为财务指标数据表名,查询条件有两个,分别是销售毛利率大于60,营业利润率大于80,时间为2024-04-26。

单击工具栏运行按钮,快捷键(shift+enter),运行结果如下图:

Screenshot 2024-04-28 at 10.21.21

规模类因子选股

在Python财务因子量化选股中,规模类因子有4个,分别是总市值、流通市值、总股本和流通股本。

需要注意的是,规模类因子都在市值数据表valuation中。

总市值(market_cap)选股

总市值是指在某特定时间内总股本数乘以当时股价得出的股票总市值。沪市所有股票的市值就是沪市总市值。深市所有股票的市值就是深市总市值。总市值用来表示个股权重大小或大盘的规模大小,对股票买卖没有直接作用,但很多时候走强的大多是市值大的个股,由于市值越大在指数中占比的比例越高,庄家往往通过控制这些高市值的股票达到控制大盘的目的。这时候对股票买卖好像又有作用。

单击聚宽JoinQuant量化炒股平台中的“策略研究/研究环境”命令,进入Jupyter Notebook的研究平台。然后单击“新建”按钮,创建Python3文件,接着输入如下代码:

import pandas as pd
df1 = get_fundamentals(query(valuation).filter(valuation.market_cap > 12000), date='2024-04-26')
df1

valuation为市值数据表名,查询条件是总市值大于12000亿,时间为2024-04-26。

单击工具栏运行按钮,快捷键(shift+enter),运行结果如下图:

Screenshot 2024-04-28 at 10.33.29

显示总市值大于12000亿的股票代码和总市值信息,具体代码如下:

print('总市值大于12000亿的股票代码:\n', df1['code'])
print('总市值大于12000亿的总市值:\n', df1['market_cap'])

单击工具栏运行按钮,快捷键(shift+enter),运行结果如下图:

Screenshot 2024-04-28 at 10.38.19

利用图表显示总市值大于12000亿的总市值信息,具体代码如下:

from matplotlib import pyplot as plt
plt.figure()
plt.plot(df1['market_cap'], 'ob')
plt.show()

单击工具栏运行按钮,快捷键(shift+enter),运行结果如下图:

Screenshot 2024-04-28 at 10.49.30

流通市值(circulating_market_cap)选股

流通市值是指在某特定时间内当时可交易的流通股股数乘以当时股价得出的流通股票总价值。在中国,上市公司的股份结构分为国有股、法人股、个人股等。

目前只有个人股可以上市流通交易。这部分流通等股份总数乘以股票市场价格,就是流通市值。需要注意的是,流通市值要小于等于总市值。

单击聚宽JoinQuant量化炒股平台中的“策略研究/研究环境”命令,进入Jupyter Notebook的研究平台。然后单击“新建”按钮,创建Python3文件,接着输入如下代码:

import pandas as pd
df1 = get_fundamentals(query(valuation).filter(valuation.circulating_market_cap > 10000), date='2024-04-26')
df1df2 = history(10, unit='1d', field='close', security_list=df1['code'], df=True, skip_paused=False, fq='pre')
df2

单击工具栏运行按钮,快捷键(shift+enter),运行结果如下图:

Screenshot 2024-04-28 at 11.03.59

显示流通市值大于10000亿的股票的近10个交易日的收盘价信息,具体代码如下:

df2 = history(10, unit='1d', field='close', security_list=df1['code'], df=True, skip_paused=False, fq='pre')
df2

单击工具栏运行按钮,快捷键(shift+enter),运行结果如下图:

Screenshot 2024-04-28 at 12.46.02

利用图表显示流通市值大于10000亿的股票的近10个交易日的收盘价信息,具体代码如下:

from matplotlib import pyplot as plt
matplotlib.rcParams.update({'font.size':12, 'font.family':'serif'})
flg, ax = plt.subplots()
ax.plot(df2['601288.XSHG'], label='农业银行')
ax.plot(df2['601857.XSHG'], label='中国石油')
ax.plot(df2['601398.XSHG'], label='工商银行')
ax.legend();
ax.set_xlabel('三只银行股的日期')
ax.set_ylabel('三只银行股的价格')
ax.set_title('三只银行股的近10个交易日的收盘价走势对比图')

单击工具栏运行按钮,快捷键(shift+enter),运行结果如下图:

Screenshot 2024-04-28 at 12.53.13

总股本(capitalization)选股

总股本是指公司已发行的普通股股份总数(包含A股、B股和H股的总股本)。

单击聚宽JoinQuant量化炒股平台中的“策略研究/研究环境”命令,进入Jupyter Notebook的研究平台。然后单击“新建”按钮,创建Python3文件,接着输入如下代码:

import pandas as pd
df1 = get_fundamentals(query(valuation).filter(valuation.capitalization > 10000000, valuation.market_cap > 8000), date='2024-04-24')
df1['code']

valuation为市值数据表名,查询条件是总股本大于10000000万股,总市值大于8000亿。时间为2024-04-26。

单击工具栏运行按钮,快捷键(shift+enter),运行结果如下图:

Screenshot 2024-04-28 at 13.02.28

流通股本(circulating_cap)选股

流通股本是指公司已发行的境内上市流通、以人民币兑换的股份总数,即A股市场的流通股本。

单击聚宽JoinQuant量化炒股平台中的“策略研究/研究环境”命令,进入Jupyter Notebook的研究平台。然后单击“新建”按钮,创建Python3文件,接着输入如下代码:

import pandas as pd
df1 = get_fundamentals(query(valuation).filter(valuation.circulating_cap > 1000000, valuation.circulating_market_cap > 2000), date='2024-04-26')
df1

valuation为市值数据表名,查询条件有两个,分别是流通股本大于1000000万股,流通市值大于2000亿。时间为2024-04-26。

单击工具栏运行按钮,快捷键(shift+enter),运行结果如下图:

Screenshot 2024-04-28 at 13.07.40

利用图表显示流通股本大于1000000万股,流通市值大于2000亿的流通股本和流通市值,具体代码如下:

myc1 = df1['circulating_cap']        # 流通股本
myc2 = df1['circulating_market_cap']  # 流通市值
plt.figure(figsize=(12, 6))
# 激活第一个subplot
plt.subplot(2, 1, 1)
plt.plot(myc1, '-b')       # 流通股本
plt.subplot(2, 1, 2)
plt.plot(myc2, '-r')       # 流通市值
plt.show()

单击工具栏运行按钮,快捷键(shift+enter),运行结果如下图:

Screenshot 2024-04-28 at 13.12.20

价值类因子选股

在Python财务因子量化选股中,价值类因子有5个,分别是市净率、市销率、市现率、动态市盈率和静态市盈率。

需要注意的是,价值类因子也都在市值数据表valuation中。

市净率(pb_ratio)选股

市净率是指每股股价与每股净资产的比率,其计算公式如下:

市净率 = 每股市价➗每股净资产

市净率可用于股票投资分析,一般来说市净率较低的股票,投资价值较高,相反,则投资价值较低。但在判断投资价值时还要考虑当时的市场环境以及公司经营情况、赢利能力等因素。

单击聚宽JoinQuant量化炒股平台中的“策略研究/研究环境”命令,进入Jupyter Notebook的研究平台。然后单击“新建”按钮,创建Python3文件,接着输入如下代码:

import pandas as pd
df1 = get_fundamentals(query(valuation.code, valuation.pb_ratio, valuation.market_cap).filter(valuation.pb_ratio < 1.2, valuation.market_cap > 5000), date='2024-04-26')
df1

valuation为市值数据表名, 查询条件有两个,分别是市净率小于1.2,总市值大于5000亿,时间为2024-04-26。

单击工具栏运行按钮,快捷键(shift+enter),运行结果如下图:

Screenshot 2024-04-28 at 15.36.36

市销率(ps_ratio)选股

市销率为股票价格与每股销售收入之比,市销率越小,通常被认为投资价值越高,市销率的计算公式如下:

市销率 = 股价➗每股销售额

在基本分析的诸多工具中,市销率是常用的参考指标之一。可以认为,成熟期的企业通常使用市盈率(PE)来估值,而尚未盈利的高成长性企业则使用市销率(PS)来估值更为可靠。

单击聚宽JoinQuant量化炒股平台中的“策略研究/研究环境”命令,进入Jupyter Notebook的研究平台。然后单击“新建”按钮,创建Python3文件,接着输入如下代码:

import pandas as pd
df1 = get_fundamentals(query(valuation).filter(valuation.ps_ratio < 0.4,
                                              valuation.pb_ratio < 0.8), date='2024-04-26')
df1

valuation为市值数据表名,查询条件有两个,分别是市销率小于0.4,市净率小于0.8。时间为2024-04-26。

单击工具栏运行按钮,快捷键(shift+enter),运行结果如下图:

Screenshot 2024-04-28 at 17.27.01

利用图表显示市销率小于0.4,市净率小于0.8的市销率和市净率,具体代码如下:

myc1 = df1['ps_ratio']     # 市销率
myc2 = df1['pb_ratio']     # 市净率
matplotlib.rcParams.update({'font.size': 15, 'font.family':'serif'})
fig, ax = plt.subplots()
ax.plot(myc1, label='市销率')
ax.plot(myc2, label='市净率')
ax.legend();
ax.set_title('市销率和市净率')

单击工具栏运行按钮,快捷键(shift+enter),运行结果如下图:

Screenshot 2024-04-28 at 17.32.53

市现率(pcf_ratio)选股

市现率是股票价格与每股现金流量的比率。市现率可用于评价股票的价格水平和风险水平。市现率越小,表明上市公司的每股现金增加额越多,经营压力越小。对于参与资本运作的投资机构,市现率还意味着其运作资本的增加效率。

单击聚宽JoinQuant量化炒股平台中的“策略研究/研究环境”命令,进入Jupyter Notebook的研究平台。然后单击“新建”按钮,创建Python3文件,接着输入如下代码:

import pandas as pd
df1 = get_fundamentals(query(valuation).filter(valuation.pcf_ratio < 0.6,
                                              valuation.pb_ratio < 0.5,
                                              valuation.ps_ratio < 0.8), date='2024-04-26')
df1['code']

valuation为市值数据表名,查询条件有3个,分别是市现率小于0.6,市净率小于0.5,以及市销率小于0.8。时间为2024-04-26。

单击工具栏运行按钮,快捷键(shift+enter),运行结果如下图:

Screenshot 2024-04-28 at 17.40.07

动态市盈率(pe_ratio)选股

动态市盈率(PE)是指还没有真正实现的下一年度的预测利润的市盈率,其计算公式如下:

动态市盈率 = 股票现价 ➗ 未来每股收益的预测值

动态市盈率和市盈率是全球资本市场通用的投资参考指标,用以衡量某一阶段资本市场的投资价值和风险程度,也是资本市场之间用来相互参考与借鉴的重要依据。

单击聚宽JoinQuant量化炒股平台中的“策略研究/研究环境”命令,进入Jupyter Notebook的研究平台。然后单击“新建”按钮,创建Python3文件,接着输入如下代码:

import pandas as pd
df1 = get_fundamentals(query(valuation.code, valuation.pe_ratio).filter(valuation.pe_ratio < 6, valuation.pcf_ratio < 0.6, valuation.ps_ratio < 0.4), date='2024-04-26')
df1

valuation为市值数据表名,查询条件有3个,分别是动态市盈率小于6,市现率小于0.5,以及市销率小于0.4。时间为2024-04-26。

单击工具栏运行按钮,快捷键(shift+enter),运行结果如下图:

Screenshot 2024-04-28 at 17.49.46

静态市盈率(pe_ratio_lyr)选股

静态市盈率,即市场广泛谈及的市盈率,是用当前每股市场价格除以该公司的每股税后利润,其计算公式如下:

市盈率 = 股票每股市价 ➗ 每股税后利润, 即市盈率 = 股价 ➗ 每股收益

一般来说,市盈率表示该公司需要累积多少年的盈利才能达到如今的市价水平,所以市盈率指标数值越小越好,越小说明投资回收期越短,风险越小,投资价值一般就越高。倍数大则意味着翻本期长,风险大。

单击聚宽JoinQuant量化炒股平台中的“策略研究/研究环境”命令,进入Jupyter Notebook的研究平台。然后单击“新建”按钮,创建Python3文件,接着输入如下代码:

import pandas as pd
df1 = get_fundamentals(query(valuation).filter(
valuation.pe_ratio_lyr > 2, valuation.pe_ratio_lyr < 6),
date='2024-04-26')
df1

valuation为市值数据表名,查询条件是静态市盈率大于2而小于6,即在2~6之间。时间为2024-04-26。

单击工具栏运行按钮,快捷键(shift+enter),运行结果如下图:

Screenshot 2024-04-28 at 18.11.50

利用图表显示静态市盈率大于2而小于6的股票的静态市盈率,具体代码如下:

myc1 = df1['pe_ratio_lyr']      # 静态市盈率
matplotlib.rcParams.update({'font.size': 15, 'font.family': 'serif'})
fig, ax = plt.subplots()
ax.plot(myc1, label='静态市盈率')
ax.legend();
ax.set_title('静态市盈率')

单击工具栏运行按钮,快捷键(shift+enter),运行结果如下图:

Screenshot 2024-04-28 at 18.15.56

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/586723.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

el-tabs作为子组件使用页面空白

文章目录 前言一、问题展示二、源码分析三、解决方案 前言 如果el-tabs是子组件&#xff0c;父组件传值value / v-model为空字符&#xff0c;这个时候在watch中监听value / v-model就会发现监听的数据会被调用为‘0’。一定是作为子组件引用&#xff0c;且在watch进行监听&…

【webrtc】MessageHandler 7: 基于线程的消息处理:切换main线程向observer发出通知

以当前线程作为main线程 RemoteAudioSource 作为一个handler 仅实现一个退出清理的功能 首先on message的处理会切换到main 线程 :main_thread_其次,这里在main 线程对sink_ 做清理再次,在main 线程做出状态改变,并能通知给所有的observer 做出on changed 行为。对接mediac…

OpenNJet : 下一代云原生应用引擎

本心、输入输出、结果 文章目录 OpenNJet &#xff1a; 下一代云原生应用引擎前言OpenNJet 技术架构安装 OpenNJet为什么有了 OpenNJetOpenNJet 和 NGINX 是什么关系什么是云原生应用引擎&#xff1f;OpenNJet 的有哪些优势OpenNJet 的有哪些优势 OpenNJet 与国产化OpenNJet 使…

【团体程序设计天梯赛】往年关键真题 L2-036 网红点打卡攻略 模拟 L2-037 包装机 栈和队列 详细分析完整AC代码

【团体程序设计天梯赛 往年关键真题 详细分析&完整AC代码】搞懂了赛场上拿下就稳 【团体程序设计天梯赛 往年关键真题 25分题合集 详细分析&完整AC代码】&#xff08;L2-001 - L2-024&#xff09;搞懂了赛场上拿下就稳了 【团体程序设计天梯赛 往年关键真题 25分题合…

初学React基础

最近准备跟着黑马React学一下React&#xff0c;扩充一下技术面&#xff0c;打算还是以一边学习一边记笔记为主&#xff0c;进行学习&#xff01; 1. React介绍 1.1. React是什么&#xff1f; React是由FaceBook现在称&#xff08;Meta&#xff09;开发的开源 JavaScript 库&a…

SpringCloudStream 3.x rabbit 使用

1. 前言 今天带来的是SpringCloudStream 3.x 的新玩法&#xff0c;通过四大函数式接口的方式进行数据的发送和监听。本文将通过 rabbitMQ 的方式进行演示 3.x版本后是 可以看到 StreamListener 和 EnableBinding 都打上了Deprecated 注解。后续的版本更新中会逐渐替换成函数式…

如何批量修改文件的时间属性?修改创建时间,修改时间和访问时间

一&#xff0c;前言 在Excel中&#xff0c;修改文件的访问时间、创建时间和修改时间通常不是一个直接的功能。但是&#xff0c;我们可以通过一些间接的方法和工具来实现这一目标。请注意&#xff0c;直接修改这些时间戳可能会影响文件的完整性和安全性&#xff0c;因此在进行任…

Python 与 TensorFlow2 生成式 AI(四)

原文&#xff1a;zh.annas-archive.org/md5/d06d282ea0d9c23c57f0ce31225acf76 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 第九章&#xff1a;文本生成方法的崛起 在前几章中&#xff0c;我们讨论了不同的方法和技术来开发和训练生成模型。特别是在第六章“使用 …

WIN10 anaconda 安装 CondaError: Run ‘conda init‘ before ‘conda activate‘

1 下载 https://www.anaconda.com/download/success 2 安装 3 修改环境变量 安装后修改环境变量 4 winrun 进入命令窗口 输入cmd 输入 conda info 5 创建 虚拟环境 conda create -n yolov8 python3.8 -y 6 CondaError: Run ‘conda init’ before ‘conda activate’ c…

[Java、Android面试]_24_Compose为什么绘制要比XML快?(高频问答)

欢迎查看合集&#xff1a; Java、Android面试高频系列文章合集 本人今年参加了很多面试&#xff0c;也有幸拿到了一些大厂的offer&#xff0c;整理了众多面试资料&#xff0c;后续还会分享众多面试资料。 整理成了面试系列&#xff0c;由于时间有限&#xff0c;每天整理一点&am…

GPT3 终极指南(二)

原文&#xff1a;zh.annas-archive.org/md5/6de8906c86a2711a5a84c839bec7e073 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 第五章&#xff1a;GPT-3 作为企业创新的下一步 当一个新的创新或技术转变发生时&#xff0c;大公司通常是最后一个采纳的。它们的等级结构…

将聊天记录与 LangChain 集成:为提升对话机器人体验提供了一种变革性的解决方案

节前&#xff0c;我们星球组织了一场算法岗技术&面试讨论会&#xff0c;邀请了一些互联网大厂朋友、参加社招和校招面试的同学&#xff0c;针对算法岗技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备、面试常考点分享等热门话题进行了深入的讨论。 汇总…

PVDF-SiO₂复合纳米纤维膜

PVDF-SiO₂复合纳米纤维膜是一种结合了聚偏氟乙烯&#xff08;PVDF&#xff09;和二氧化硅&#xff08;SiO₂&#xff09;纳米粒子的新型复合材料。这种材料通常通过静电纺丝技术或其他纤维制备技术制备而成&#xff0c;具有许多良好的性能和广泛的应用前景。 PVDF是一种热塑性…

final、finally、finalize有什么区别?

引言 在Java编程语言中&#xff0c;final、finally和finalize是三个具有不同用途和语义的关键字或方法。它们在编程和面试中经常被提及&#xff0c;因此理解它们之间的区别是非常重要的。 题目 final、finally、 finalize有什么区别&#xff1f; 典型回答 final&#xff1…

ZooKeeper 搭建详细步骤之二(伪集群模式)

ZooKeeper 搭建详细步骤之三&#xff08;真集群&#xff09; ZooKeeper 搭建详细步骤之二&#xff08;伪集群模式&#xff09; ZooKeeper 搭建详细步骤之一&#xff08;单机模式&#xff09; ZooKeeper 及相关概念简介 伪集群搭建 ZooKeeper 伪集群是指在一个单一的物理或虚拟…

活动回顾 | 春起潮涌——硬件驱动的量化交易与AI

4月20日&#xff0c;华锐技术ACLUB联合AMD在上海举办了“春起潮涌——硬件驱动的量化交易与AI”沙龙活动&#xff0c;会议围绕FPGA硬件加速、CPU&网卡调优、AI技术应用等展开&#xff0c;近50位量化IT与分享嘉宾一起探讨硬件技术在量化交易和AI领域的应用和创新。 FPGA在交…

云服务器把端口添加到安全组后无法访问

直接 sudo iptables -I INPUT 5 -p tcp --dport 8085 -j ACCEPT 8085就是端口号 然后再运行服务器 就成功了

YOLOv5入门(二)处理自己数据集(标签统计、数据集划分、数据增强)

上一节中我们讲到如何使用Labelimg工具标注自己的数据集&#xff0c;链接&#xff1a;YOLOv5利用Labelimg标注自己数据集&#xff0c;完成1658张数据集的预处理&#xff0c;接下来将进一步处理这批数据&#xff0c;通常是先划分再做数据增强。 目录 一、统计txt文件各标签类型…

【C语言】——数据在内存中的存储

【C语言】——数据在内存中的存储 一、整数在内存中的存储1.1、整数的存储方式1.2、大小端字节序&#xff08;1&#xff09;大小端字节序的定义&#xff08;2&#xff09;判断大小端 1.3、整型练习 二、浮点数在内存中的存储2.1、引言2.2、浮点数的存储规则2.3、浮点数的存储过…

OI Wiki—递归 分治

//新生训练&#xff0c;搬运整理 递归 定义 递归&#xff08;英语&#xff1a;Recursion&#xff09;&#xff0c;在数学和计算机科学中是指在函数的定义中使用函数自身的方法&#xff0c;在计算机科学中还额外指一种通过重复将问题分解为同类的子问题而解决问题的方法。 引入…