量化因子(二)如何通过量化因子来选股(附代码)
发布时间:2025-7-15 13:42阅读:273
选股是一件难事,整个A股市场,有几千只股票。光是一眼看过去密密麻麻的数据,就让人头晕眼花,更别说一个一个去分析它们的数据了。量化如何选股呢?
一、确定股票池
大家都知道几个名词:“沪深300”“上证50”“中证100”“中证200”“中证500”等。这些名词代表的是“指数”,举例来说明:“沪深300”指的就是从上海证券交易所和深圳证券交易所挑选出经营状况良好、规模庞大且流动性非常高的300只股票组成的指数;而“上证50”是上海证券交易所中规模较大、流动性较高的50只股票组成的指数;“中证500”则是在沪深两市中,选出市值较高的800只股票,再把“沪深 300”中的股票剔除出去,余下的500只股票组成的指数。
在所有这些指数中,一般认为“沪深300”“上证50”“中证500”这3个最能体现市场的情况。简单来说,“沪深 300”体现的是“大盘股”的走势,“上证50”体现的是“大盘股”的走势情况,而“中证500”体现的是“中小盘股”的整体走势。这3个指数没有“好”和“不好”的区别,只是风格不同。大家可以想象一下,对于市值庞大的“超大盘股”来说,要想让它们暴涨或者暴跌,那难度堪比把大象抛到月球上,需要极大的“动能”才行;而“大盘股”的体量也不小,它们的价格波动幅度也不会太大;“中证500”虽然代表“中小盘股”的走势,但由于A股市场经过了这么多年的发展,这些所谓的“中小盘股”的体量也要比创业板、中小板这些板块上的股票大得多,它们的涨跌幅度也只是相对“大盘股”和“超大盘股”来说稍微大一些而已。
我司上市券商,佣金成本价,专项两融利率4.0,免费提供量化软件qmt和ptrade,欢迎咨询!!!
量化新手建议是先“稳中求进”,选择“沪深300”成分股作为选股的“股票池”,并结合量化选股因子,找到其中财务状况最好、发展前景最好的企业的股票,作为未来的投资标的。
二、获取沪深两市的全部指数
为了让没有量化软件的朋友好实践,还是用聚宽去尝试。
大家可以根据自己使用的量化软件的api去修改哦。
# 导入聚宽因子库的 get_factor_values 函数
from jqfactor import get_factor_values
# 导入 pandas
import pandas as pd
# 在聚宽环境中运行
# 指定 get_all_securities 的 types 参数为 'index'
# 查询全部指数
indices = get_all_securities(types=['index'])
# 查看前十条结果
print(indices.head(10))
运行结果:
为了方便展示,我们只选择了其中10条。表中的第一列是指数代码,后面分别是指数的中文名称、简称、上市日期、退市日期和证券类型。对于目前仍然存在的指数,退市日期统一用 2200-01-01表示。
三、获取股票的市值因子
下面我们就来获取沪深300成分股的数据,如果我们想获取这些股票的市值数据,就可以用下面的代码。
# 导入聚宽的因子分析库
from jqfactor import get_factor_values
# 使用 get_index_stocks 函数获取沪深300成分股
# 使用 get_factor_values 函数获取这些成分股的市值
# 注意:get_index_stocks 和 get_factor_values 都是聚宽提供的函数,需要在聚宽环境中运行
factor_mc = get_factor_values(
securities=get_index_stocks('000300.XSHG'), # 获取沪深300成分股
factors=['market_cap'], # 获取市值因子
end_date='2025-06-08', # 结束日期
count=1 # 获取最近1天的数据
)['market_cap']
# 检查结果
# 使用 .T 将原始结果进行转置(行变列,列变行)
print(factor_mc.T.head())
运行结果:
这里的市值是科学计数法,如2.270492e+11,代表2.270492×10^11。
我们可以得到“沪深300”成分股在2025年6月6日的市值。
四、获取股票的现金流因子
除了关心股票的整体市值之外,我们还想了解企业的现金流与股价的对比情况,也就是“市现率”这个指标的情况。毕竟经济大环境不好的话,充足的现金流才是保证企业生存发展的前提。因此,我们来获取一下股票市现率的倒数(因为市现率越小越好,因此其倒数越大越好)。输入代码如下:
# 导入聚宽的因子分析库
from jqfactor import get_factor_values
# 使用 get_index_stocks 函数获取沪深300成分股
# 使用 get_factor_values 函数获取这些成分股的市现率倒数(Cash Flow to Price Ratio)
factor_cfp = get_factor_values(
securities=get_index_stocks('000300.XSHG'),
factors=['cash_flow_to_price_ratio'],
end_date='2025-06-08',
count=1)['cash_flow_to_price_ratio']
# 检查结果
# 使用 .T 将原始结果进行转置(行变列,列变行)
print(factor_cfp.T.head(5))
实现率为负说明公司资金流出,正数说明资金正流入。
五、获取股票的净利率因子
既然我们了解了企业的现金流情况,那么接下来我们就要看看这些企业究竟是盈利还是亏损。如果盈利,那么净利润率又是多少呢?我们就继续来查询这些股票的净利润率数据。输入代码如下:
# 导入聚宽的因子分析库
from jqfactor import get_factor_values
# 使用 get_index_stocks 函数获取沪深300成分股
# 使用 get_factor_values 函数获取这些成分股的净利润率(Net Profit Ratio)
factor_npr = get_factor_values(
securities=get_index_stocks('000300.XSHG'), # 获取沪深300成分股
factors=['net_profit_ratio'], # 获取净利润率因子
end_date='2025-06-08', # 结束日期
count=1 # 获取最近1天的数据
)['net_profit_ratio']
# 检查结果
# 使用 .T 将原始结果进行转置(行变列,列变行)
print(factor_npr.T.head())
000157的净利润率还是比较不错的,约为9.83%,而 000001这只股票的净利润率更是达到了30.8%左右,是一个很不错的数据。
六、获取股票的净利润增长率因子
对企业来说,盈利固然重要,比盈利更重要的是,能够持续不断地创造更多的利润。也就是说,企业需要有良好的成长性。衡量成长性的一个重要指标就是净利润的增长率。下面我们就来获取“沪深300”成分股的净利润增长率数据。输入代码如下:
# 导入聚宽的因子分析库
from jqfactor import get_factor_values
# 使用 get_index_stocks 函数获取沪深300成分股
# 使用 get_factor_values 函数获取这些成分股的净利润增长率(Net Profit Growth Rate)
factor_npgr = get_factor_values(
securities=get_index_stocks('000300.XSHG'), # 获取沪深300成分股
factors=['net_profit_growth_rate'], # 获取净利润增长率因子
end_date='2025-06-09', # 结束日期
count=1 # 获取最近1天的数据
)['net_profit_growth_rate']
# 检查结果
# 使用 .T 将原始结果进行转置(行变列,列变行)
print(factor_npgr.T.head())
000157的净利率增长率还是很好的。


温馨提示:投资有风险,选择需谨慎。

-
想投资又怕高风险?中信证券盘点下半年“稳稳的幸福”板块
2025-09-15 14:59
-
50+科技类ETF排行榜来了!附代码,速收藏
2025-09-15 14:59
-
iPhone17 为何“挤爆牙膏” ,仍然难破增长困局?
2025-09-15 14:59