微盘股TabPFN策略

自动交易
自动交易 这家伙很懒,还没有设置简介

0 人点赞了该文章 · 24 浏览


## 一、策略概述


这是一个基于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模型的微盘股选股策略,通过预测合理市值选择被低估的股票。当前实现使用了简化模型,建议根据实际情况进行优化和改进。


**重要提示**
- 策略需要充分回测验证
- 注意数据质量和模型限制
- 实盘运行需要密切监控
- 根据实际情况调整参数和模型


---


**免责声明**:本策略仅供学习交流使用,不构成投资建议。投资有风险,入市需谨慎。



发布于 1 天前

免责声明:

本文由 自动交易 原创发布于 百果量化交流平台 ,著作权归作者所有。

登录一下,更多精彩内容等你发现,贡献精彩回答,参与评论互动

登录! 还没有账号?去注册

暂无评论