142-社保重仓基本面选股策略
由qxiao创建,最终由qxiao 被浏览 79 用户
策略介绍
- 基于十大股东的持股信息实现一个较为复杂的选股策略模版
- 此策略可以作为一个选股和线性策略的常用模版使用
策略流程
-
选股:选股逻辑——选择前十大流通股东中包含社保基金的股票
-
打分:按照社保基金股东持股权重进行打分
-
仓位:根据打分和持股数量分配仓位
-
回测:设置调仓周期和买卖点等,回测查看效果
\
策略依据
- 稳健的投资风格:社保基金作为大型合规机构投资者,其主要目标是保值增值,且通常采取稳健的投资策略。这些基金注重长期持有,避免短期炒作,选择的是预期收益大于预期风险的优质公司。跟随社保基金的投资决策,能更好地把握这些低风险高收益的股票。
- 专业的投资决策:社保基金的投资决策基于深厚的研究和分析,投资团队通常拥有丰富的行业知识和专业能力。这意味着社保基金的持仓股票经过了严格的筛选和分析,其投资标的往往具有较强的市场竞争力和成长潜力。
- 风险分散:社保基金持有的股票通常分布在多个行业和领域,这有助于分散投资风险。跟随社保基金买入的股票,也能有效地实现投资的风险分散,从而降低单一股票或行业的波动对整体投资组合的影响。
- 稳定的现金分红:社保基金偏好大型蓝筹股,这些公司通常具有稳定的现金流和较高的分红回报。投资这些股票可以为投资者提供稳定的现金分红收益,从而实现长期的财富增值。
- 长期投资优势:社保基金的投资策略通常以长期持有为主,避免短期市场波动的干扰。这种长期投资的理念与很多普通投资者的短期操作相对立,有助于获得更为稳健的投资回报。
- 风险控制:社保基金通常会避开“黑五类”股票(如业绩不佳、负面新闻频出的公司)以及热门概念股。这种风险控制措施可以保护投资者避免那些高风险、高波动的股票,从而提升整体投资的安全边际。
策略实现
- 这里基于SQL的实现,相对比较复杂
SQL代码介绍:
ssf_flag表目的为了实现给十大流通股中存在社保基金的股票增加一个标签‘1’
ssf_pct表目的为了统计各个股票社保基金的持股比例
ssf表目的为了联结ssf_flag和ssf_pct
最后添加择股条件进行择股,并将持股比例作为排序持仓依据‘score’
WITH ssf_flag AS (
SELECT
end_date as date,
instrument,
-- 计算是否存在社保基金持股的标志
CASE
WHEN SUM(CASE WHEN holder_name LIKE '%社保基金%' THEN 1 ELSE 0 END) > 0 THEN 1
ELSE 0
END AS ssf_hold_flag,
FROM cn_stock_float_shareholder_top10
GROUP BY end_date, instrument
),
ssf_pct AS (
SELECT
end_date as date,
instrument,
-- 计算社保基金持股比例
SUM(holding_pct_total) as ssh_hold_pct,
FROM cn_stock_float_shareholder_top10
WHERE holder_name LIKE '%社保基金%'
GROUP BY end_date, instrument
),
ssf AS (
SELECT
ssf_flag.date,
ssf_flag.instrument,
ssf_flag.ssf_hold_flag,
ssf_pct.ssh_hold_pct,
FROM ssf_flag
PRUNE JOIN ssf_pct USING (date, instrument)
)
SELECT
f.date, f.instrument, f.is_risk_warning, f.pe_ttm, f.float_market_cap, f.list_sector,
s.date as end_date, s.ssf_hold_flag, s.ssh_hold_pct as score -- score就是作为排序的依据,只有score最大的10只股才能够进入持仓
FROM cn_stock_prefactors as f
-- 处理时态或类似顺序数据时的常见操作是在表中查找最近的(第一个)数据,具体见数据文档
ASOF JOIN ssf as s
ON f.instrument = s.instrument
AND s.date <= f.date
QUALIFY f.pe_ttm > 0 -- pe>0
AND f.is_risk_warning = 0 -- 风险警示: 0-正常, 1-风险警示
AND f.float_market_cap > 100000000 -- 流通市值大于10亿
AND f.list_sector = 1 -- 基本信息-上市板块代码: 0-未知;1-主板;2-创业板;3-科创板;4-北交所,
AND s.ssf_hold_flag = 1 -- 十大流通股东是否有社保基金
仓位分配模块
- m4 仓位分配,选定开始与结束日期参考 101 / 102 的使用介绍
数据抽取模块
BigTrader模块
策略回测结果
\
回测设置
时间跨度:2020-01-01~2024-08-23
策略执行频率:日频
买入价格:开盘价
卖出价格:收盘价
持股数量:10
排序因子:社保基金持股比例
筛选条件:
- 非ST
- 主板
- 非退市
- 流通市值大于10亿
- PE大于0
- 十大流通股东的名称包含社保
代码实现
https://bigquant.com/codesharev3/6f9b48bd-fb42-4914-83ff-5bfea1564c53
\