Files
etf/docs/experiments/仓位分配逻辑修改分析.md
aszerW e0d6f81ea1 docs: 仓位分配逻辑修改分析文档
- 记录动态权重vs固定仓位逻辑对比
- 分析收益下降原因(4479%→1678%)
- 说明固定仓位设计意义与改进方向
2026-05-16 00:31:14 +08:00

130 lines
4.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 仓位分配逻辑修改分析
## 一、修改背景
**问题**当选出的Top3动量标的中存在得分小于0的标的时仓位如何分配
**原逻辑**按实际持仓数量等权分配选出2只时每只权重50%选出1只时权重100%。
**问题分析**:原逻辑在标的数量不足时放大了风险敞口,不符合"严格按动量筛选,不满仓则部分现金"的策略意图。
---
## 二、修改内容
**修改文件**`framework/execution/__init__.py`
**修改方法**
- `_calculate_daily_returns()` - 收益计算逻辑
- `_apply_trade_cost()` - 交易成本计算逻辑
---
## 三、核心逻辑对比
| 方面 | 原逻辑(动态权重) | 新逻辑(固定仓位) |
|------|---------------------|---------------------|
| **仓位分配** | 按实际持仓数量等权 | 按 `select_num` 固定等权 |
| **权重公式** | `weight = 1 / len(codes)` | `weight = 1 / select_num` |
| **缺失处理** | 无缺失概念 | 缺失仓位用现金替代 |
| **收益计算** | `np.mean(returns)` | `sum(ret × unit_weight)` |
---
## 四、具体示例select_num=3
### 仓位分配对比
| 场景 | 原逻辑权重分配 | 新逻辑权重分配 |
|------|----------------|----------------|
| **选出3只** | 每只 33.3% | 每只 33.3% + 现金 0% |
| **选出2只** | 每只 **50%** ← 放大! | 每只 33.3% + 现金 **33.3%** |
| **选出1只** | **100%** ← 极度放大! | 33.3% + 现金 **66.7%** |
| **空仓** | 无收益 | 现金 100% |
### 收益计算示例
假设某日选出2只标的纳指涨+2%,日经涨+1%
| 逻辑 | 计算方式 | 收益结果 |
|------|----------|----------|
| **原逻辑** | `(2% + 1%) / 2` | **1.5%** |
| **新逻辑** | `(2% + 1%) / 3 + 0` | **1.0%** |
| **差异** | - | **-0.5% (-33%)** |
假设某日选出1只标的纳指涨+2%
| 逻辑 | 计算方式 | 收益结果 |
|------|----------|----------|
| **原逻辑** | `2% / 1` | **2%** |
| **新逻辑** | `2% / 3 + 0 + 0` | **0.67%** |
| **差异** | - | **-1.33% (-67%)** |
---
## 五、回测结果对比
| 指标 | 原逻辑 | 新逻辑 | 变化 |
|------|--------|--------|------|
| 累计收益 | 4479.14% | 1677.51% | **↓62.6%** |
| 最终净值 | 45.79 | 17.78 | **↓61.2%** |
### 收益下降原因分析
**数据统计**
- 总回测天数3501天
- 持有3只标的3213天91.8%
- 持有2只标的263天7.5%
- 持有1只标的25天0.7%
**影响测算**
- 8.2%时间288天持有少于3只标的
- 原逻辑在这些天放大权重:
- 2只时权重从33.3%→50%波动放大50%
- 1只时权重从33.3%→100%波动放大200%
- 新逻辑保持固定权重空缺部分现金收益为0
---
## 六、设计意义
### 原逻辑问题
1.**风险敞口不稳定**:标的数量不足时风险放大
2.**单标的集中风险**选出1只时100%风险集中在单一标的
3.**收益波动不稳定**:不同仓位状态下波动率差异大
### 新逻辑优势
1.**稳定风险敞口**每只标的固定33.3%权重
2.**现金避险机制**:空缺仓位用现金替代,降低风险
3.**符合策略意图**:严格按动量筛选,负分标的过滤后缺位用现金填充
---
## 七、结论与建议
### 当前状态
修改已生效commit: `444dc0e refactor(execution): 改为固定仓位分配逻辑`
### 验证建议
1. 对比两种逻辑在不同市场环境下的表现
2. 分析固定仓位对回撤控制的效果
3. 评估现金替代部分的收益损失是否值得风险降低
### 改进方向
如果需要进一步提升收益,可考虑:
- 降低 `min_score` 阈值(如-0.5),允许轻度负分标的参与
- 增加"相对动量"逻辑:即使负分,大类排名靠前也保留
- 添加分散度约束强制保持至少2只标的避免单一标的风险
---
## 八、相关文件
- `framework/execution/__init__.py` - BacktestExecutor 收益计算
- `strategies/shared/signals/selectors.py` - TopNSelector 选股逻辑
- `strategies/rotation/config.yaml` - min_score 配置