量化选股策略 聚宽

量化选股策略完整分析与优化建议

策略整体架构分析

这个量化交易策略主要由以下几个核心部分组成:

  1. **初始化设置**:配置基准指数、交易参数和全局变量

  2. **选股逻辑**:通过财务指标筛选优质股票

  3. **股票过滤**:排除新股和停牌股

  4. **交易执行**:定期调仓和资金分配

代码详细解析与修正建议

1. 初始化函数 (initialize)

```python

def initialize(context):

基准设置为沪深300指数(修正代码)

set_benchmark('000300.XSHG') # 原代码有大小写错误

启用真实价格模式

set_option('use_real_price', True)

设置成交量比例

set_option('order_volume_ratio', 1)

设置交易成本(修正格式)

set_order_cost(OrderCost(

open_tax=0,

close_tax=0.001,

open_commission=0.0003,

close_commission=0.0003,

close_today_commission=0,

min_commission=5

), type="stock") # 修正type参数

全局变量设置

g.stocknum = 20 # 持仓股票数量

g.days = 20 # 调仓周期(天)

g.refresh_rate = 100 # 刷新率

```

**修正建议**:

  1. 指数代码统一为大写

  2. 补全交易成本参数

  3. 建议增加日志记录功能

2. 选股查询 (query)

```python

q = query(

indicator.code,

valuation.market_cap, # 修正为market_cap

indicator.roe,

indicator.gross_profit_margin

).filter(

valuation.market_cap > 50, # 市值>50亿

valuation.circulation_ratio > 0.95, # 流通比例>95%

indicator.gross_profit_margin > 20, # 毛利率>20%

indicator.roe > 20 # ROE>20%

).order_by(

valuation.market_cap.desc() # 按市值降序

).limit(100) # 限制100只

```

**修正建议**:

  1. 统一使用market_cap而非capitalization

  2. 流通比例字段修正为circulation_ratio

  3. 增加注释说明各筛选条件的商业逻辑

3. 股票过滤函数

```python

def delete_stock(stocks, beginDate, n=750):

"""

排除上市不足n天的股票

:param stocks: 待筛选股票列表

:param beginDate: 当前日期

:param n: 最小上市天数(默认750天)

:return: 符合条件的股票列表

"""

stockList = \[\]

for stock in stocks:

start_date = get_security_info(stock).start_date

if start_date < (beginDate - timedelta(days=n)).date():

stockList.append(stock)

return stockList

def filter_paused_stock(stock_list):

"""

过滤停牌股票

:param stock_list: 待筛选股票列表

:return: 正常交易的股票列表

"""

current_data = get_current_data() # 修正函数名

return stock for stock in stock_list if not current_data\[stock.paused]

```

**修正建议**:

  1. 修正get_current_date()为get_current_data()

  2. 增加函数文档字符串

  3. 统一上市天数参数为750天(3年)

4. 交易执行函数

```python

def trade(context):

if g.days % g.refresh_rate == 0:

获取目标股票列表

stockList = check_stocks(context)

获取当前持仓

sell_list = list(context.portfolio.positions.keys())

确定需要卖出的股票(持仓但不在目标列表中的)

sells = list(set(sell_list).difference(set(stockList)))

执行卖出

for stock in sells:

order_target_value(stock, 0)

资金分配逻辑

if len(context.portfolio.positions) < g.stocknum:

num = g.stocknum - len(context.portfolio.positions)

cash_per_stock = context.portfolio.total_value / g.stocknum

for stock in stockList:num:

if stock not in context.portfolio.positions:

order_target_value(stock, cash_per_stock)

```

**优化建议**:

  1. 增加风险控制逻辑(单只股票最大仓位限制)

  2. 考虑交易滑点设置

  3. 增加交易日志记录

完整策略逻辑流程图

  1. 初始化设置 → 2. 定期检查调仓条件 → 3. 执行财务数据查询 → 4. 过滤新股和停牌股 → 5. 确定买卖清单 → 6. 执行交易 → 7. 等待下一周期

策略优化方向

  1. **风险控制增强**:
  • 增加最大回撤控制

  • 设置单行业最大暴露比例

  • 加入黑名单机制

  1. **选股指标扩展**:

```python

.filter(

valuation.pe_ratio < 30, # 市盈率<30

indicator.debt_to_assets < 0.6, # 资产负债率<60%

indicator.dividend_yield > 0.01 # 股息率>1%

)

```

  1. **交易执行优化**:
  • 引入VWAP/TWAP算法交易

  • 增加止盈止损逻辑

  • 考虑市场状态判断(牛市/熊市不同参数)

  1. **绩效分析**:
  • 增加夏普率计算

  • 跟踪信息比率

  • 分析行业分布

这个策略框架已经具备了价值投资的基本要素,通过上述优化可以进一步提升策略的稳定性和风险调整后收益。建议在实际应用前进行充分的回测和模拟交易验证。

9.4规模因子

总市值

价值因子

总资产净利率

相关推荐
YOU OU2 小时前
Redis基础常识与命令
数据库·redis·缓存
Scott9999HH2 小时前
【IIoT流量实战】蒸汽管道阀门全关却仍有流量?用 Python 实现涡街信号 FFT 频谱分析与温压全补偿积算网关,深度拆解靠谱的涡街流量计厂家硬核技术标准
开发语言·python
腻害兔2 小时前
【若依项目-产品经理视角】深度拆解 RuoYi-Vue-Pro 商城模块:从商品管理到交易引擎,50 张表撑起一整套电商系统
java·大数据·vue.js·产品经理·ai编程
码智社3 小时前
AES加密原理详解及Java实现加解密实战
java·开发语言
AI云海3 小时前
python 列表、元组、集合和字典
开发语言·python
萧瑟余晖4 小时前
JDK 26 新特性详解
java·开发语言
Database_Cool_4 小时前
OLTP 和 OLAP 区别详解:分析型数据库和事务型数据库怎么选(附阿里云 AnalyticDB MySQL 选型指南)
数据库·mysql·阿里云
爱写代码的阿森5 小时前
鸿蒙三方库 | harmony-utils之KvUtil键值型数据库操作详解
数据库·华为·harmonyos·鸿蒙·huawei
马优晨5 小时前
Freemarker 完整讲解(后端 Java 模板引擎)
java·开发语言·freemarker·freemarker 完整讲解·freemarker模板引擎
Database_Cool_5 小时前
单机 MySQL 迁移到分布式数据库方便吗?阿里云 PolarDB-X 100% MySQL 协议兼容零改造平滑迁移
数据库·分布式·mysql