神启 发布于2025-11-27
回复 28
浏览 2687
41
*300和1000指增这种大家一般也看不上,这些产品会涉及到未来工作需求,只发这一次,给大家一点思路!模型训练文档就不发了,毕竟用的多了会失效,也会损害很多同行的利益。*
**训练时间到24年1月1日**
### 一、策略核心目标
该策略是**基于Transformer时间序列模型的沪深300成分股量化选股策略**,核心逻辑是:通过Transformer模型预测股票未来短期表现并输出评分,每周调仓持有评分最高的10只股票;同时对持仓中昨日涨停的股票做日内风控(涨停打开即卖出),过滤科创板/ST/次新股等高风险标的,最终追求超越沪深300指数(000300.XSHG)的收益。
### 二、策略整体运行流程(按时间/触发逻辑拆解)
策略基于聚宽(JoinQuant)平台的定时任务驱动,整体流程遵循「初始化→每日预处理→周度核心调仓→日内风控→收盘复盘」的闭环,具体如下:
#### 1. 初始化阶段(策略启动时仅执行1次:`initialize(context)`)
作用:配置基础规则、初始化全局变量、加载模型,为后续运行铺底。
```python
# 核心初始化内容(对应代码逻辑)
1. 交易规则配置:
- 基准:沪深300指数(000300.XSHG)
- 真实价格交易、防未来函数、滑点0、交易成本(印花税0.1%、佣金0.03%等)
2. 全局变量初始化:
- g.stock_num=10(目标持仓10只)、g.hold_list(当前持仓)、g.yesterday_HL_list(昨日涨停持仓股)等
3. 模型加载:
- 加载预训练的Transformer模型(model_Transformer300 (0.3).pt)
- 初始化MinMaxScaler(用于特征归一化)
4. 定时任务注册:
- 9:05每日执行:prepare_stock_list(持仓/涨停股预处理)
- 每周一9:30执行:weekly_adjustment(周度核心调仓)
- 14:00每日执行:check_limit_up(涨停股日内风控)
- 15:10每日执行:print_position_info(收盘复盘)
```
#### 2. 每日预处理(9:05触发:`prepare_stock_list(context)`)
作用:开盘前更新关键持仓信息,为当日风控/调仓做准备。
```python
# 核心逻辑
1. 更新当前持仓列表:g.hold_list = 账户实际持仓的股票代码列表
2. 筛选昨日涨停的持仓股:
- 调取持仓股昨日的收盘价、涨停价数据
- 若收盘价=涨停价,加入g.yesterday_HL_list(后续风控监控)
```
#### 3. 周度核心调仓(每周一9:30触发:`weekly_adjustment(context)`)
这是策略的**核心环节**,完整流程为「选股→卖旧→买新」,具体拆解:
##### 步骤1:选股(调用`get_stock_list(context)`)
基于Transformer模型对沪深300成分股打分,筛选前10只高分股:
```python
# 选股子流程
1. 基础池:获取沪深300最新成分股(按调仓日的前一日数据)
2. 高风险过滤(四层过滤,与训练数据一致):
- 板块过滤:剔除科创板(68开头)、北交所(4/8开头)
- 风险过滤:剔除ST/*ST/退市股(名称含ST/*/退)
- 流动性过滤:剔除停牌股
- 次新过滤:剔除上市不满375天的股票
3. 模型打分(核心):
- 逐股提取过去60天日度K线特征(open/close/high/low/volume/money)
- 数据校验:剔除60天数据缺失/成交量< 1000万的股票
- 特征归一化:MinMaxScaler逐股、逐特征归一化到[0,1]
- Transformer预测:将60天序列特征输入模型,输出单值score(代表未来表现预期)
4. 最终选股:按score降序排序,取前10只股票作为目标持仓
```
##### 步骤2:卖出非目标股票
```python
# 卖出逻辑
1. 遍历当前持仓(g.hold_list):
- 若股票不在目标列表 + 非昨日涨停股(g.yesterday_HL_list),执行卖出
- 保留昨日涨停股(避免涨停日卖出错失后续收益)
```
##### 步骤3:买入新目标股票(平均分配资金)
```python
# 买入逻辑
1. 筛选需买入的股票:目标列表中未持仓的股票(need_buy)
2. 资金分配:可用现金 ÷ 需买入数量 = 单只股票分配金额(cash_per_stock)
3. 逐股买入:
- 校验:停牌股跳过
- 交易规则:
✅ 科创板(68开头):限价单(当前价×1.02 或 涨停价,取低值)
✅ 非科创板:市价单
✅ 最低1手限制:若分配金额< 1手(100股×当前价),跳过买入
```
#### 4. 日内风控(14:00触发:`check_limit_up(context)`)
作用:监控昨日涨停的持仓股,控制短期波动风险。
```python
# 风控逻辑
1. 批量调取g.yesterday_HL_list中股票的实时价格、涨停价
2. 若某股票实时收盘价 < 涨停价(涨停打开):
- 执行卖出操作
- 从g.yesterday_HL_list中移除该股票
```
#### 5. 收盘复盘(15:10触发:`print_position_info(context)`)
作用:输出当日持仓信息,便于监控和回测分析。
```python
# 输出内容
1. 账户整体信息:总资产、现金、现金比例、持仓数量
2. 持仓明细:每只股票的代码/名称/持仓成本/当前价格/收益率/持仓权重
```
### 三、策略核心逻辑补充说明
#### 1. Transformer模型的作用逻辑
- 输入:60天×6维时间序列特征(结构化K线数据)
- 模型处理:通过位置编码注入时间信息→3层Transformer编码器捕捉长程依赖→最后一个时间步输出映射为score
- 输出:score越高,模型预测该股票未来短期收益率越高,选股优先级越高
#### 2. 风险控制设计(多层防护)
| 风控维度 | 具体规则 | 目的 |
|----------------|-----------------------------------|--------------------------|
| 选股前过滤 | 剔除ST/停牌/次新/科创板股票 | 规避基本面/流动性风险 |
| 调仓时保留 | 昨日涨停股暂不卖出 | 避免涨停日卖出错失收益 |
| 日内监控 | 涨停打开即卖出 | 控制涨停板炸板的回撤风险 |
| 交易规则 | 滑点0、固定交易成本、1手限制 | 贴近实盘,避免无效交易 |
#### 3. 仓位管理逻辑
- 目标持仓:固定10只股票(分散持仓,降低单股风险)
- 资金分配:买入时平均分配现金(保证单股持仓权重接近10%)
- 调仓频率:周度调仓(平衡收益和交易成本,避免过度交易)
### 四、策略运行的关键特点
1. **时间序列驱动**:核心依赖60天K线序列特征,Transformer模型适配时间序列的长程依赖捕捉;
2. **数据一致性**:训练/选股/调仓的过滤规则完全统一(如均剔除科创板/次新股),避免数据分布偏移;
3. **交易规则贴近实盘**:区分科创板限价单、最低1手限制、交易成本/滑点配置,还原真实交易场景;
4. **监控闭环**:每日预处理→周度调仓→日内风控→收盘复盘,全流程可监控、可追溯。
### 五、总结
该策略的本质是「**时间序列预测+量化选股+风控闭环**」的组合:以Transformer模型为核心选股工具,通过周度调仓实现持仓优化,以多层风控规则控制风险,最终追求稳定超越沪深300的收益。整个流程的核心是「模型打分定选股优先级,资金平均分配控仓位,日内风控控波动」。
评论


2025-11-27
@lucas3060 回测应该从24年1月开始,前面是训练时间,不过训练期间内反而是欠拟合的
2025-11-27
@Gyro^.^ 感谢大佬!感谢支持!
2025-11-27
看了一下 这个策略运行逻辑 日本股神非阿里四价选股逻辑差不多 只是用了机器学习运行
2025-11-27
加上滚动训练,然后因子库调整一下,可扩展性很强,市场情绪,市场宽度,后续就是搭乐高,动态仓位控制,动态调仓。指增才是正道,怎么会看不上呢,哈哈
2025-11-27
@萤火量化 一路有你,感谢支持!
2025-11-27
就想找大屁股的机器学习策略,克隆点赞
2025-11-27