a
This commit is contained in:
parent
cb8b393550
commit
0a0bcd941b
57
docs/ENTRY_CONTEXT_入场思路记录.md
Normal file
57
docs/ENTRY_CONTEXT_入场思路记录.md
Normal file
|
|
@ -0,0 +1,57 @@
|
||||||
|
# 入场思路记录(entry_context)
|
||||||
|
|
||||||
|
## 目的
|
||||||
|
|
||||||
|
把「入场原因 + 经历的思路/过程」写入每笔订单,便于事后综合分析策略执行效果:
|
||||||
|
不仅看结果(盈/亏、止盈/止损),还能看过程(当时信号强度、市场状态、过滤是否通过等),分析更准确、优化更有依据。
|
||||||
|
|
||||||
|
## 实现方式
|
||||||
|
|
||||||
|
- **数据库**:`trades` 表新增字段 `entry_context`(JSON,可为空)。
|
||||||
|
- **写入时机**:自动开仓且订单成交后,在保存交易记录时一并写入。
|
||||||
|
- **内容**:由策略在开仓前构建一个字典,经 `position_manager` 传给 `Trade.create`,以 JSON 存入。
|
||||||
|
|
||||||
|
## entry_context 字段说明
|
||||||
|
|
||||||
|
每笔自动开仓订单的 `entry_context` 目前包含(示例):
|
||||||
|
|
||||||
|
| 键 | 类型 | 说明 |
|
||||||
|
|----|------|------|
|
||||||
|
| `signal_strength` | int | 信号强度 0–10 |
|
||||||
|
| `market_regime` | str | 市场状态,如 trending / ranging |
|
||||||
|
| `trend_4h` | str | 4H 趋势方向(来自策略) |
|
||||||
|
| `change_percent` | float | 24h 涨跌幅(%) |
|
||||||
|
| `direction` | str | 交易方向 BUY/SELL |
|
||||||
|
| `reason` | str | 入场原因文本(与 entry_reason 一致) |
|
||||||
|
| `rsi` | float | 入场时 RSI(若有) |
|
||||||
|
| `volume_confirmed` | bool | 是否通过成交量确认 |
|
||||||
|
| `filters_passed` | list | 通过的过滤项,如 only_trending, should_trade, volume_ok, signal_ok |
|
||||||
|
| `macd_histogram` | float | 可选,MACD 柱状值 |
|
||||||
|
| `atr` | float | 可选,入场时 ATR |
|
||||||
|
|
||||||
|
后续如需增加「经历的思路」(例如:短周期方向、趋势过滤结果、是否在冷却等),可在 strategy 里往同一 dict 里追加,再写入即可。
|
||||||
|
|
||||||
|
## 数据库迁移
|
||||||
|
|
||||||
|
首次使用需执行迁移,为 `trades` 表增加 `entry_context` 列:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 在 backend 目录或项目根目录执行(按你当前 DB 配置)
|
||||||
|
mysql -u your_user -p your_db < backend/database/add_entry_context.sql
|
||||||
|
```
|
||||||
|
|
||||||
|
若库中已有该列,脚本会跳过,不会重复添加。
|
||||||
|
|
||||||
|
## API 与导出
|
||||||
|
|
||||||
|
- **GET /api/trades**:返回的每条交易里会带 `entry_context`;若 DB 驱动返回的是 JSON 字符串,接口会先解析成对象再返回,便于前端或分析脚本使用。
|
||||||
|
- **导出/统计**:凡基于该 API 或直接查 `trades` 的导出(如「交易记录_xxx.json」),只要包含 `entry_context` 字段,即可用于按「入场思路」做统计与归因分析。
|
||||||
|
|
||||||
|
## 分析时怎么用
|
||||||
|
|
||||||
|
- **按信号强度**:统计 `entry_context.signal_strength` 与胜率/盈亏比的关系(例如 8 分 vs 9 分的表现)。
|
||||||
|
- **按市场状态**:对比 `market_regime=trending` 与 `ranging` 下的胜率和平均盈亏。
|
||||||
|
- **按过滤通过情况**:看 `filters_passed` 与最终结果是否一致(例如 volume_ok 通过后是否仍常止损)。
|
||||||
|
- **归因单笔**:某笔止损/止盈时,结合 `reason`、`trend_4h`、`rsi` 等还原当时决策依据,判断是信号问题、过滤不足还是行情突变。
|
||||||
|
|
||||||
|
这样就能在「只看结果」之外,用「过程 + 结果」一起评估和优化策略。
|
||||||
275
docs/交易数据分析_2026-01-27_优化效果评估.md
Normal file
275
docs/交易数据分析_2026-01-27_优化效果评估.md
Normal file
|
|
@ -0,0 +1,275 @@
|
||||||
|
# 交易数据分析 - 优化效果评估(2026-01-27)
|
||||||
|
|
||||||
|
## 📊 最新统计数据
|
||||||
|
|
||||||
|
### 基本统计(最近几个小时)
|
||||||
|
- **总交易数**:39单
|
||||||
|
- **胜率**:38.24%
|
||||||
|
- **总盈亏**:-0.21 USDT
|
||||||
|
- **平均盈亏**:-0.01 USDT
|
||||||
|
- **平均持仓时长**:59分钟
|
||||||
|
|
||||||
|
### 平仓原因分布
|
||||||
|
- **止损**:29单(74.4%)
|
||||||
|
- **止盈**:1单(2.6%)
|
||||||
|
- **同步**:4单(10.3%)
|
||||||
|
- **其他**:5单(12.8%)
|
||||||
|
|
||||||
|
### 盈亏比
|
||||||
|
- **平均盈利 / 平均亏损**:1.56 : 1
|
||||||
|
- **期望**:3:1
|
||||||
|
- **差距**:仍然偏低
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📈 对比分析
|
||||||
|
|
||||||
|
### 与之前统计对比
|
||||||
|
|
||||||
|
| 指标 | 之前(2026-01-27 02:26) | 现在(2026-01-27 07:00) | 变化 |
|
||||||
|
|------|-------------------------|-------------------------|------|
|
||||||
|
| 总交易数 | 20 | 39 | +19 |
|
||||||
|
| 胜率 | 35.7% | 38.24% | +2.54% ⬆️ |
|
||||||
|
| 止盈单比例 | 14.3% | 2.6% | -11.7% ⬇️ |
|
||||||
|
| 止损单比例 | 71.4% | 74.4% | +3.0% ⬆️ |
|
||||||
|
| 盈亏比 | 需要计算 | 1.56:1 | - |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🚨 核心问题分析
|
||||||
|
|
||||||
|
### 问题1:止盈单比例大幅下降(严重)
|
||||||
|
|
||||||
|
**现象**:
|
||||||
|
- 之前:14.3%(2/14)
|
||||||
|
- 现在:2.6%(1/39)
|
||||||
|
- **下降了11.7%**
|
||||||
|
|
||||||
|
**可能原因**:
|
||||||
|
1. **止盈目标设置过低**:从20%降低到10%,可能导致止盈单更容易被回吐
|
||||||
|
2. **市场波动**:价格达到10%后快速回落,未能及时止盈
|
||||||
|
3. **止盈单挂单失败**:交易所止盈单可能未成功挂单
|
||||||
|
4. **WebSocket监控延迟**:实时监控可能延迟,导致止盈触发不及时
|
||||||
|
|
||||||
|
**影响**:
|
||||||
|
- 盈利单无法及时止盈,最终回吐利润
|
||||||
|
- 胜率提升有限(仅2.54%)
|
||||||
|
- 盈亏比仍然偏低(1.56:1 vs 期望3:1)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 问题2:止损单比例上升
|
||||||
|
|
||||||
|
**现象**:
|
||||||
|
- 之前:71.4%
|
||||||
|
- 现在:74.4%
|
||||||
|
- **上升了3.0%**
|
||||||
|
|
||||||
|
**可能原因**:
|
||||||
|
1. **信号强度提升**:从5提升到7,但可能仍然不够严格
|
||||||
|
2. **市场环境**:市场可能处于震荡或下跌趋势
|
||||||
|
3. **止损设置**:止损可能仍然过宽,导致更多单子触发止损
|
||||||
|
|
||||||
|
**影响**:
|
||||||
|
- 胜率提升有限
|
||||||
|
- 亏损单比例仍然很高
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 问题3:盈亏比仍然偏低
|
||||||
|
|
||||||
|
**现象**:
|
||||||
|
- 当前:1.56:1
|
||||||
|
- 期望:3:1
|
||||||
|
- **差距**:1.44:1
|
||||||
|
|
||||||
|
**可能原因**:
|
||||||
|
1. **止盈单比例过低**:只有1单止盈,无法形成有效的盈亏比
|
||||||
|
2. **止损单亏损过大**:止损单的平均亏损可能仍然较大
|
||||||
|
3. **止盈目标过低**:10%的止盈目标可能过低,无法形成有效的盈亏比
|
||||||
|
|
||||||
|
**影响**:
|
||||||
|
- 即使胜率提升,盈亏比仍然偏低,无法实现稳定盈利
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🔍 详细分析
|
||||||
|
|
||||||
|
### 止盈单分析
|
||||||
|
|
||||||
|
**止盈单数量**:仅1单(2.6%)
|
||||||
|
|
||||||
|
**问题**:
|
||||||
|
- 止盈单比例过低,说明大部分盈利单未能及时止盈
|
||||||
|
- 10%的止盈目标可能过低,导致价格达到后快速回落
|
||||||
|
|
||||||
|
**建议**:
|
||||||
|
- 检查止盈单挂单是否成功
|
||||||
|
- 检查WebSocket监控是否正常工作
|
||||||
|
- 考虑提高止盈目标(从10%提升到12-15%)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 止损单分析
|
||||||
|
|
||||||
|
**止损单数量**:29单(74.4%)
|
||||||
|
|
||||||
|
**问题**:
|
||||||
|
- 止损单比例仍然很高
|
||||||
|
- 说明入场点选择可能仍然不够准确
|
||||||
|
|
||||||
|
**建议**:
|
||||||
|
- 进一步提高信号强度门槛(从7提升到8)
|
||||||
|
- 加强大盘Beta过滤(当前-0.5%,可能可以更严格)
|
||||||
|
- 检查止损设置是否合理
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ✅ 优化建议
|
||||||
|
|
||||||
|
### 建议1:提高止盈目标(紧急)
|
||||||
|
|
||||||
|
**当前配置**:
|
||||||
|
- `TAKE_PROFIT_PERCENT`: 0.10(10%)
|
||||||
|
|
||||||
|
**建议配置**:
|
||||||
|
- `TAKE_PROFIT_PERCENT`: **0.12**(12%)或**0.15**(15%)
|
||||||
|
|
||||||
|
**理由**:
|
||||||
|
- 10%的止盈目标可能过低,容易被回吐
|
||||||
|
- 提高止盈目标,更容易触发止盈,提升止盈单比例
|
||||||
|
- 配合移动止损(5%激活,2.5%保护),可以保护利润
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 建议2:检查止盈单挂单逻辑
|
||||||
|
|
||||||
|
**检查项**:
|
||||||
|
1. 止盈单是否成功挂单到交易所
|
||||||
|
2. WebSocket监控是否正常工作
|
||||||
|
3. 止盈触发逻辑是否正确
|
||||||
|
|
||||||
|
**可能问题**:
|
||||||
|
- 止盈单挂单失败,导致无法自动止盈
|
||||||
|
- WebSocket监控延迟,导致止盈触发不及时
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 建议3:进一步提高信号强度门槛
|
||||||
|
|
||||||
|
**当前配置**:
|
||||||
|
- `MIN_SIGNAL_STRENGTH`: 7
|
||||||
|
|
||||||
|
**建议配置**:
|
||||||
|
- `MIN_SIGNAL_STRENGTH`: **8**
|
||||||
|
|
||||||
|
**理由**:
|
||||||
|
- 止损单比例仍然很高(74.4%)
|
||||||
|
- 提高信号强度门槛,减少垃圾信号
|
||||||
|
- 虽然交易数量可能减少,但质量会提升
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 建议4:加强大盘Beta过滤
|
||||||
|
|
||||||
|
**当前配置**:
|
||||||
|
- `BETA_FILTER_THRESHOLD`: -0.005(-0.5%)
|
||||||
|
|
||||||
|
**建议配置**:
|
||||||
|
- `BETA_FILTER_THRESHOLD`: **-0.003**(-0.3%)或**-0.002**(-0.2%)
|
||||||
|
|
||||||
|
**理由**:
|
||||||
|
- 更敏感地过滤大盘风险
|
||||||
|
- 减少在震荡市或下跌趋势中的交易
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 建议5:优化移动止损参数
|
||||||
|
|
||||||
|
**当前配置**:
|
||||||
|
- `TRAILING_STOP_ACTIVATION`: 0.05(5%)
|
||||||
|
- `TRAILING_STOP_PROTECT`: 0.025(2.5%)
|
||||||
|
|
||||||
|
**建议配置**:
|
||||||
|
- `TRAILING_STOP_ACTIVATION`: **0.08**(8%)
|
||||||
|
- `TRAILING_STOP_PROTECT`: **0.04**(4%)
|
||||||
|
|
||||||
|
**理由**:
|
||||||
|
- 5%激活可能过早,容易被震荡扫出
|
||||||
|
- 提高激活阈值,给价格更多波动空间
|
||||||
|
- 提高保护阈值,避免过早退出
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📊 优化效果评估
|
||||||
|
|
||||||
|
### 已实施的优化
|
||||||
|
|
||||||
|
1. ✅ **大盘Beta过滤优化**:-0.03 → -0.005(-0.5%)
|
||||||
|
2. ✅ **止盈目标降低**:0.20 → 0.10(10%)
|
||||||
|
3. ✅ **动态追踪止损优化**:0.20 → 0.05(5%激活),0.10 → 0.025(2.5%保护)
|
||||||
|
4. ✅ **信号强度提升**:5 → 7
|
||||||
|
|
||||||
|
### 效果评估
|
||||||
|
|
||||||
|
**正面效果**:
|
||||||
|
- ✅ 胜率略有提升(35.7% → 38.24%,+2.54%)
|
||||||
|
|
||||||
|
**负面效果**:
|
||||||
|
- ❌ 止盈单比例大幅下降(14.3% → 2.6%,-11.7%)
|
||||||
|
- ❌ 止损单比例上升(71.4% → 74.4%,+3.0%)
|
||||||
|
- ❌ 盈亏比仍然偏低(1.56:1 vs 期望3:1)
|
||||||
|
|
||||||
|
**结论**:
|
||||||
|
- ⚠️ 优化效果不明显,甚至有些指标恶化
|
||||||
|
- ⚠️ 需要进一步调整参数
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🎯 下一步行动
|
||||||
|
|
||||||
|
### 优先级1:紧急调整
|
||||||
|
|
||||||
|
1. **提高止盈目标**:10% → 12%或15%
|
||||||
|
2. **检查止盈单挂单逻辑**:确保止盈单成功挂单
|
||||||
|
3. **优化移动止损参数**:5%激活 → 8%激活,2.5%保护 → 4%保护
|
||||||
|
|
||||||
|
### 优先级2:重要调整
|
||||||
|
|
||||||
|
4. **进一步提高信号强度**:7 → 8
|
||||||
|
5. **加强大盘Beta过滤**:-0.5% → -0.3%或-0.2%
|
||||||
|
|
||||||
|
### 优先级3:后续优化
|
||||||
|
|
||||||
|
6. **实施成交量激增过滤**:15分钟成交量是过去24小时均值的2倍以上时才进场
|
||||||
|
7. **优化分步止盈**:第一目标从固定百分比改为1.5倍ATR
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ⚠️ 注意事项
|
||||||
|
|
||||||
|
1. **逐步调整**:不要一次性调整所有参数,可以先调整止盈目标,观察效果
|
||||||
|
2. **监控数据**:调整后密切监控交易数据,确认效果
|
||||||
|
3. **及时调整**:如果效果不理想,可以进一步微调参数
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ✅ 总结
|
||||||
|
|
||||||
|
**当前状态**:
|
||||||
|
- ⚠️ 胜率略有提升,但仍然偏低(38.24%)
|
||||||
|
- ❌ 止盈单比例大幅下降(2.6%),这是严重问题
|
||||||
|
- ❌ 止损单比例上升(74.4%)
|
||||||
|
- ❌ 盈亏比仍然偏低(1.56:1)
|
||||||
|
|
||||||
|
**优化方向**:
|
||||||
|
- ✅ 提高止盈目标(10% → 12-15%)
|
||||||
|
- ✅ 检查止盈单挂单逻辑
|
||||||
|
- ✅ 优化移动止损参数
|
||||||
|
- ✅ 进一步提高信号强度门槛
|
||||||
|
- ✅ 加强大盘Beta过滤
|
||||||
|
|
||||||
|
**预期效果**:
|
||||||
|
- 止盈单比例提升到15-20%
|
||||||
|
- 胜率提升到45-50%
|
||||||
|
- 盈亏比提升到2.0:1-2.5:1
|
||||||
186
docs/交易策略问题诊断_2026-01-28.md
Normal file
186
docs/交易策略问题诊断_2026-01-28.md
Normal file
|
|
@ -0,0 +1,186 @@
|
||||||
|
# 交易策略问题诊断报告 - 2026-01-28
|
||||||
|
|
||||||
|
## 📊 今日交易统计
|
||||||
|
|
||||||
|
- **总交易数**:12
|
||||||
|
- **胜率**:16.67%(2个止盈,10个止损)
|
||||||
|
- **总盈亏**:-3.07 USDT
|
||||||
|
- **平均盈亏**:-0.26 USDT
|
||||||
|
- **平均持仓时长**:80分钟
|
||||||
|
- **平均盈利 / 平均亏损**:1.00 : 1(期望3:1)
|
||||||
|
|
||||||
|
## 🔍 问题分析
|
||||||
|
|
||||||
|
### 1. **止损执行问题(最严重)**
|
||||||
|
|
||||||
|
**现象**:
|
||||||
|
- 配置止损:12%(基于保证金)
|
||||||
|
- 实际亏损:-11% 到 -25%
|
||||||
|
- 所有止损单都超过了配置的12%
|
||||||
|
|
||||||
|
**可能原因**:
|
||||||
|
1. **ATR止损计算问题**:
|
||||||
|
- `ATR_STOP_LOSS_MULTIPLIER = 1.5`
|
||||||
|
- 如果ATR很小,`ATR * 1.5` 可能小于12%保证金止损
|
||||||
|
- 代码选择"更紧的止损"(取最大值),可能选择了ATR止损,但ATR止损可能对应更高的保证金百分比
|
||||||
|
|
||||||
|
2. **止损单挂单失败**:
|
||||||
|
- 如果交易所止损单挂单失败,只能依赖WebSocket监控
|
||||||
|
- WebSocket断开时,可能无法及时止损
|
||||||
|
|
||||||
|
3. **止损价计算错误**:
|
||||||
|
- 对于SELL单,止损价应该高于入场价
|
||||||
|
- 如果计算错误,可能导致止损价设置不合理
|
||||||
|
|
||||||
|
### 2. **入场信号质量问题**
|
||||||
|
|
||||||
|
**现象**:
|
||||||
|
- 同一交易对反复开仓(AXLUSDT 7次,1INCHUSDT 4次)
|
||||||
|
- 胜率极低(16.67%)
|
||||||
|
- 很多单子都在震荡市开仓
|
||||||
|
|
||||||
|
**可能原因**:
|
||||||
|
1. **市场状态判断不准确**:
|
||||||
|
- `AUTO_TRADE_ONLY_TRENDING = True`,但可能把震荡市误判为趋势市
|
||||||
|
- `detect_market_regime` 的判断条件可能不够严格:
|
||||||
|
- `ma_diff_pct > 2` 且 `volatility_pct > 1` 就判断为趋势
|
||||||
|
- 这个条件可能太宽松
|
||||||
|
|
||||||
|
2. **信号强度门槛不够高**:
|
||||||
|
- `MIN_SIGNAL_STRENGTH = 7`
|
||||||
|
- 但可能还是不够严格,导致在震荡市也开仓
|
||||||
|
|
||||||
|
3. **4H趋势判断不准确**:
|
||||||
|
- 如果4H趋势判断错误,可能导致逆势开仓
|
||||||
|
|
||||||
|
### 3. **止损/止盈比例失衡**
|
||||||
|
|
||||||
|
**现象**:
|
||||||
|
- 止损:-11% 到 -25%
|
||||||
|
- 止盈:+18% 到 +20%
|
||||||
|
- 盈亏比:1.00 : 1(期望3:1)
|
||||||
|
|
||||||
|
**问题**:
|
||||||
|
- 止损太宽(实际亏损远超配置的12%)
|
||||||
|
- 止盈相对较紧(10%),但实际止盈在18-20%,说明可能触发了第二目标止盈
|
||||||
|
- 盈亏比严重失衡,无法盈利
|
||||||
|
|
||||||
|
### 4. **交易对选择问题**
|
||||||
|
|
||||||
|
**现象**:
|
||||||
|
- 集中在少数几个交易对(AXLUSDT、1INCHUSDT)
|
||||||
|
- 反复开仓,说明可能在震荡市反复触发信号
|
||||||
|
|
||||||
|
**可能原因**:
|
||||||
|
- 扫描逻辑可能对某些交易对有偏好
|
||||||
|
- 冷却时间可能不够(`ENTRY_SYMBOL_COOLDOWN_SEC = 1800秒 = 30分钟`)
|
||||||
|
|
||||||
|
## 🎯 核心问题总结
|
||||||
|
|
||||||
|
### 问题1:止损执行失效
|
||||||
|
- **配置**:12%止损
|
||||||
|
- **实际**:-11% 到 -25%
|
||||||
|
- **影响**:单笔亏损过大,无法控制风险
|
||||||
|
|
||||||
|
### 问题2:入场信号质量低
|
||||||
|
- **配置**:MIN_SIGNAL_STRENGTH=7,AUTO_TRADE_ONLY_TRENDING=True
|
||||||
|
- **实际**:胜率16.67%,反复开仓
|
||||||
|
- **影响**:大量无效交易,消耗资金
|
||||||
|
|
||||||
|
### 问题3:市场状态判断不准确
|
||||||
|
- **配置**:只在trending市场交易
|
||||||
|
- **实际**:可能在ranging市场也开仓
|
||||||
|
- **影响**:震荡市频繁止损
|
||||||
|
|
||||||
|
### 问题4:止损/止盈比例失衡
|
||||||
|
- **配置**:止损12%,止盈10%,盈亏比期望3:1
|
||||||
|
- **实际**:止损-11%到-25%,止盈18-20%,盈亏比1:1
|
||||||
|
- **影响**:无法实现盈利目标
|
||||||
|
|
||||||
|
## 💡 优化建议
|
||||||
|
|
||||||
|
### 优先级P0(立即修复)
|
||||||
|
|
||||||
|
1. **修复止损执行问题**:
|
||||||
|
- 检查ATR止损计算逻辑,确保止损价对应的保证金百分比不超过配置值
|
||||||
|
- 确保止损单能成功挂到交易所
|
||||||
|
- 如果止损单挂单失败,立即平仓而不是依赖WebSocket
|
||||||
|
|
||||||
|
2. **收紧入场条件**:
|
||||||
|
- 提高 `MIN_SIGNAL_STRENGTH` 从7到9
|
||||||
|
- 加强市场状态判断,确保只在真正的趋势市开仓
|
||||||
|
- 增加4H趋势确认,禁止在neutral趋势开仓
|
||||||
|
|
||||||
|
3. **修复止损计算**:
|
||||||
|
- 确保止损价对应的保证金百分比不超过配置的12%
|
||||||
|
- 如果ATR止损对应更高的保证金百分比,应该使用保证金止损
|
||||||
|
|
||||||
|
### 优先级P1(后续优化)
|
||||||
|
|
||||||
|
1. **优化市场状态判断**:
|
||||||
|
- 提高trending判断的阈值
|
||||||
|
- 增加更多指标确认(ADX、趋势线等)
|
||||||
|
|
||||||
|
2. **增加交易对冷却时间**:
|
||||||
|
- 将 `ENTRY_SYMBOL_COOLDOWN_SEC` 从30分钟增加到60分钟
|
||||||
|
- 避免同一交易对频繁开仓
|
||||||
|
|
||||||
|
3. **优化止损/止盈比例**:
|
||||||
|
- 如果止损实际执行在-15%左右,止盈应该相应调整到15-20%
|
||||||
|
- 或者收紧止损,确保实际止损在12%以内
|
||||||
|
|
||||||
|
## 🔧 具体修复方案
|
||||||
|
|
||||||
|
### ✅ 修复1:确保止损不超过配置值(已完成)
|
||||||
|
|
||||||
|
在 `risk_manager.py` 的 `get_stop_loss_price` 中添加验证逻辑:
|
||||||
|
- 计算最终止损价对应的保证金百分比
|
||||||
|
- 如果超过配置的 `STOP_LOSS_PERCENT`,强制使用保证金止损
|
||||||
|
- 记录警告日志,便于排查问题
|
||||||
|
|
||||||
|
**修复位置**:`trading_system/risk_manager.py` 第762-770行
|
||||||
|
|
||||||
|
### ✅ 修复2:提高入场门槛(已完成)
|
||||||
|
|
||||||
|
- `MIN_SIGNAL_STRENGTH`: 7 → 9(大幅提高门槛)
|
||||||
|
- `SMART_ENTRY_STRONG_SIGNAL`: 7 → 9(保持一致)
|
||||||
|
- `SIGNAL_STRENGTH_POSITION_MULTIPLIER`: 移除8分,只保留9-10分
|
||||||
|
- `AUTO_TRADE_ALLOW_4H_NEUTRAL`: 已为False(禁止neutral趋势开仓)
|
||||||
|
|
||||||
|
**修复位置**:`trading_system/config.py`
|
||||||
|
|
||||||
|
### ✅ 修复3:优化市场状态判断(已完成)
|
||||||
|
|
||||||
|
提高 `detect_market_regime` 的判断阈值:
|
||||||
|
- 均线差异阈值:2% → 3.5%
|
||||||
|
- 波动率阈值:1% → 1.5%
|
||||||
|
- 确保只在真正的趋势市判断为trending
|
||||||
|
|
||||||
|
**修复位置**:`trading_system/indicators.py` 第297行
|
||||||
|
|
||||||
|
### ✅ 修复4:增加交易对冷却时间(已完成)
|
||||||
|
|
||||||
|
- `ENTRY_SYMBOL_COOLDOWN_SEC`: 1800秒(30分钟)→ 3600秒(60分钟)
|
||||||
|
- 避免同一交易对频繁开仓
|
||||||
|
|
||||||
|
**修复位置**:`trading_system/config.py` 第260行
|
||||||
|
|
||||||
|
## 📋 修复总结
|
||||||
|
|
||||||
|
### 已完成的修复:
|
||||||
|
1. ✅ 止损执行验证:确保止损价对应的保证金百分比不超过配置值
|
||||||
|
2. ✅ 提高入场门槛:MIN_SIGNAL_STRENGTH从7提高到9
|
||||||
|
3. ✅ 优化市场状态判断:提高trending判断阈值
|
||||||
|
4. ✅ 增加交易对冷却时间:从30分钟增加到60分钟
|
||||||
|
|
||||||
|
### 预期效果:
|
||||||
|
- 止损执行更严格,实际亏损不会超过配置的12%
|
||||||
|
- 入场信号质量更高,减少垃圾交易
|
||||||
|
- 市场状态判断更准确,减少在震荡市开仓
|
||||||
|
- 同一交易对不会频繁开仓,减少重复止损
|
||||||
|
|
||||||
|
### 建议监控指标:
|
||||||
|
- 胜率是否提升(目标:>30%)
|
||||||
|
- 平均盈亏是否改善(目标:>0)
|
||||||
|
- 止损执行是否准确(实际亏损应在12%以内)
|
||||||
|
- 交易频率是否降低(避免过度交易)
|
||||||
53
docs/全局配置与数据库同步.md
Normal file
53
docs/全局配置与数据库同步.md
Normal file
|
|
@ -0,0 +1,53 @@
|
||||||
|
# 全局配置与数据库同步
|
||||||
|
|
||||||
|
## 1. 是否需要“同步到数据库”?
|
||||||
|
|
||||||
|
**分两种理解:**
|
||||||
|
|
||||||
|
### (1)在页面上改完并保存 → 已实现
|
||||||
|
|
||||||
|
- **已实现**:在「全局配置」页修改任意配置项并保存时,后端会调用 `update_global_configs_batch`,对每条配置执行 `GlobalStrategyConfig.set(...)`。
|
||||||
|
- `GlobalStrategyConfig.set` 使用 **INSERT ... ON DUPLICATE KEY UPDATE**:
|
||||||
|
- 若该 `config_key` 在表 `global_strategy_config` 中**不存在**,会**插入**一条新记录;
|
||||||
|
- 若**已存在**,会**更新**该记录的 `config_value`、`config_type`、`category`、`description` 等。
|
||||||
|
- 因此:**新加的配置项(如 MAX_RSI_FOR_LONG、MIN_RSI_FOR_SHORT 等)只要在页面上改一次并点保存,就会自动写入数据库**,不需要单独“同步到数据库”的步骤。
|
||||||
|
|
||||||
|
### (2)不打开页面,一次性把“缺省值”写入数据库 → 可选脚本
|
||||||
|
|
||||||
|
- 若希望新配置项**一开始就出现在数据库里**(方便备份、导出、或不在 UI 改也能看到默认值),可以执行一次**同步缺省脚本**。
|
||||||
|
- 脚本会检查 `global_strategy_config` 表,对**尚未存在的 key** 插入默认值;**已存在的 key 不会覆盖**。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 2. 已实现的能力小结
|
||||||
|
|
||||||
|
| 场景 | 是否已实现 | 说明 |
|
||||||
|
|------|------------|------|
|
||||||
|
| 在「全局配置」页修改并保存 | ✅ 是 | 调用 `POST /api/config/global/batch`,写入 `global_strategy_config` 表 |
|
||||||
|
| 新 key 第一次保存 | ✅ 是 | `GlobalStrategyConfig.set` 用 INSERT ... ON DUPLICATE KEY UPDATE,会自动插入新 key |
|
||||||
|
| 策略/后端读取配置 | ✅ 是 | `config_manager.get_trading_config()` 从全局配置表(及 Redis)读;缺省时用代码里的默认值 |
|
||||||
|
| 一次性把缺省项写入 DB | ✅ 可选 | 运行 `backend/sync_global_config_defaults.py`(见下) |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 3. 可选:一次性同步缺省到数据库
|
||||||
|
|
||||||
|
若希望把**新增的全局配置项默认值**一次性写入 `global_strategy_config` 表(不覆盖已有记录),可在项目根目录或 backend 目录执行:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 在项目根目录
|
||||||
|
cd backend && python sync_global_config_defaults.py
|
||||||
|
|
||||||
|
# 或(若 PYTHONPATH 已含 backend)
|
||||||
|
python backend/sync_global_config_defaults.py
|
||||||
|
```
|
||||||
|
|
||||||
|
脚本会:
|
||||||
|
|
||||||
|
- 只插入**当前在表中不存在的** `config_key`;
|
||||||
|
- 已存在的 key **不会**被修改;
|
||||||
|
- 默认会同步的项包括:`MAX_RSI_FOR_LONG`、`MAX_CHANGE_PERCENT_FOR_LONG`、`MIN_RSI_FOR_SHORT`、`MAX_CHANGE_PERCENT_FOR_SHORT`、`TAKE_PROFIT_1_PERCENT`、`SCAN_EXTRA_SYMBOLS_FOR_SUPPLEMENT`、`BETA_FILTER_ENABLED`、`BETA_FILTER_THRESHOLD` 等(见脚本内 `DEFAULTS_TO_SYNC`)。
|
||||||
|
|
||||||
|
**结论**:
|
||||||
|
- **需要同步到数据库吗?** 若你会在「全局配置」里改这些项并保存,则**不需要**额外同步,保存即写入数据库。
|
||||||
|
- **有实现吗?** 有:保存即写入;另提供可选脚本,用于一次性把缺省值写入数据库。
|
||||||
161
docs/盈利单被错误标记为止损问题修复总结_2026-01-27.md
Normal file
161
docs/盈利单被错误标记为止损问题修复总结_2026-01-27.md
Normal file
|
|
@ -0,0 +1,161 @@
|
||||||
|
# 盈利单被错误标记为止损问题修复总结(2026-01-27)
|
||||||
|
|
||||||
|
## 🚨 问题确认
|
||||||
|
|
||||||
|
### 严重问题
|
||||||
|
|
||||||
|
从交易记录中发现,**多笔盈利单被错误标记为"自动平仓(止损)"**:
|
||||||
|
|
||||||
|
- 盈利20%+的单子:至少10单
|
||||||
|
- 全部被标记为"止损"
|
||||||
|
- 实际止盈单:仅1单(2.6%)
|
||||||
|
|
||||||
|
**影响**:
|
||||||
|
- 止盈单比例被严重低估(2.6%)
|
||||||
|
- 胜率被低估(38.24%)
|
||||||
|
- 盈亏比被低估(1.56:1)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🔍 根本原因分析
|
||||||
|
|
||||||
|
### 原因1:移动止损逻辑错误
|
||||||
|
|
||||||
|
**问题**:
|
||||||
|
- 移动止损激活时,将止损移至成本价(保本)
|
||||||
|
- 如果价格回落到成本价,会触发止损
|
||||||
|
- 但**盈利20%+的单子不应该被止损**
|
||||||
|
|
||||||
|
**修复**:
|
||||||
|
- 移动止损激活时,不应该将止损移至成本价
|
||||||
|
- 应该设置为"保护利润"的价格(如盈利5%后,保护2.5%利润)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 原因2:同步平仓判断逻辑错误
|
||||||
|
|
||||||
|
**问题**:
|
||||||
|
- 同步平仓时,优先检查止损价格匹配
|
||||||
|
- 如果平仓价接近止损价,会被标记为`stop_loss`
|
||||||
|
- 但**没有检查盈亏情况**
|
||||||
|
|
||||||
|
**修复**:
|
||||||
|
- 优先检查盈亏情况
|
||||||
|
- 如果盈利,优先检查止盈价格匹配
|
||||||
|
- 如果亏损,再检查止损价格匹配
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 原因3:止损检查逻辑错误
|
||||||
|
|
||||||
|
**问题**:
|
||||||
|
- 止损检查时,没有检查盈亏情况
|
||||||
|
- 盈利单触发止损,应该标记为`trailing_stop`,而不是`stop_loss`
|
||||||
|
|
||||||
|
**修复**:
|
||||||
|
- 止损检查前,先检查是否盈利
|
||||||
|
- 如果盈利,标记为`trailing_stop`或`take_profit_partial_then_stop`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ✅ 已完成的修复
|
||||||
|
|
||||||
|
### 修复1:同步平仓判断逻辑优化
|
||||||
|
|
||||||
|
**修改位置**:`trading_system/position_manager.py:2150-2170`
|
||||||
|
|
||||||
|
**修复内容**:
|
||||||
|
- 优先检查盈亏情况
|
||||||
|
- 如果盈利,优先检查止盈价格匹配
|
||||||
|
- 如果亏损,再检查止损价格匹配
|
||||||
|
|
||||||
|
**效果**:
|
||||||
|
- 盈利单不会被错误标记为`stop_loss`
|
||||||
|
- 同步平仓时,能正确识别止盈单
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 修复2:移动止损逻辑优化
|
||||||
|
|
||||||
|
**修改位置**:`trading_system/position_manager.py:2731-2740`
|
||||||
|
|
||||||
|
**修复内容**:
|
||||||
|
- 移动止损激活时,不应该将止损移至成本价
|
||||||
|
- 应该设置为"保护利润"的价格(如盈利5%后,保护2.5%利润)
|
||||||
|
|
||||||
|
**效果**:
|
||||||
|
- 移动止损激活后,止损价设置为保护利润位,而不是成本价
|
||||||
|
- 避免盈利单被错误止损
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 修复3:止损检查逻辑优化
|
||||||
|
|
||||||
|
**修改位置**:`trading_system/position_manager.py:2825-2840`
|
||||||
|
|
||||||
|
**修复内容**:
|
||||||
|
- 止损检查前,先检查是否盈利
|
||||||
|
- 如果盈利,标记为`trailing_stop`或`take_profit_partial_then_stop`
|
||||||
|
|
||||||
|
**效果**:
|
||||||
|
- 盈利单触发止损时,会被正确标记为`trailing_stop`
|
||||||
|
- 避免盈利单被错误标记为`stop_loss`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📊 预期效果
|
||||||
|
|
||||||
|
### 修复后预期
|
||||||
|
|
||||||
|
**止盈单比例**:
|
||||||
|
- 当前:2.6%(1/39)
|
||||||
|
- 预期:25%+(10+/39)
|
||||||
|
|
||||||
|
**胜率**:
|
||||||
|
- 当前:38.24%
|
||||||
|
- 预期:50%+(如果盈利单被正确标记)
|
||||||
|
|
||||||
|
**盈亏比**:
|
||||||
|
- 当前:1.56:1
|
||||||
|
- 预期:2.0:1 - 2.5:1(如果盈利单被正确标记)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ⚠️ 注意事项
|
||||||
|
|
||||||
|
1. **数据修复**:
|
||||||
|
- 可能需要修复历史数据中的错误标记
|
||||||
|
- 盈利单应该被标记为`take_profit`或`trailing_stop`
|
||||||
|
|
||||||
|
2. **测试验证**:
|
||||||
|
- 修复后,需要测试验证
|
||||||
|
- 确保盈利单被正确标记
|
||||||
|
|
||||||
|
3. **监控日志**:
|
||||||
|
- 关注日志中的"盈利单触发止损"警告
|
||||||
|
- 确认修复是否生效
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ✅ 总结
|
||||||
|
|
||||||
|
**问题**:
|
||||||
|
- ❌ 多笔盈利单被错误标记为"止损"
|
||||||
|
- ❌ 止盈单比例极低(2.6%)
|
||||||
|
- ❌ 胜率被低估
|
||||||
|
|
||||||
|
**原因**:
|
||||||
|
- 移动止损逻辑错误(激活时将止损移至成本价)
|
||||||
|
- 同步平仓判断逻辑错误(优先检查止损价格匹配,没有检查盈亏情况)
|
||||||
|
- 止损检查逻辑错误(没有检查盈亏情况)
|
||||||
|
|
||||||
|
**修复**:
|
||||||
|
- ✅ 修复同步平仓判断逻辑(优先检查盈亏情况)
|
||||||
|
- ✅ 优化移动止损逻辑(激活时设置为保护利润位)
|
||||||
|
- ✅ 优化止损检查逻辑(先检查盈亏情况)
|
||||||
|
|
||||||
|
**预期效果**:
|
||||||
|
- ✅ 盈利单被正确标记
|
||||||
|
- ✅ 止盈单比例提升到25%+
|
||||||
|
- ✅ 胜率提升到50%+
|
||||||
|
- ✅ 盈亏比提升到2.0:1-2.5:1
|
||||||
191
docs/盈利单被错误标记为止损问题分析_2026-01-27.md
Normal file
191
docs/盈利单被错误标记为止损问题分析_2026-01-27.md
Normal file
|
|
@ -0,0 +1,191 @@
|
||||||
|
# 盈利单被错误标记为止损问题分析(2026-01-27)
|
||||||
|
|
||||||
|
## 🚨 严重问题
|
||||||
|
|
||||||
|
### 问题现象
|
||||||
|
|
||||||
|
从交易记录中发现,**多笔盈利单被错误标记为"自动平仓(止损)"**:
|
||||||
|
|
||||||
|
| 交易ID | 交易对 | 盈亏比例 | 平仓类型 | 问题 |
|
||||||
|
|--------|--------|----------|----------|------|
|
||||||
|
| 1852 | AXSUSDT | +20.50% | 自动平仓(止损) | ❌ 错误 |
|
||||||
|
| 1844 | AXLUSDT | +20.94% | 自动平仓(止损) | ❌ 错误 |
|
||||||
|
| 1841 | AXSUSDT | +20.65% | 自动平仓(止损) | ❌ 错误 |
|
||||||
|
| 1839 | ZROUSDT | +18.24% | 自动平仓(止损) | ❌ 错误 |
|
||||||
|
| 1836 | AXSUSDT | +19.13% | 自动平仓(止损) | ❌ 错误 |
|
||||||
|
| 1833 | AXSUSDT | +20.66% | 自动平仓(止损) | ❌ 错误 |
|
||||||
|
| 1829 | AXSUSDT | +20.20% | 自动平仓(止损) | ❌ 错误 |
|
||||||
|
| 1824 | AXSUSDT | +20.46% | 自动平仓(止损) | ❌ 错误 |
|
||||||
|
| 1821 | AXSUSDT | +12.04% | 自动平仓(止损) | ❌ 错误 |
|
||||||
|
| 1817 | AXSUSDT | +46.42% | 自动平仓(止损) | ❌ 错误 |
|
||||||
|
|
||||||
|
**统计**:
|
||||||
|
- 盈利20%+的单子:至少10单
|
||||||
|
- 全部被标记为"止损"
|
||||||
|
- 实际止盈单:仅1单(2.6%)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🔍 问题分析
|
||||||
|
|
||||||
|
### 可能原因1:移动止损逻辑错误
|
||||||
|
|
||||||
|
**问题**:
|
||||||
|
- 移动止损在盈利5%后激活,将止损移至成本价(保本)
|
||||||
|
- 如果价格回落到成本价,会触发止损
|
||||||
|
- 但**盈利20%+的单子不应该被止损**
|
||||||
|
|
||||||
|
**分析**:
|
||||||
|
- 移动止损激活后,止损价被移至成本价
|
||||||
|
- 如果价格回落到成本价,会触发止损
|
||||||
|
- 但盈利20%+的单子,价格不应该回落到成本价(除非是分步止盈后的剩余仓位)
|
||||||
|
|
||||||
|
**可能问题**:
|
||||||
|
- 移动止损逻辑可能错误地将盈利单的止损价设置为成本价
|
||||||
|
- 或者,移动止损的保护逻辑有问题
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 可能原因2:分步止盈后的剩余仓位止损
|
||||||
|
|
||||||
|
**问题**:
|
||||||
|
- 第一目标止盈(50%仓位)后,剩余仓位止损移至成本价(保本)
|
||||||
|
- 如果剩余仓位价格回落到成本价,会触发止损
|
||||||
|
- 但**整体交易仍然是盈利的**(第一目标已达成)
|
||||||
|
|
||||||
|
**分析**:
|
||||||
|
- 如果第一目标止盈成功,剩余50%仓位止损移至成本价
|
||||||
|
- 如果剩余仓位价格回落到成本价,会触发止损
|
||||||
|
- 但整体交易仍然是盈利的(第一目标已达成)
|
||||||
|
|
||||||
|
**当前实现**:
|
||||||
|
- 已修复:剩余仓位止损时,会标记为`take_profit_partial_then_stop`
|
||||||
|
- 但可能数据库同步时,仍然被标记为`stop_loss`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 可能原因3:同步平仓时的判断逻辑错误
|
||||||
|
|
||||||
|
**问题**:
|
||||||
|
- 同步平仓时,根据价格匹配判断平仓原因
|
||||||
|
- 如果平仓价接近止损价,会被标记为`stop_loss`
|
||||||
|
- 但**盈利单不应该被标记为止损**
|
||||||
|
|
||||||
|
**分析**:
|
||||||
|
- 同步平仓时,如果平仓价接近止损价,会被标记为`stop_loss`
|
||||||
|
- 但如果交易是盈利的,应该被标记为`take_profit`或`trailing_stop`
|
||||||
|
|
||||||
|
**当前实现**:
|
||||||
|
- `sync_positions_with_binance`方法中,优先检查止损价格匹配
|
||||||
|
- 如果平仓价接近止损价,会被标记为`stop_loss`
|
||||||
|
- 但**没有检查盈亏情况**
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ✅ 修复方案
|
||||||
|
|
||||||
|
### 修复1:同步平仓时检查盈亏情况
|
||||||
|
|
||||||
|
**修改位置**:`trading_system/position_manager.py:2150-2162`
|
||||||
|
|
||||||
|
**修复内容**:
|
||||||
|
- 在判断平仓原因时,先检查盈亏情况
|
||||||
|
- 如果盈利,优先检查止盈价格匹配
|
||||||
|
- 如果亏损,再检查止损价格匹配
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 修复2:移动止损逻辑优化
|
||||||
|
|
||||||
|
**修改位置**:`trading_system/position_manager.py:2701-2772`
|
||||||
|
|
||||||
|
**修复内容**:
|
||||||
|
- 移动止损激活后,不应该将止损价设置为成本价
|
||||||
|
- 应该设置为"保护利润"的价格(如盈利5%后,保护2.5%利润)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 修复3:分步止盈后的剩余仓位止损
|
||||||
|
|
||||||
|
**修改位置**:`trading_system/position_manager.py:2851-2854`
|
||||||
|
|
||||||
|
**修复内容**:
|
||||||
|
- 已修复:剩余仓位止损时,标记为`take_profit_partial_then_stop`
|
||||||
|
- 但需要确保数据库同步时也使用正确的状态
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🎯 紧急修复
|
||||||
|
|
||||||
|
### 优先级1:修复同步平仓判断逻辑(紧急)
|
||||||
|
|
||||||
|
**问题**:
|
||||||
|
- 同步平仓时,盈利单被错误标记为`stop_loss`
|
||||||
|
|
||||||
|
**修复**:
|
||||||
|
- 在判断平仓原因时,先检查盈亏情况
|
||||||
|
- 如果盈利,优先检查止盈价格匹配
|
||||||
|
- 如果亏损,再检查止损价格匹配
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 优先级2:修复移动止损逻辑(重要)
|
||||||
|
|
||||||
|
**问题**:
|
||||||
|
- 移动止损可能错误地将盈利单的止损价设置为成本价
|
||||||
|
|
||||||
|
**修复**:
|
||||||
|
- 移动止损激活后,不应该将止损价设置为成本价
|
||||||
|
- 应该设置为"保护利润"的价格
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📊 预期效果
|
||||||
|
|
||||||
|
### 修复后预期
|
||||||
|
|
||||||
|
**止盈单比例**:
|
||||||
|
- 当前:2.6%(1/39)
|
||||||
|
- 预期:25%+(10+/39)
|
||||||
|
|
||||||
|
**胜率**:
|
||||||
|
- 当前:38.24%
|
||||||
|
- 预期:50%+(如果盈利单被正确标记)
|
||||||
|
|
||||||
|
**盈亏比**:
|
||||||
|
- 当前:1.56:1
|
||||||
|
- 预期:2.0:1 - 2.5:1(如果盈利单被正确标记)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ⚠️ 注意事项
|
||||||
|
|
||||||
|
1. **数据修复**:
|
||||||
|
- 可能需要修复历史数据中的错误标记
|
||||||
|
- 盈利单应该被标记为`take_profit`或`trailing_stop`
|
||||||
|
|
||||||
|
2. **逻辑修复**:
|
||||||
|
- 同步平仓时,优先检查盈亏情况
|
||||||
|
- 移动止损逻辑需要优化
|
||||||
|
|
||||||
|
3. **测试验证**:
|
||||||
|
- 修复后,需要测试验证
|
||||||
|
- 确保盈利单被正确标记
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ✅ 总结
|
||||||
|
|
||||||
|
**问题**:
|
||||||
|
- ❌ 多笔盈利单被错误标记为"止损"
|
||||||
|
- ❌ 止盈单比例极低(2.6%)
|
||||||
|
- ❌ 胜率被低估
|
||||||
|
|
||||||
|
**原因**:
|
||||||
|
- 同步平仓时,判断逻辑错误(优先检查止损价格匹配,没有检查盈亏情况)
|
||||||
|
- 移动止损逻辑可能有问题
|
||||||
|
|
||||||
|
**修复**:
|
||||||
|
- ✅ 修复同步平仓判断逻辑(优先检查盈亏情况)
|
||||||
|
- ✅ 优化移动止损逻辑
|
||||||
|
- ✅ 确保分步止盈后的剩余仓位止损使用正确的状态
|
||||||
123
docs/策略执行分析_2026-01-30.md
Normal file
123
docs/策略执行分析_2026-01-30.md
Normal file
|
|
@ -0,0 +1,123 @@
|
||||||
|
# 策略执行分析报告 · 2026-01-30
|
||||||
|
|
||||||
|
## 一、今日整体统计(你提供)
|
||||||
|
|
||||||
|
| 指标 | 数值 |
|
||||||
|
|------|------|
|
||||||
|
| 总交易数 | 16(15 笔已平仓 + 1 笔持仓中) |
|
||||||
|
| 胜率 | 53.33%(8 盈 / 7 损) |
|
||||||
|
| 总盈亏 | +2.88 USDT |
|
||||||
|
| 平均盈亏 | 0.19 USDT/笔 |
|
||||||
|
| 平均持仓时长 | 91 分钟 |
|
||||||
|
| 平仓原因 | 止损 7 / 止盈 8 |
|
||||||
|
| 平均盈利 : 平均亏损 | 1.91 : 1(目标 3:1) |
|
||||||
|
| 总交易量(名义) | 388.37 USDT |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 二、订单数据深度分析
|
||||||
|
|
||||||
|
### 2.1 按交易对分布
|
||||||
|
|
||||||
|
| 交易对 | 笔数 | 止盈 | 止损 | 持仓中 | 净盈亏(USDT) | 备注 |
|
||||||
|
|--------|------|------|------|--------|-------------|------|
|
||||||
|
| **XVSUSDT** | 8 | 4 | 4 | 0 | +0.36 | 过度集中,存在秒损/短时损 |
|
||||||
|
| DASHUSDT | 3 | 1 | 1 | 1 | +0.73(已平 2 笔) | 重复开仓,冷却后仍入场 |
|
||||||
|
| CHZUSDT | 2 | 1 | 1 | 0 | +0.41 | 盈亏各一 |
|
||||||
|
| RENDERUSDT | 2 | 1 | 1 | 0 | +0.37 | 盈亏各一 |
|
||||||
|
| ARKMUSDT | 1 | 1 | 0 | 0 | +0.59 | 单笔表现好 |
|
||||||
|
|
||||||
|
结论:**XVSUSDT 单币种 8 笔占半数**,易受单币波动和噪音影响;其余 4 个标的分布较散,表现尚可。
|
||||||
|
|
||||||
|
### 2.2 持仓时长与“秒损”问题
|
||||||
|
|
||||||
|
从 `交易记录_2026-01-30T02-31-18.json` 的入场/平仓时间推算:
|
||||||
|
|
||||||
|
| 交易ID | 交易对 | 平仓类型 | 持仓时长(约) |
|
||||||
|
|--------|--------|----------|----------------|
|
||||||
|
| 2082 | XVSUSDT | 止损 | **约 8 秒** |
|
||||||
|
| 2098 | XVSUSDT | 止损 | **约 2 分钟** |
|
||||||
|
| 2108 | XVSUSDT | 止损 | 约 9 分钟 |
|
||||||
|
| 2089 | XVSUSDT | 止盈 | 约 45 分钟 |
|
||||||
|
| 2096 | XVSUSDT | 止盈 | 约 13 分钟 |
|
||||||
|
|
||||||
|
问题要点:
|
||||||
|
- **2082 几乎“秒损”**:入场后 8 秒即触发止损,多为价格瞬间反向穿透止损或入场价落在不利位置。
|
||||||
|
- **2098 约 2 分钟止损**:短时间反向波动即打止损,说明该笔入场时机或止损距离偏紧。
|
||||||
|
- 短持仓多集中在 **XVSUSDT 的止损单**,说明该标的当日波动大且存在多次“不利入场 + 快速止损”。
|
||||||
|
|
||||||
|
### 2.3 盈亏结构
|
||||||
|
|
||||||
|
- **止盈单(8 笔)**:单笔盈利约 0.41~1.24 USDT,平均约 **0.66 USDT**。
|
||||||
|
- **止损单(7 笔)**:单笔亏损约 0.20~0.50 USDT,平均约 **0.35 USDT**。
|
||||||
|
- **盈亏比**:0.66 / 0.35 ≈ **1.91 : 1**,低于策略目标 3:1。
|
||||||
|
|
||||||
|
含义:
|
||||||
|
要么止盈目标尚未充分拉远(例如多数只打到第一目标 15% 就离场),要么止损相对偏大/触发过早,导致“赚的笔数略多但每笔赚得不够多、亏的每笔也不算小”。
|
||||||
|
|
||||||
|
### 2.4 方向与杠杆
|
||||||
|
|
||||||
|
- 当日 **全部为 SELL(做空)**,方向与策略/行情一致。
|
||||||
|
- 杠杆统一 **8x**,名义价值与保证金控制在一个区间,单笔风险可控。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 三、策略执行情况总评
|
||||||
|
|
||||||
|
| 维度 | 表现 | 说明 |
|
||||||
|
|------|------|------|
|
||||||
|
| 胜率 | 良好 | 53.33%,略高于 50%,有利于正向期望 |
|
||||||
|
| 盈亏比 | 偏弱 | 1.91:1 未达 3:1,拉低期望值 |
|
||||||
|
| 标的集中度 | 风险 | XVSUSDT 占比过高,易受单币波动和噪音影响 |
|
||||||
|
| 秒损/短损 | 问题 | 存在 8 秒、2 分钟级止损,入场或过滤需加强 |
|
||||||
|
| 总结果 | 小盈 | 总盈 2.88 USDT,策略可运行但仍有优化空间 |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 四、提升与优化方案
|
||||||
|
|
||||||
|
### 4.1 提高盈亏比(向 3:1 靠拢)
|
||||||
|
|
||||||
|
- **已做**:第一目标止盈已从 10% 调整为 15%(`TAKE_PROFIT_1_PERCENT`),有利于提高单笔盈利。
|
||||||
|
- **建议**:
|
||||||
|
- 确认第二目标/最终止盈是否使用 ATR 或 3:1 目标(`RISK_REWARD_RATIO`、`ATR_TAKE_PROFIT_MULTIPLIER`),避免过早全部平仓。
|
||||||
|
- 若多数止盈只打到“第一目标”就离场,可适度提高 `TAKE_PROFIT_1_PERCENT`(如 18%~20%)或拉长第二目标,在回撤可控前提下追求更高盈亏比。
|
||||||
|
|
||||||
|
### 4.2 减少“秒损”与短时止损
|
||||||
|
|
||||||
|
- **入场过滤**:
|
||||||
|
- 提高 `MIN_SIGNAL_STRENGTH`(如 8→9),减少弱信号入场。
|
||||||
|
- 保持或收紧 `MAX_TREND_MOVE_BEFORE_ENTRY`,避免追在短期极端位。
|
||||||
|
- **短周期过滤**:
|
||||||
|
- 保持 `ENTRY_SHORT_TREND_FILTER_ENABLED` 开启,避免在 15m 明显反向时开仓。
|
||||||
|
- **可选:最短持仓时间**:
|
||||||
|
- 若仍频繁出现 1 分钟内止损,可考虑对“开仓后 N 秒内不执行止损”(仅延迟执行,不取消止损),或仅记录为观察项,避免过度干预风控。
|
||||||
|
|
||||||
|
### 4.3 降低单币种集中度(XVSUSDT)
|
||||||
|
|
||||||
|
- **冷却**:已启用 `SYMBOL_LOSS_COOLDOWN_ENABLED` 与 `SYMBOL_MAX_CONSECUTIVE_LOSSES`,同一标的连续亏损后会进入冷却,减少同一币种连续开仓。
|
||||||
|
- **建议**:
|
||||||
|
- 可适当加大 **同一交易对单日最大开仓次数**(若当前有该配置),或通过“同一 symbol 当日最多 N 笔”限制,避免单日 8 笔全集中在 XVS。
|
||||||
|
- 保持 **智能补单**(`SCAN_EXTRA_SYMBOLS_FOR_SUPPLEMENT`),让冷却时有机会在其他标的上开仓,分散标的。
|
||||||
|
|
||||||
|
### 4.4 止损与波动匹配
|
||||||
|
|
||||||
|
- 当前止损单平均约 **-10%~-13% 保证金**,与 12% 左右配置大致吻合。
|
||||||
|
- 若“秒损”多因价格瞬间穿透止损:
|
||||||
|
- 可微调 `ATR_STOP_LOSS_MULTIPLIER`(如 2.0→2.2)或 `MIN_STOP_LOSS_PRICE_PCT`,给波动稍多空间,减少被一根 K 线扫出。
|
||||||
|
- 需在“少被扫损”和“单笔亏损可控”之间平衡,建议先小步调整并观察 1~2 天。
|
||||||
|
|
||||||
|
### 4.5 统计与监控建议
|
||||||
|
|
||||||
|
- 按 **交易对** 统计:胜率、平均持仓时长、平均盈亏比,便于发现“问题标的”(如某币种胜率明显偏低或短损过多)。
|
||||||
|
- 按 **平仓原因** 统计:区分“第一目标止盈 / 第二目标止盈 / 止损 / 移动止损”占比,用于判断是否多数只打到第一目标、以及止损是否过频。
|
||||||
|
- 对 **持仓时长 < 1 分钟** 的订单单独标记或告警,便于排查秒损和入场质量。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 五、小结
|
||||||
|
|
||||||
|
- 今日策略 **小盈、胜率尚可**,但 **盈亏比 1.91:1 未达 3:1**,且存在 **XVSUSDT 过度集中** 与 **秒损/短损** 问题。
|
||||||
|
- 优先建议:**提高盈亏比**(确认止盈目标与 ATR 用法)、**加强入场与短周期过滤**(减少秒损)、**分散标的**(冷却 + 智能补单 + 可选单币种日次数上限),再根据新数据微调止损与第一目标止盈比例。
|
||||||
|
|
||||||
|
如需,我可以根据你当前 `config.py` / 后台配置,给出一版具体的参数修改建议(含推荐数值)。
|
||||||
130
docs/策略执行分析_2026-01-31.md
Normal file
130
docs/策略执行分析_2026-01-31.md
Normal file
|
|
@ -0,0 +1,130 @@
|
||||||
|
# 策略执行分析报告 · 2026-01-31
|
||||||
|
|
||||||
|
## 一、今日整体统计
|
||||||
|
|
||||||
|
| 指标 | 数值 |
|
||||||
|
|------|------|
|
||||||
|
| 总交易数 | 15(11 笔已平仓 + 4 笔持仓中) |
|
||||||
|
| 胜率 | **27.27%**(3 盈 / 8 损) |
|
||||||
|
| 总盈亏 | **-1.03 USDT** |
|
||||||
|
| 平均盈亏 | -0.09 USDT/笔 |
|
||||||
|
| 平均持仓时长 | 48 分钟 |
|
||||||
|
| 平仓原因 | **止损 8 / 止盈 3** |
|
||||||
|
| 平均盈利 : 平均亏损 | 1.79 : 1(目标 3:1) |
|
||||||
|
| 总交易量(名义) | 446.26 USDT |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 二、订单数据深度分析
|
||||||
|
|
||||||
|
### 2.1 按交易对与方向(已平仓)
|
||||||
|
|
||||||
|
| 交易对 | 方向 | 笔数 | 止盈 | 止损 | 净盈亏(USDT) | 备注 |
|
||||||
|
|--------|------|------|------|------|-------------|------|
|
||||||
|
| **SYNUSDT** | BUY | 6 | 1 | **5** | **-1.21** | 做多集中亏损,多笔秒损 |
|
||||||
|
| DUSKUSDT | SELL | 2 | 1 | 1 | +0.35 | 一盈一亏 |
|
||||||
|
| RENDERUSDT | SELL | 2 | 1 | 1 | +0.49 | 一盈一亏 |
|
||||||
|
| DASHUSDT | SELL | 1 | 0 | 1 | -0.67 | 单笔止损 |
|
||||||
|
|
||||||
|
结论:**今日亏损主要来自 SYNUSDT 做多**(5 笔止损、1 笔止盈),做空(DUSK/RENDER)略盈,DASH 做空单笔亏。
|
||||||
|
|
||||||
|
### 2.2 做多 (BUY) 问题:追高 + RSI 超买
|
||||||
|
|
||||||
|
今日所有 **BUY 均为 SYNUSDT**,入场思路中:
|
||||||
|
|
||||||
|
| 交易ID | RSI | 24h涨跌幅 | 持仓时长 | 结果 |
|
||||||
|
|--------|-----|-----------|----------|------|
|
||||||
|
| 2239 | **70.9** | 53.6% | 7分钟 | 止损 |
|
||||||
|
| 2229 | **71.4** | 52.6% | 11分钟 | 止盈 |
|
||||||
|
| 2224 | **74.7** | 62.1% | **2分钟** | 止损 |
|
||||||
|
| 2206 | **82.0** | 64.6% | **0分钟** | 止损 |
|
||||||
|
| 2187 | **73.8** | 32.7% | **2分钟** | 止损 |
|
||||||
|
| 2184 | **71.5** | 30.9% | **2分钟** | 止损 |
|
||||||
|
|
||||||
|
- **RSI 全部 ≥ 70**,多数在 71–82,处于超买区,做多容易买在短期高点。
|
||||||
|
- **24h 涨跌幅** 做多时普遍 30%–64%,说明入场时已大涨,易追高。
|
||||||
|
- **持仓时长**:多笔 0–2 分钟即止损,属于“秒损/短损”,入场质量差。
|
||||||
|
|
||||||
|
结论:**做多缺少“RSI 超买过滤”和“涨跌幅过大过滤”**,在 RSI>70、已大涨时仍开多单,导致集中止损。
|
||||||
|
|
||||||
|
### 2.3 做空 (SELL) 表现
|
||||||
|
|
||||||
|
- DUSKUSDT / RENDERUSDT:RSI 多在 16–30(超卖或趋势空),各有 1 盈 1 亏,净为正。
|
||||||
|
- DASHUSDT:RSI 22.6,趋势空,单笔持仓 111 分钟后止损,属正常波动打止损。
|
||||||
|
|
||||||
|
做空逻辑和 RSI 使用相对合理,问题主要在**做多**。
|
||||||
|
|
||||||
|
### 2.4 4H 趋势与市场状态
|
||||||
|
|
||||||
|
- **入场思路中 trend_4h 全部为 "neutral"**,4H 无明确趋势。
|
||||||
|
- 在 4H 震荡/中性时仍频繁开仓,容易在震荡中被来回扫。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 三、今日运行情况总评
|
||||||
|
|
||||||
|
| 维度 | 表现 | 说明 |
|
||||||
|
|------|------|------|
|
||||||
|
| 胜率 | 差 | 27%,远低于 50%,止损笔数过多 |
|
||||||
|
| 盈亏比 | 一般 | 1.79:1 未达 3:1,但非主要矛盾 |
|
||||||
|
| 做多质量 | 差 | SYNUSDT 做多 RSI 全≥70、多笔秒损,明显追高 |
|
||||||
|
| 做空质量 | 尚可 | 有盈有亏,净略正 |
|
||||||
|
| 4H 过滤 | 弱 | 全部 neutral 仍开仓,震荡市风险大 |
|
||||||
|
|
||||||
|
**核心结论**:今日亏损主要来自**做多时在 RSI 超买、已大涨的情况下仍开仓**,缺少“做多不追高”的过滤,导致 SYNUSDT 多笔短时止损。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 四、优化与提升建议
|
||||||
|
|
||||||
|
### 4.1 做多增加 RSI 超买过滤(优先)
|
||||||
|
|
||||||
|
- **问题**:做多时 RSI 70+ 仍开仓,买在短期高点。
|
||||||
|
- **建议**:
|
||||||
|
- **做多 (BUY)**:仅当 `RSI < 某上限` 时允许开多,例如 `RSI < 65` 或 `RSI < 70`。
|
||||||
|
- 在策略层(如 `_analyze_trade_signal` 或下单前检查)对 BUY 信号增加:
|
||||||
|
`if side == 'BUY' and rsi >= 70: 不发出/不执行做多`。
|
||||||
|
- **做空**:可保持现状或设 RSI > 30 才做空(避免深超卖反弹),今日做空 RSI 16–30 暂可接受。
|
||||||
|
|
||||||
|
**实现要点**:在 `trading_system/strategy.py` 或 `atr_strategy` 中,对 BUY 信号增加 `symbol_info.get('rsi')` 判断;若配置化,可加 `MAX_RSI_FOR_LONG`(如 65 或 70)。
|
||||||
|
|
||||||
|
### 4.2 做多“涨跌幅过大”过滤(强烈建议)
|
||||||
|
|
||||||
|
- **问题**:做多时 24h 已涨 30%–64%,容易追高。
|
||||||
|
- **建议**:
|
||||||
|
- 做多时若 `change_percent > 阈值`(如 20% 或 25%),则**不开多**或降低仓位。
|
||||||
|
- 可配置项如 `MAX_CHANGE_PERCENT_FOR_LONG`(例如 25),超过则过滤掉做多信号。
|
||||||
|
|
||||||
|
**实现要点**:在发出 BUY 信号前检查 `symbol_info['changePercent']`;若已有 `MIN_CHANGE_PERCENT`,可新增“做多最大涨跌幅”单独限制。
|
||||||
|
|
||||||
|
### 4.3 4H 趋势过滤(中性市减少开仓)
|
||||||
|
|
||||||
|
- **问题**:今日全部 `trend_4h = neutral`,震荡市仍频繁开仓。
|
||||||
|
- **建议**:
|
||||||
|
- 若配置中有“仅 4H 趋势时开仓”的选项,可**收紧**:neutral 时不开仓或仅允许小仓位。
|
||||||
|
- 或新增:`ALLOW_4H_NEUTRAL` 默认 false,neutral 时只生成推荐、不自动下单。
|
||||||
|
|
||||||
|
**实现要点**:与现有 `AUTO_TRADE_ALLOW_4H_NEUTRAL` 或 trend 过滤逻辑结合,把 neutral 视为“无趋势”,降低开仓频率。
|
||||||
|
|
||||||
|
### 4.4 单标的集中度与冷却
|
||||||
|
|
||||||
|
- **问题**:SYNUSDT 单日多笔做多连续止损,标的和方向过于集中。
|
||||||
|
- **建议**:
|
||||||
|
- 已启用同一交易对连续亏损冷却时,SYNUSDT 在 2 笔止损后应进入冷却,避免同一标的连续多笔做多。
|
||||||
|
- 可检查 `SYMBOL_LOSS_COOLDOWN_ENABLED`、`SYMBOL_MAX_CONSECUTIVE_LOSSES` 是否生效;若今日仍出现 SYNUSDT 多笔连续止损,可适当**缩短冷却时间内的补单**或**单标的单日最大开仓次数**限制。
|
||||||
|
|
||||||
|
### 4.5 止损与持仓时长(次要)
|
||||||
|
|
||||||
|
- 今日多笔 0–2 分钟止损,主要来自**入场位置差**(追高),而非单纯止损太紧。
|
||||||
|
- 优先做完 RSI + 涨跌幅过滤后,再观察是否仍有“秒损”;若仍多,再考虑微调 ATR 止损倍数或最小止损距离。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 五、小结与落地顺序
|
||||||
|
|
||||||
|
1. **立即做**:做多增加 **RSI 上限过滤**(如 RSI≥70 不开多)和 **24h 涨跌幅上限**(如做多时 change_percent > 25% 不开多)。
|
||||||
|
2. **接着做**:**4H 为 neutral 时** 不开仓或仅推荐(利用/收紧 `AUTO_TRADE_ALLOW_4H_NEUTRAL`)。
|
||||||
|
3. **确认**:同一标的连续亏损冷却、单日笔数/集中度限制是否按预期工作,避免单标的单方向连续开仓。
|
||||||
|
4. **再观察**:执行上述过滤后,看胜率、SYNUSDT 做多笔数、秒损笔数是否明显改善,再决定是否微调止损或仓位。
|
||||||
|
|
||||||
|
如需,我可以根据你当前 `strategy.py` / `atr_strategy` 的结构,直接写出“做多 RSI 上限 + 做多涨跌幅上限”的代码片段和配置项命名建议。
|
||||||
74
docs/策略调整建议_2026-01-28.md
Normal file
74
docs/策略调整建议_2026-01-28.md
Normal file
|
|
@ -0,0 +1,74 @@
|
||||||
|
# 策略调整建议 - 2026-01-28
|
||||||
|
|
||||||
|
## 当前情况
|
||||||
|
|
||||||
|
- 所有交易对都被跳过,因为市场状态都是 `ranging`(震荡市)
|
||||||
|
- 4H趋势都是 `neutral`(中性)
|
||||||
|
- 这是**正常的**,因为策略设计为只在趋势市交易
|
||||||
|
|
||||||
|
## 为什么不下单是正常的?
|
||||||
|
|
||||||
|
1. **策略设计**:`AUTO_TRADE_ONLY_TRENDING = True` 意味着只在trending市场交易
|
||||||
|
2. **历史教训**:今天的数据显示胜率16.67%,多数是止损,说明震荡市交易风险高
|
||||||
|
3. **保护资金**:震荡市容易反复止损,避免在震荡市交易是明智的选择
|
||||||
|
|
||||||
|
## 调整选项
|
||||||
|
|
||||||
|
### 选项1:保持当前严格策略(推荐)
|
||||||
|
|
||||||
|
**配置**:
|
||||||
|
- `AUTO_TRADE_ONLY_TRENDING = True`(保持不变)
|
||||||
|
- `AUTO_TRADE_ALLOW_4H_NEUTRAL = False`(保持不变)
|
||||||
|
- Trending判断阈值:3.5%(保持不变)
|
||||||
|
|
||||||
|
**优点**:
|
||||||
|
- 避免震荡市频繁止损
|
||||||
|
- 保护资金
|
||||||
|
- 只在真正的趋势市交易
|
||||||
|
|
||||||
|
**缺点**:
|
||||||
|
- 交易机会少
|
||||||
|
- 可能长时间不开仓
|
||||||
|
|
||||||
|
### 选项2:适当放宽条件(增加交易机会)
|
||||||
|
|
||||||
|
#### 2.1 降低trending判断阈值
|
||||||
|
|
||||||
|
**修改**:`trading_system/indicators.py`
|
||||||
|
```python
|
||||||
|
# 从 3.5% 降低到 2.5%
|
||||||
|
if ma_diff_pct > 2.5 and volatility_pct > 1.2:
|
||||||
|
return 'trending'
|
||||||
|
```
|
||||||
|
|
||||||
|
**效果**:更容易判断为trending,增加交易机会
|
||||||
|
|
||||||
|
#### 2.2 允许在ranging市场交易
|
||||||
|
|
||||||
|
**修改**:`trading_system/config.py`
|
||||||
|
```python
|
||||||
|
'AUTO_TRADE_ONLY_TRENDING': False, # 允许在震荡市也交易
|
||||||
|
```
|
||||||
|
|
||||||
|
**风险**:可能增加震荡市止损,胜率可能下降
|
||||||
|
|
||||||
|
#### 2.3 允许4H趋势neutral时交易
|
||||||
|
|
||||||
|
**修改**:`trading_system/config.py`
|
||||||
|
```python
|
||||||
|
'AUTO_TRADE_ALLOW_4H_NEUTRAL': True, # 允许4H趋势neutral时交易
|
||||||
|
```
|
||||||
|
|
||||||
|
**风险**:4H趋势neutral时信号质量较低,容易扫损
|
||||||
|
|
||||||
|
## 建议
|
||||||
|
|
||||||
|
1. **先观察1-2天**:保持当前严格策略,看市场是否会转为趋势市
|
||||||
|
2. **如果确实需要更多交易机会**:可以适当降低trending判断阈值(从3.5%降到2.5%)
|
||||||
|
3. **不建议完全放开**:不建议设置 `AUTO_TRADE_ONLY_TRENDING = False`,因为震荡市风险太高
|
||||||
|
|
||||||
|
## 监控指标
|
||||||
|
|
||||||
|
- 观察有多少交易对被判断为trending
|
||||||
|
- 观察是否有trending市场的交易机会
|
||||||
|
- 如果长期没有trending市场,可以考虑适当放宽阈值
|
||||||
|
|
@ -404,52 +404,68 @@ class TradingStrategy:
|
||||||
# 趋势跟踪策略(不再区分市场状态,统一使用趋势指标)
|
# 趋势跟踪策略(不再区分市场状态,统一使用趋势指标)
|
||||||
# MACD金叉/死叉(权重最高)
|
# MACD金叉/死叉(权重最高)
|
||||||
if macd and macd['macd'] > macd['signal'] and macd['histogram'] > 0:
|
if macd and macd['macd'] > macd['signal'] and macd['histogram'] > 0:
|
||||||
# MACD金叉,做多信号(需4H趋势向上或中性)
|
# MACD金叉,做多信号(严格4H趋势向上)
|
||||||
if trend_4h in ('up', 'neutral', None):
|
# OPTIMIZATION: 仅允许明确向上趋势,移除 neutral 和 None,避免震荡行情止损
|
||||||
signal_strength += TREND_SIGNAL_WEIGHTS['macd_cross']
|
if trend_4h == 'up':
|
||||||
reasons.append("MACD金叉")
|
# OPTIMIZATION: 添加 RSI 过滤,避免追高
|
||||||
if direction is None:
|
if rsi is None or rsi < 70:
|
||||||
direction = 'BUY'
|
signal_strength += TREND_SIGNAL_WEIGHTS['macd_cross']
|
||||||
|
reasons.append("MACD金叉")
|
||||||
|
if direction is None:
|
||||||
|
direction = 'BUY'
|
||||||
|
else:
|
||||||
|
reasons.append(f"MACD金叉但RSI超买({rsi:.1f}),禁止追多")
|
||||||
else:
|
else:
|
||||||
reasons.append("MACD金叉但4H趋势向下,禁止逆势做多")
|
reasons.append(f"MACD金叉但4H趋势不明确({trend_4h}),禁止开仓")
|
||||||
|
|
||||||
elif macd and macd['macd'] < macd['signal'] and macd['histogram'] < 0:
|
elif macd and macd['macd'] < macd['signal'] and macd['histogram'] < 0:
|
||||||
# MACD死叉,做空信号(需4H趋势向下或中性)
|
# MACD死叉,做空信号(严格4H趋势向下)
|
||||||
if trend_4h in ('down', 'neutral', None):
|
# OPTIMIZATION: 仅允许明确向下趋势
|
||||||
signal_strength += TREND_SIGNAL_WEIGHTS['macd_cross']
|
if trend_4h == 'down':
|
||||||
reasons.append("MACD死叉")
|
# OPTIMIZATION: 添加 RSI 过滤,避免杀跌
|
||||||
if direction is None:
|
if rsi is None or rsi > 30:
|
||||||
direction = 'SELL'
|
signal_strength += TREND_SIGNAL_WEIGHTS['macd_cross']
|
||||||
|
reasons.append("MACD死叉")
|
||||||
|
if direction is None:
|
||||||
|
direction = 'SELL'
|
||||||
|
else:
|
||||||
|
reasons.append(f"MACD死叉但RSI超卖({rsi:.1f}),禁止追空")
|
||||||
else:
|
else:
|
||||||
reasons.append("MACD死叉但4H趋势向上,禁止逆势做空")
|
reasons.append(f"MACD死叉但4H趋势不明确({trend_4h}),禁止开仓")
|
||||||
|
|
||||||
# EMA均线系统
|
# EMA均线系统
|
||||||
if ema20 and ema50:
|
if ema20 and ema50:
|
||||||
if current_price > ema20 > ema50: # 上升趋势
|
if current_price > ema20 > ema50: # 上升趋势
|
||||||
if trend_4h in ('up', 'neutral', None):
|
# OPTIMIZATION: 仅允许明确向上趋势
|
||||||
signal_strength += TREND_SIGNAL_WEIGHTS['ema_cross']
|
if trend_4h == 'up':
|
||||||
reasons.append("EMA20上穿EMA50,上升趋势")
|
# OPTIMIZATION: 添加 RSI 过滤
|
||||||
if direction is None:
|
if rsi is None or rsi < 70:
|
||||||
direction = 'BUY'
|
signal_strength += TREND_SIGNAL_WEIGHTS['ema_cross']
|
||||||
|
reasons.append("EMA20上穿EMA50,上升趋势")
|
||||||
|
if direction is None:
|
||||||
|
direction = 'BUY'
|
||||||
else:
|
else:
|
||||||
reasons.append("1H均线向上但4H趋势向下,禁止逆势做多")
|
reasons.append(f"1H均线向上但4H趋势不明确({trend_4h}),禁止开仓")
|
||||||
elif current_price < ema20 < ema50: # 下降趋势
|
elif current_price < ema20 < ema50: # 下降趋势
|
||||||
if trend_4h in ('down', 'neutral', None):
|
# OPTIMIZATION: 仅允许明确向下趋势
|
||||||
signal_strength += TREND_SIGNAL_WEIGHTS['ema_cross']
|
if trend_4h == 'down':
|
||||||
reasons.append("EMA20下穿EMA50,下降趋势")
|
# OPTIMIZATION: 添加 RSI 过滤
|
||||||
if direction is None:
|
if rsi is None or rsi > 30:
|
||||||
direction = 'SELL'
|
signal_strength += TREND_SIGNAL_WEIGHTS['ema_cross']
|
||||||
|
reasons.append("EMA20下穿EMA50,下降趋势")
|
||||||
|
if direction is None:
|
||||||
|
direction = 'SELL'
|
||||||
else:
|
else:
|
||||||
reasons.append("1H均线向下但4H趋势向上,禁止逆势做空")
|
reasons.append(f"1H均线向下但4H趋势不明确({trend_4h}),禁止开仓")
|
||||||
|
|
||||||
# 价格与EMA20关系
|
# 价格与EMA20关系
|
||||||
if ema20:
|
if ema20:
|
||||||
if current_price > ema20:
|
if current_price > ema20:
|
||||||
if trend_4h in ('up', 'neutral', None) and direction == 'BUY':
|
if trend_4h == 'up' and direction == 'BUY':
|
||||||
signal_strength += TREND_SIGNAL_WEIGHTS['price_above_ema20']
|
signal_strength += TREND_SIGNAL_WEIGHTS['price_above_ema20']
|
||||||
reasons.append("价格在EMA20之上")
|
reasons.append("价格在EMA20之上")
|
||||||
elif current_price < ema20:
|
elif current_price < ema20:
|
||||||
if trend_4h in ('down', 'neutral', None) and direction == 'SELL':
|
if trend_4h == 'down' and direction == 'SELL':
|
||||||
signal_strength += TREND_SIGNAL_WEIGHTS['price_above_ema20']
|
signal_strength += TREND_SIGNAL_WEIGHTS['price_above_ema20']
|
||||||
reasons.append("价格在EMA20之下")
|
reasons.append("价格在EMA20之下")
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -304,31 +304,41 @@ class TradeRecommender:
|
||||||
# 策略2:趋势跟踪(趋势市场)
|
# 策略2:趋势跟踪(趋势市场)
|
||||||
elif market_regime == 'trending':
|
elif market_regime == 'trending':
|
||||||
if macd and macd.get('macd', 0) > macd.get('signal', 0) and macd.get('histogram', 0) > 0:
|
if macd and macd.get('macd', 0) > macd.get('signal', 0) and macd.get('histogram', 0) > 0:
|
||||||
if trend_4h in ('up', 'neutral', None):
|
# OPTIMIZATION: 仅允许明确向上趋势
|
||||||
signal_strength += 3
|
if trend_4h == 'up':
|
||||||
reasons.append("MACD金叉")
|
# OPTIMIZATION: 添加 RSI 过滤
|
||||||
if direction is None:
|
if rsi is None or rsi < 70:
|
||||||
direction = 'BUY'
|
signal_strength += 3
|
||||||
|
reasons.append("MACD金叉")
|
||||||
|
if direction is None:
|
||||||
|
direction = 'BUY'
|
||||||
elif macd and macd.get('macd', 0) < macd.get('signal', 0) and macd.get('histogram', 0) < 0:
|
elif macd and macd.get('macd', 0) < macd.get('signal', 0) and macd.get('histogram', 0) < 0:
|
||||||
if trend_4h in ('down', 'neutral', None):
|
# OPTIMIZATION: 仅允许明确向下趋势
|
||||||
signal_strength += 3
|
if trend_4h == 'down':
|
||||||
reasons.append("MACD死叉")
|
# OPTIMIZATION: 添加 RSI 过滤
|
||||||
if direction is None:
|
if rsi is None or rsi > 30:
|
||||||
direction = 'SELL'
|
signal_strength += 3
|
||||||
|
reasons.append("MACD死叉")
|
||||||
|
if direction is None:
|
||||||
|
direction = 'SELL'
|
||||||
|
|
||||||
if ema20 and ema50:
|
if ema20 and ema50:
|
||||||
if current_price > ema20 > ema50:
|
if current_price > ema20 > ema50:
|
||||||
if trend_4h in ('up', 'neutral', None):
|
# OPTIMIZATION: 仅允许明确向上趋势
|
||||||
signal_strength += 2
|
if trend_4h == 'up':
|
||||||
reasons.append("价格在均线之上")
|
if rsi is None or rsi < 70:
|
||||||
if direction is None:
|
signal_strength += 2
|
||||||
direction = 'BUY'
|
reasons.append("价格在均线之上")
|
||||||
|
if direction is None:
|
||||||
|
direction = 'BUY'
|
||||||
elif current_price < ema20 < ema50:
|
elif current_price < ema20 < ema50:
|
||||||
if trend_4h in ('down', 'neutral', None):
|
# OPTIMIZATION: 仅允许明确向下趋势
|
||||||
signal_strength += 2
|
if trend_4h == 'down':
|
||||||
reasons.append("价格在均线之下")
|
if rsi is None or rsi > 30:
|
||||||
if direction is None:
|
signal_strength += 2
|
||||||
direction = 'SELL'
|
reasons.append("价格在均线之下")
|
||||||
|
if direction is None:
|
||||||
|
direction = 'SELL'
|
||||||
|
|
||||||
# 多周期共振加分
|
# 多周期共振加分
|
||||||
if direction and trend_4h:
|
if direction and trend_4h:
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user