【量化实战】如何用Python实现一个经典的小市值轮动策略?
  13693301300 15天前 130 0

一、 策略核心思想

在A股市场中,“小市值”一直是一个长期有效的alpha因子。本策略的核心逻辑非常简单直接:买入全市场市值最小的一批股票,并定期进行优胜劣汰的轮动。

通过剔除低价股(避开面值退市风险)和停牌股,我们筛选出流动性尚可的最小市值公司,利用其波动大、弹性高的特性获取超额收益。


二、 策略逻辑详解

本策略基于 panda_backtest 框架开发,主要包含以下几个关键步骤:

1. 股票池初选

  • 全市场扫描: 每日获取当前在售的所有A股名单。
  • 因式过滤: 剔除股价低于 1 元的“准仙股”,防范退市风险。
  • 市值排序: 按照 market_cap(总市值)从从小到大进行精确排序。

2. 定期轮动机制

  • 调仓频率: 设置为每 5个交易日(一周)调仓一次。
  • 目的: 既能及时捕捉市值变化带来的机会,又能有效覆盖交易成本,避免频繁调仓损耗利润。

3. 仓位管理

  • 等权配置: 将账户总资产平均分配到前 20 只目标个股中。
  • 自动换仓: 使用 target_stock_group_order 接口,一键完成“卖出旧持仓、买入新目标”的操作,确保持仓始终符合策略要求。

三、 代码亮点解析

在这份代码实现中,有几个细节非常值得量化初学者学习:

  • 防御性编程: 代码中加入了大量的 try...exceptNone 值检查。在真实回测和实盘中,数据缺失是常态,这种写法能保证程序不会因为某一天的数据异常而崩溃。
  • 交易细节处理: 在计算买入股数时,使用了 int(cash_per_stock // price // 100 * 100)。这确保了买入数量是 100股(一手)的整数倍,符合A股交易规则。
  • 状态监控: 策略包含了 before_tradingafter_trading 模块,每日开盘前打印资产概况,收盘后统计盈亏,让投资者对账户动态了如指掌。

四、 核心代码片段展示

# 核心选股逻辑:获取小市值股票池 def _get_small_cap_universe(context, trade_date): # 1. 获取全市场股票及市值数据 # 2. 剔除低价股 (price < 1.0) # 3. 按市值从小到大排序 df = df.sort_values("market_cap", ascending=True) # 4. 取前 N 只作为目标 return df.head(context.max_stocks)["symbol"].tolist()
最后一次编辑于 15天前 0

暂无评论

推荐阅读
  joe   8天前   70   1   1 因子大赛