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

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

VBA技术资料MF147:从Excel运行PowerPoint演示文稿

我给VBA的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高自己的工作效率&#xff0c;而且可以提高数据的准确度。“VBA语言専攻”提供的教程一共九套&#xff0c;分为初级、中级、高级三大部分&#xff0c;教程是对VBA的系统讲解&#…

数组的扩容与缩容

数组的扩容与缩容 文章目录 数组的扩容与缩容数组的扩容内存分析 数组的缩容内存分析内存分析 数组的扩容 数组扩容是指当原有数组的空间不足以容纳更多的元素时&#xff0c;创建一个新的、长度更大的数组&#xff0c;并将原数组中的元素复制到新数组中&#xff0c;然后更新原…

《半小时漫画论语》读书笔记

站在几年前看现在的我&#xff0c;感觉多了几分犹豫、内耗&#xff0c;少了几分勇敢。 今天重新读下论语&#xff0c;矫正一下人生态度。 一、论语是什么 论语&#xff0c;主要记载了孔子和他弟子们日常说的话、做的事。 孔子&#xff0c;读书人心中的圣人&#xff0c;中国历…

数据通信-A

数据通信 一、数据通信网络基础二、VRP系统三、eNSP配置命令 不是从零开始&#xff0c;有一些基础&#xff0c;主要记录配置命令。一、数据通信网络基础 图标&#xff1a;主要是认识第一行。 常见术语&#xff1a;数据通信网络最基本的功能是实现数据互通。 数据载荷&#…

【C++】滑动窗口:长度最小的子数组

1.题目 2.算法分析 这种题目&#xff0c;首先想到的是暴力穷举法&#xff1a; 用两层循环取遍该数组的所有子数组&#xff0c;然后找到那个最短的就可以了。 我们的滑动窗口就是对这种暴力穷举法进行优化&#xff1a; 主要是舍弃的思想&#xff0c;舍弃那些一定不可能是最终…

jupyter notebook切换conda虚拟环境

首先&#xff0c;切换到某个虚拟环境&#xff0c;本人切换到了d2l环境&#xff1a; (d2l) C:\Users\10129>pip install ipykernel然后&#xff0c;如代码所示安装ipykernel包 最后&#xff0c;按下述代码执行&#xff1a; (d2l) C:\Users\10129>python -m ipykernel i…

857.雇佣K名工人的最低成本

题目说的其实是有点乱的,所以我们可能抓不住重点,甚至都不太清楚规则,比如 eg. quality[3,1,10,10,1] wage[4,8,200,200,7] 这里是选下标0,1,4 ->单价为8 但是想清楚其实就很easy. 就是 贪心(sort) 优先队列 梳理下我们发现其实要让每个人得到最低期望,就要按照当前最贵…

vue中配置 测试、准生产、生产环境

在package.json,scripts中配置 "dev": "vue-cli-service serve --open --mode dev",在项目根目录下配置 新建 .env.dev 和.env.development文件 //类似于title NODE_ENV "serve" //各环境API数据接口请求地址 VUE_APP_BASE_API "http:…

Python绘制的好看统计图

代码 sx [Accent, Accent_r, Blues, Blues_r, BrBG, BrBG_r, BuGn, BuGn_r, BuPu, BuPu_r, CMRmap, CMRmap_r, Dark2, Dark2_r, GnBu, GnBu_r, Greens, Greens_r, Greys, Greys_r, OrRd, OrRd_r, Oranges, Oranges_r, PRGn, PRGn_r, Paired, Paired_r, Pastel1, Pastel1_r, P…

DataTrove:一款针对大规模文本数据的处理、过滤和消除重复数据工具

关于DataTrove DataTrove是一款针对大规模文本数据的处理、过滤和消除重复数据工具&#xff0c;该工具可以通过提供一组平台无关的可定制管道处理块&#xff0c;帮助广大研究人员从各种复杂脚本中解放出来&#xff0c;同时还允许我们轻松添加自定义功能。 DataTrove所实现的数…

Linux内核之原子操作:atomic_long_inc用法实例(六十六)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

【C语言】atoi和atof函数的使用

人生应该树立目标&#xff0c;否则你的精力会白白浪费。&#x1f493;&#x1f493;&#x1f493; 目录 •&#x1f319;知识回顾 &#x1f34b;知识点一&#xff1a;atoi函数的使用和实现 • &#x1f330;1.函数介绍 • &#x1f330;2.代码演示 • &#x1f330;3.atoi函数的…

springboot + slf4j + log4j2

<!--Web依赖--> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><exclusions><exclusion><groupId>org.springframework.boot</groupId><artifact…

Oracle 执行计划

1.执行计划 执行计划是一条查询语句在Oracle中的执行过程或访问路径的描述。 执行计划描述了SQL引擎为执行SQL语句进行的操作&#xff1b;分析SQL语句相关的性能问题或仅仅质疑查询优化器的决定时&#xff0c;必须知道执行计划&#xff1b;所以执行计划常用于sql调优。 2.查…

python学习笔记----异常、模块与包(九)

一、异常 1.1 什么是异常 在Python中&#xff0c;异常是程序执行时发生的错误。当Python检测到一个错误时&#xff0c;它会引发一个异常&#xff0c;这可能是由于多种原因&#xff0c;如尝试除以零、访问不存在的文件&#xff0c;或者尝试从列表中获取不存在的索引等。异常处…

在Centos7上部署LDAP服务

安装ldap和设置自起 - 安装ldap yum install -y openldap-servers openldap-clients openldap openldap-devel compat-openldap openldap-servers-sql- 启动和开机自起 systemctl start slapd systemctl enable slapd- 查看服务是否安装成功 配置ldap - 创建第一个管理账号…

基于MSOGI的交叉对消谐波信号提取网络MATLAB仿真

微❤关注“电气仔推送”获得资料&#xff08;专享优惠&#xff09; 模型简介&#xff1a; 此模型利用二阶广义积分器&#xff08;SOGI&#xff09;对基波电流和相应次的谐波电流进行取 &#xff0c;具体是通过多个基于二阶广义积分器的正交信号发生器 &#xff08; S&#xf…

JAVA面试之MQ

如何保证消息的可靠传输&#xff1f;如果消息丢了怎么办 数据的丢失问题&#xff0c;可能出现在生产者、MQ、消费者中。 &#xff08;1&#xff09;生产者发送消息时丢失&#xff1a; ①生产者发送消息时连接MQ失败 ②生产者发送消息到达MQ后未找到Exchange(交换机) ③生产者发…

按照数组原来的规律将新插入的数组插入(C语言)

一、N-S流程图&#xff1b; 二、运行结果&#xff1b; 三、源代码&#xff1b; # define _CRT_SECURE_NO_WARNINGS # include <stdio.h>int main() {//初始化变量值&#xff1b;int i 0;int j 0;int temp1 0;int temp2 0;int end 0;int number 0;int a[11] { 1, …

LeetCode 131 —— 分割回文串

阅读目录 1. 题目2. 解题思路3. 代码实现 1. 题目 2. 解题思路 首先&#xff0c;按照 LeetCode 5——最长回文子串 中的思路&#xff0c;我们先求出 d p dp dp&#xff0c;这样我们就知道了所有的子串是否是回文子串。 然后&#xff0c;我们进行一个 dfs 搜索&#xff0c;起…