微盘股TabPFN策略说明

自动交易专家
自动交易专家 This guy is lazy,Introduction has not been set

0 People liked this article · 350 views

 微盘股TabPFN策略说明文档


## 一、策略概述


这是一个基于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. **过滤条件**:排除涨停、跌停股票


---


## 三、关键功能实现


### 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,  # 批次大小
}
```


---


## 五、使用注意事项


### 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. **风险指标监控**
   - 监控组合波动率
   - 监控最大回撤
   - 达到阈值时降低仓位


---


## 七、回测建议


### 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

Published on 2025-12-12 13:03

Disclaimers:

This document is written by 自动交易专家 Original published on 百果量化交流平台 ,The copyright belongs to the author。

Log in,More exciting content waiting for you to find,Contribute wonderful answers,Participate in comment interaction

go Sign in! No accountgoregister