微盘股TabPFN策略

## 一、策略概述(添加:yhrj777777,可共同讨论学习)
这是一个基于TabPFN模型的微盘股选股策略,通过预测股票合理对数市值,选择被低估的微盘股进行投资。
### 核心特点
1. **微盘股选股**:筛选中小综指市值最小的50只股票
2. **TabPFN模型**:使用回归模型预测合理市值
3. **防御模式**:1/4月切换到防御ETF规避风险
4. **严格风控**:涨停打开后卖出,多层股票过滤
---
## 二、策略实现说明
### 2.1 模型实现
**注意**:由于Ptrade环境可能不支持PyTorch,当前实现使用了简化版本:
1. **主要方案**:使用sklearn的LinearRegression(如果可用)
2. **备用方案**:使用numpy实现的最小二乘法线性回归
**理想实现**:真正的TabPFN模型应该基于Transformer架构,包含:
- 4层Transformer编码器
- 多头注意力机制
- 位置编码
- 前馈网络
**改进建议**:
- 如果Ptrade支持PyTorch,可以实现完整的TabPFN模型
- 或者使用更复杂的特征工程来弥补模型简化
### 2.2 特征构建
#### 财务特征(6维)
1. **log_NC**:净资产对数
2. **LEV**:资产负债率
3. **NI_p**:正净利润对数
4. **NI_n**:负净利润对数
5. **g**:营收同比增长率
6. **log_RD**:研发费用对数
#### 行业特征(28维)
申万一级行业哑变量,每个行业1或0。
#### 时序特征
- 5个时间步(当前日期往前推0-4天)
- 每个时间步34维特征(6财务+28行业)
- 最终特征维度:[n_stocks, 5, 34]
### 2.3 选股逻辑
1. **模型预测**:预测每只股票的合理对数市值
2. **计算因子值**:真实对数市值 - 预测对数市值
3. **排序选股**:因子值越小,股票越被低估
4. **过滤条件**:排除涨停、跌停股票
---
## 三、关键功能实现(添加:yhrj777777,可共同讨论学习)
### 3.1 微盘股筛选
```python
1. 获取中小综指成分股
2. 过滤规则:
- 排除科创板/北交所(68/4/8开头)
- 排除ST股票
- 排除停牌股票
- 上市至少375天
3. 按市值升序排序
4. 选择前50只
```
### 3.2 防御模式
**触发条件**:1月和4月
**操作**:
- 卖出所有股票
- 等权重买入3只防御ETF:
- 518880.SS(黄金ETF)
- 513100.SS(港股ETF)
- 159985.SZ(科创ETF)
**退出条件**:非1/4月时自动退出
### 3.3 风控机制
1. **涨停风控**:
- 每日14:00检查昨日涨停的持仓股
- 如果涨停打开,立即卖出
2. **股票过滤**:
- 排除ST股票
- 排除停牌股票
- 排除新股(上市<375天)
- 买入时排除涨停股
- 卖出时排除跌停股
3. **最小交易单位**:
- 确保买入金额≥100股(1手)
---
## 四、参数配置
### 调仓参数
```python
REFRESH_RATE = 10 # 每10天调仓一次
POSITION_COUNT = 10 # 持仓10只股票
```
### 微盘股筛选
```python
MIN_LISTED_DAYS = 375 # 上市至少375天
MICROPENNY_COUNT = 50 # 微盘股池50只
```
### 防御模式
```python
DEFENSIVE_MONTHS = [1, 4] # 1月和4月
DEFENSIVE_ETFS = ['518880.SS', '513100.SS', '159985.SZ']
```
### 模型参数
```python
TABPFN_CONFIG = {
'n_layers': 4, # Transformer层数(当前未使用)
'n_timesteps': 5, # 时序步数
'n_features': 34, # 特征维度
'max_epochs': 20, # 最大训练轮数
'batch_size': 16, # 批次大小
}
```
---
## 五、使用注意事项(添加:yhrj777777,可共同讨论学习)
### 5.1 数据依赖
策略依赖以下数据:
1. **财务数据**:需要`get_fundamentals`支持以下字段:
- total_value(总市值)
- total_assets(总资产)
- total_liab(总负债)
- net_profit(净利润)
- revenue(营收)
- revenue_growth_rate(营收增长率)
- rd_expense(研发费用)
2. **行业数据**:需要`get_stock_blocks`返回行业信息
3. **指数成分股**:需要`get_index_stocks`支持中小综指(399101)
### 5.2 模型限制
当前实现的模型是简化版本:
- **不是真正的Transformer**:使用线性回归作为替代
- **特征交互有限**:无法捕捉复杂的特征交互
- **时序建模简化**:将时序特征展平,丢失部分时序信息
**改进方向**:
1. 如果支持PyTorch,实现完整的TabPFN模型
2. 使用更复杂的特征工程(如特征交叉)
3. 使用其他机器学习模型(如XGBoost、LightGBM)
### 5.3 性能考虑
1. **数据获取**:需要获取大量股票的财务数据,可能较慢
2. **模型训练**:每次调仓都需要重新训练模型
3. **计算资源**:如果实现完整TabPFN,需要更多计算资源
---
## 六、策略优化建议
### 6.1 模型优化
1. **实现完整TabPFN**:
- 使用PyTorch实现Transformer架构
- 添加位置编码
- 实现多头注意力机制
2. **特征工程**:
- 添加技术指标(如动量、换手率)
- 特征交叉(如财务指标×行业特征)
- 时序特征聚合(如均值、方差)
3. **模型集成**:
- 使用多个模型预测,取平均
- 根据市场环境选择不同模型
### 6.2 选股优化
1. **动态调仓频率**:
- 根据市场波动率调整调仓频率
- 市场波动大时增加调仓频率
2. **仓位管理**:
- 根据因子值大小分配仓位
- 因子值越小,仓位越大
3. **行业分散**:
- 限制单个行业的持仓数量
- 确保行业分散
### 6.3 风控优化
1. **动态止损**:
- 根据股票波动率设置止损
- 使用ATR(平均真实波幅)动态止损
2. **市场环境判断**:
- 根据市场环境调整仓位
- 熊市时降低仓位或切换到防御模式
3. **风险指标监控**:
- 监控组合波动率
- 监控最大回撤
- 达到阈值时降低仓位
---
## 七、回测建议(添加:yhrj777777,可共同讨论学习)
### 7.1 回测设置
1. **时间段**:建议至少1-2年,包含不同市场环境
2. **初始资金**:建议与实际资金规模相近
3. **基准**:中小综指(399101)
### 7.2 关注指标
1. **收益指标**:
- 年化收益率
- 累计收益率
- 相对基准的超额收益
2. **风险指标**:
- 最大回撤
- 波动率
- 夏普比率
3. **交易指标**:
- 胜率
- 盈亏比
- 换手率
### 7.3 回测注意事项
1. **数据质量**:确保财务数据完整准确
2. **未来函数**:避免使用未来数据
3. **交易成本**:考虑佣金和滑点
4. **停牌处理**:正确处理停牌股票
---
## 八、实盘运行建议
### 8.1 初期测试
1. **小仓位测试**:使用10-20%的资金
2. **密切监控**:每日检查策略表现
3. **记录日志**:记录所有交易和异常
### 8.2 逐步优化
1. **参数调优**:根据实盘表现调整参数
2. **模型改进**:逐步改进模型实现
3. **风控加强**:根据实际情况加强风控
### 8.3 风险提示
1. **模型风险**:简化模型可能效果不如完整模型
2. **数据风险**:数据质量影响策略表现
3. **市场风险**:极端市场情况可能超出策略控制
4. **流动性风险**:微盘股流动性较差,可能影响交易
---
## 九、代码结构说明
### 主要函数
1. **initialize()**:初始化策略
2. **prepare_stock_list()**:更新持仓和涨停列表
3. **trade()**:核心交易逻辑
4. **_filter_micropenny_stocks()**:筛选微盘股
5. **_build_features()**:构建时序特征
6. **_train_tabpfn_model()**:训练模型
7. **_select_stocks()**:选股
8. **_rebalance()**:调仓执行
9. **enter_defensive_mode()**:进入防御模式
10. **exit_defensive_mode()**:退出防御模式
11. **check_limit_up()**:检查涨停
12. **print_position_info()**:打印持仓信息
---
## 十、总结
这是一个基于TabPFN模型的微盘股选股策略,通过预测合理市值选择被低估的股票。当前实现使用了简化模型,建议根据实际情况进行优化和改进。
**重要提示**:
- 策略需要充分回测验证
- 注意数据质量和模型限制
- 实盘运行需要密切监控
- 根据实际情况调整参数和模型
---
**免责声明**:本策略仅供学习交流使用,不构成投资建议。投资有风险,入市需谨慎。(添加:yhrj777777,可共同讨论学习)

全部 0条评论