BigQuant使用文档

142-社保重仓基本面选股策略

由qxiao创建,最终由qxiao 被浏览 79 用户

策略介绍

  • 基于十大股东的持股信息实现一个较为复杂的选股策略模版
  • 此策略可以作为一个选股和线性策略的常用模版使用

策略流程

  1. 选股:选股逻辑——选择前十大流通股东中包含社保基金的股票

  2. 打分:按照社保基金股东持股权重进行打分

  3. 仓位:根据打分和持股数量分配仓位

  4. 回测:设置调仓周期和买卖点等,回测查看效果

    \

策略依据

  • 稳健的投资风格:社保基金作为大型合规机构投资者,其主要目标是保值增值,且通常采取稳健的投资策略。这些基金注重长期持有,避免短期炒作,选择的是预期收益大于预期风险的优质公司。跟随社保基金的投资决策,能更好地把握这些低风险高收益的股票。
  • 专业的投资决策:社保基金的投资决策基于深厚的研究和分析,投资团队通常拥有丰富的行业知识和专业能力。这意味着社保基金的持仓股票经过了严格的筛选和分析,其投资标的往往具有较强的市场竞争力和成长潜力。
  • 风险分散:社保基金持有的股票通常分布在多个行业和领域,这有助于分散投资风险。跟随社保基金买入的股票,也能有效地实现投资的风险分散,从而降低单一股票或行业的波动对整体投资组合的影响。
  • 稳定的现金分红:社保基金偏好大型蓝筹股,这些公司通常具有稳定的现金流和较高的分红回报。投资这些股票可以为投资者提供稳定的现金分红收益,从而实现长期的财富增值。
  • 长期投资优势:社保基金的投资策略通常以长期持有为主,避免短期市场波动的干扰。这种长期投资的理念与很多普通投资者的短期操作相对立,有助于获得更为稳健的投资回报。
  • 风险控制:社保基金通常会避开“黑五类”股票(如业绩不佳、负面新闻频出的公司)以及热门概念股。这种风险控制措施可以保护投资者避免那些高风险、高波动的股票,从而提升整体投资的安全边际。

策略实现

  • 这里基于SQL的实现,相对比较复杂

SQL代码介绍:

ssf_flag表目的为了实现给十大流通股中存在社保基金的股票增加一个标签‘1’

ssf_pct表目的为了统计各个股票社保基金的持股比例

ssf表目的为了联结ssf_flagssf_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 的使用介绍

数据抽取模块

  • m3 数据抽取,选定开始与结束日期参考 101 / 102 的使用介绍

BigTrader模块

  • m5 回测交易,参考 101 / 102 的使用介绍

策略回测结果


\

回测设置

时间跨度:2020-01-01~2024-08-23

策略执行频率:日频

买入价格:开盘价

卖出价格:收盘价

持股数量:10

排序因子:社保基金持股比例

筛选条件:

  • 非ST
  • 主板
  • 非退市
  • 流通市值大于10亿
  • PE大于0
  • 十大流通股东的名称包含社保

代码实现

https://bigquant.com/codesharev3/6f9b48bd-fb42-4914-83ff-5bfea1564c53






\

标签

选股策略策略回测
{link}