This commit is contained in:
薇薇安 2026-01-25 09:16:16 +08:00
parent d9270ad6b4
commit 1032295052
21 changed files with 6663 additions and 0 deletions

255
ALTCOIN_STRATEGY_UPDATE.md Normal file
View File

@ -0,0 +1,255 @@
# 山寨币专属策略配置更新总结
> 更新时间2026-01-24
> 核心理念:**高盈亏比 + 宽止损 + 快速止盈 + 精选时机**
## 📋 更新概述
基于交易记录分析和山寨币市场特性,从"波段趋势策略"转变为"山寨币高盈亏比狙击策略"。
## 🔧 核心配置变更
### 1. 风险控制参数(最关键)
| 参数 | 原值 | 新值 | 原因 |
|------|------|------|------|
| `ATR_STOP_LOSS_MULTIPLIER` | 2.5 | **2.0** | 山寨币波动大,止损要宽但不过宽 |
| `MIN_HOLD_TIME_SEC` | 1800 | **0** | **立即取消!**山寨币30分钟可能暴涨暴跌50% |
| `STOP_LOSS_PERCENT` | 0.10 | **0.15** | 固定止损15%(相对保证金) |
| `RISK_REWARD_RATIO` | 1.5 | **4.0** | 盈亏比必须≥4用大赢家覆盖亏损 |
| `USE_FIXED_RISK_SIZING` | True | **True** | 保持固定风险,避免亏损扩大 |
| `FIXED_RISK_PERCENT` | 0.02 | **0.01** | 每笔最多亏1%(山寨币风险高) |
| `ATR_TAKE_PROFIT_MULTIPLIER` | 1.5 | **8.0** | 止盈倍数提高到8盈亏比4:1 |
| `TAKE_PROFIT_PERCENT` | 0.25 | **0.60** | 固定止盈60%4:1盈亏比 |
### 2. 入场与出场优化
| 参数 | 原值 | 新值 | 原因 |
|------|------|------|------|
| `MIN_SIGNAL_STRENGTH` | 8 | **7** | 保持较高门槛但比8合理 |
| `AUTO_TRADE_ONLY_TRENDING` | True | **True** | 山寨币只做趋势明确的 |
| `SMART_ENTRY_ENABLED` | False | **True** | 开启智能入场,提高成交率 |
| `USE_TRAILING_STOP` | False | **True** | **必须开启!**山寨币利润要保护 |
| `TRAILING_STOP_ACTIVATION` | 0.10 | **0.30** | 盈利30%后激活(山寨币波动大) |
| `TRAILING_STOP_PROTECT` | 0.05 | **0.15** | 保护15%利润(给回撤足够空间) |
| `ENTRY_MAX_DRIFT_PCT_TRENDING` | 0.6 | **0.8** | 追价偏离放宽到0.8%(山寨币跳空大) |
| `ENTRY_SYMBOL_COOLDOWN_SEC` | 120 | **1800** | 同一币种冷却30分钟 |
### 3. 交易品种筛选
| 参数 | 原值 | 新值 | 原因 |
|------|------|------|------|
| `MIN_VOLUME_24H` | 5000000 | **30000000** | 24H成交额≥3000万美元过滤垃圾币 |
| `MIN_VOLUME_24H_STRICT` | 10000000 | **50000000** | 严格过滤≥5000万美元 |
| `MAX_SCAN_SYMBOLS` | 500 | **150** | 扫描前150个覆盖主流山寨 |
| `TOP_N_SYMBOLS` | 50 | **5** | 只做信号最强的5个专注优质机会 |
| `MIN_VOLATILITY` | 0.02 | **0.03** | 最小波动率3%,过滤死币 |
### 4. 仓位与频率控制
| 参数 | 原值 | 新值 | 原因 |
|------|------|------|------|
| `MAX_POSITION_PERCENT` | 0.08 | **0.015** | 单笔仓位1.5%,山寨币不加仓 |
| `MAX_TOTAL_POSITION_PERCENT` | 0.40 | **0.12** | 总仓位12%,保守控制总风险 |
| `MAX_DAILY_ENTRIES` | 8 | **5** | 每日最多5笔山寨币少做多看 |
| `MAX_OPEN_POSITIONS` | 3 | **4** | 同时持仓不超过4个 |
| `LEVERAGE` | 10 | **8** | 基础杠杆降到8倍山寨币波动大 |
| `MAX_LEVERAGE` | 15 | **12** | 最大杠杆12倍不要超过 |
| `USE_DYNAMIC_LEVERAGE` | True | **False** | 不使用动态杠杆(保持简单) |
### 5. 时间框架调整
| 参数 | 原值 | 新值 | 原因 |
|------|------|------|------|
| `PRIMARY_INTERVAL` | 1h | **4h** | 主周期用4小时过滤噪音 |
| `ENTRY_INTERVAL` | 15m | **1h** | 入场周期1小时避免太小的时间框架 |
| `CONFIRM_INTERVAL` | 4h | **1d** | 确认周期用日线,看大趋势 |
| `SCAN_INTERVAL` | 1800 | **3600** | 扫描间隔1小时3600秒 |
## 📈 山寨币专用策略逻辑
### 1. 止损策略:宽但坚决
```
ATR倍数2.0 + 固定止损15%(哪个先触发用哪个)
不设持仓锁:触及止损立即离场
逻辑山寨币正常波动10-20%很常见,止损要容忍正常波动,但不能容忍趋势反转
```
### 2. 止盈策略:分批 + 移动止损
```
第一目标盈亏比1:1快速锁定30-50%利润)
第二目标盈亏比4:1剩余仓位追求大赢家
移动止损盈利30%后激活保护15%利润
逻辑山寨币可能暴涨100%+,也可能瞬间反转,要快速锁定部分利润
```
### 3. 品种选择:流动性为王
```
合格山寨币标准:
1. 24小时成交额 > 3000万美元
2. 市值排名前150
3. 有明确趋势4小时+日线)
4. 波动率 ≥ 3%
5. 不在异常暴涨暴跌期间
```
### 4. 时机选择:跟随大盘
```
只在BTC处于明确趋势时交易山寨币
AUTO_TRADE_ONLY_TRENDING = True
AUTO_TRADE_ALLOW_4H_NEUTRAL = False
```
## 💰 数学期望计算
### 优化后目标
```
胜率35%(山寨币难有高胜率)
盈亏比4.0
固定风险每笔1%
期望值 = (胜率 × 盈亏比) - (1 - 胜率)
= (0.35 × 4.0) - 0.65
= 1.4 - 0.65
= 0.75
每笔交易平均盈利0.75个风险单位即总资金的0.75%
```
### 与现状对比
```
现状:
- 胜率30%
- 盈亏比0.91:1
- 期望值:(0.30 × 0.91) - 0.70 = -0.427(严重亏损)
优化后:
- 胜率35%(目标)
- 盈亏比4.0:1
- 期望值:+0.75(盈利)
改善:从-42.7%变为+75%期望值提升117.7%
```
## ⚠️ 山寨币交易铁律
1. **绝不扛单**亏损15%无条件离场
2. **绝不加仓**:山寨币没有"摊平成本",只有越亏越多
3. **绝不做空低流通币**:容易被轧空
4. **绝不信消息**:只信价格和成交量
5. **仓位永远小于主流币**单笔不超过1.5%
## 🎯 执行计划
### 第一阶段:配置更新(今天)
1. ✅ 更新 `trading_system/config.py` 中的所有配置默认值
2. ✅ 更新 `trade_recommender.py` 中的分批止盈逻辑
3. ⏳ 重启所有trading_system进程使新配置生效
4. ⏳ 在Redis中清除旧配置缓存或等待自动过期
### 第二阶段回测验证1-2天
1. 用极小实盘单笔0.5%)测试新策略
2. 记录每笔交易的:
- 入场信号强度
- 最大浮盈
- 是否触及止损/止盈
- 持仓时间
- 退出原因
3. 目标胜率35-40%盈亏比3.5-4.5
### 第三阶段正式运行3天后
1. 单笔风险1%总仓位不超过10%
2. 每日最多交易3-5笔
3. 每周复盘,调整过滤条件
4. 持续监控盈亏比和期望值
## 📊 关键指标监控
### 必须监控的指标
1. **实际盈亏比**:必须 > 3.5目标4.0
2. **盈利因子**:总盈利 / 总亏损,必须 > 1.1
3. **平均持仓时间**应该在1-4小时之间
4. **最大回撤**单日不超过总资金的5%
5. **胜率**目标35-40%
### 预警阈值
- 盈亏比 < 3.0立即暂停交易检查策略
- 胜率 < 25%信号质量有问题提高MIN_SIGNAL_STRENGTH
- 单日亏损 > 3%:暂停交易,检查市场环境
- 连续亏损 > 5笔暂停交易等待市场转好
## 🔄 后续优化方向
### 短期1周内
1. 监控并微调 `MIN_SIGNAL_STRENGTH`7-8之间
2. 根据实际情况微调 `ATR_STOP_LOSS_MULTIPLIER`1.8-2.2之间)
3. 观察并记录哪些币种表现最好
### 中期1月内
1. 实现按市值分级的动态参数见summary中的伪代码
2. 添加BTC趋势过滤BTC下跌时不做山寨币多单
3. 优化移动止损的激活和保护参数
### 长期3月内
1. 建立山寨币白名单/黑名单机制
2. 实现资金管理优化(凯利公式动态调整)
3. 开发山寨币专用的技术指标组合
## 📝 配置文件清单
已更新的文件:
- ✅ `trading_system/config.py` - 核心配置默认值
- ✅ `trading_system/trade_recommender.py` - 推荐生成逻辑
- ⏳ `backend/config_manager.py` - 配置管理器默认值(待更新)
- ⏳ `backend/api/routes/config.py` - API配置元数据待更新
## ⚡ 立即执行的操作
```bash
# 1. 重启所有trading_system进程使新配置生效
supervisorctl restart auto_sys:*
# 2. 重启推荐服务
supervisorctl restart auto_recommend:*
# 3. 查看日志确认新配置已生效
tail -f /www/wwwroot/autosys_new/logs/trading_*.log
# 4. 检查配置是否正确加载
# 在日志中查找以下关键配置:
# - ATR_STOP_LOSS_MULTIPLIER: 2.0
# - RISK_REWARD_RATIO: 4.0
# - MIN_HOLD_TIME_SEC: 0
# - USE_TRAILING_STOP: True
```
## ✅ 验证清单
- [ ] ATR止损倍数 = 2.0
- [ ] 盈亏比 = 4.0
- [ ] 最小持仓时间 = 0已取消
- [ ] 移动止损已启用激活30%保护15%
- [ ] 智能入场已启用
- [ ] 单笔仓位 ≤ 1.5%
- [ ] 总仓位 ≤ 12%
- [ ] 每日最多5笔
- [ ] 基础杠杆 = 8倍
- [ ] 24H成交量 ≥ 3000万美元
---
**重要提醒**配置更新后务必密切监控前3-5笔交易确保新策略按预期运行。如有异常立即暂停并检查日志。

View File

@ -0,0 +1,282 @@
# 配置架构验证文档
## 📋 验证目标
确认:
1. ✅ **所有用户下的账户都使用全局策略配置**
2. ✅ **普通用户无法通过自己的配置直接影响核心策略参数**
---
## 🏗️ 配置架构设计
### 1. 配置层级
```
┌─────────────────────────────────────────────────────────┐
│ 全局策略账号 (account_id=1, 默认) │
│ - 存储所有核心策略参数 │
│ - 例如ATR_STOP_LOSS_MULTIPLIER, ATR_TAKE_PROFIT_... │
└─────────────────────────────────────────────────────────┘
↓ 读取
┌─────────────────────────────────────────────────────────┐
│ 用户账户 (account_id=2, 3, 4...) │
│ - 存储风险旋钮(每个账户独立) │
│ - 例如MAX_POSITION_PERCENT, AUTO_TRADE_ENABLED... │
└─────────────────────────────────────────────────────────┘
```
### 2. 配置读取逻辑
**位置**`backend/config_manager.py` 的 `get_trading_config()` 方法
```python
def eff_get(key: str, default: Any):
"""
策略核心默认从全局账号读取GLOBAL_STRATEGY_ACCOUNT_ID
风险旋钮:从当前账号读取。
"""
# API key/secret/testnet 永远按账号读取
if key in RISK_KNOBS_KEYS or global_mgr is None:
return self.get(key, default) # 从当前账号读取
try:
# 从全局账号读取
return global_mgr.get(key, default)
except Exception:
return self.get(key, default)
```
**风险旋钮列表**`RISK_KNOBS_KEYS`
- `MIN_MARGIN_USDT`
- `MIN_POSITION_PERCENT`
- `MAX_POSITION_PERCENT`
- `MAX_TOTAL_POSITION_PERCENT`
- `AUTO_TRADE_ENABLED`
- `MAX_OPEN_POSITIONS`
- `MAX_DAILY_ENTRIES`
**核心策略参数**(从全局账号读取):
- `ATR_STOP_LOSS_MULTIPLIER`
- `ATR_TAKE_PROFIT_MULTIPLIER`
- `RISK_REWARD_RATIO`
- `USE_FIXED_RISK_SIZING`
- `FIXED_RISK_PERCENT`
- `USE_DYNAMIC_ATR_MULTIPLIER`
- `MIN_SIGNAL_STRENGTH`
- `SCAN_INTERVAL`
- `TOP_N_SYMBOLS`
- ... 等等所有非风险旋钮的配置
---
## 🔒 权限控制
### 1. 后端API权限控制
**位置**`backend/api/routes/config.py`
#### GET `/api/config` - 获取配置列表
```python
# 普通用户:只展示风险旋钮 + 账号密钥
# 管理员:若当前不是"全局策略账号",同样只展示风险旋钮
is_admin = (user.get("role") or "user") == "admin"
gid = _global_strategy_account_id()
if (not is_admin) or (is_admin and int(account_id) != int(gid)):
allowed = set(USER_RISK_KNOBS) | {"BINANCE_API_KEY", "BINANCE_API_SECRET", "USE_TESTNET"}
result = {k: v for k, v in result.items() if k in allowed}
```
**验证**
- ✅ 普通用户只能看到 `USER_RISK_KNOBS` + API密钥
- ✅ 管理员在非全局策略账号时,也只能看到风险旋钮
- ✅ 只有管理员在全局策略账号时,才能看到所有配置
#### PUT `/api/config/{key}` - 更新单个配置
```python
# 管理员:若不是全局策略账号,则禁止修改策略核心
if (user.get("role") or "user") == "admin":
gid = _global_strategy_account_id()
if int(account_id) != int(gid):
if key not in (USER_RISK_KNOBS | {"BINANCE_API_KEY", "BINANCE_API_SECRET", "USE_TESTNET"}):
raise HTTPException(status_code=403, detail=f"该配置由全局策略账号 #{gid} 统一管理")
# 产品模式:普通用户只能改"风险旋钮"与账号私有密钥/测试网
if (user.get("role") or "user") != "admin":
if key not in (USER_RISK_KNOBS | {"BINANCE_API_KEY", "BINANCE_API_SECRET", "USE_TESTNET"}):
raise HTTPException(status_code=403, detail="该配置由平台统一管理(仅管理员可修改)")
```
**验证**
- ✅ 普通用户尝试修改核心策略参数会返回 403 错误
- ✅ 管理员在非全局策略账号时,也无法修改核心策略参数
- ✅ 只有管理员在全局策略账号时,才能修改核心策略参数
#### POST `/api/config/batch` - 批量更新配置
```python
for item in configs:
# 管理员:若不是全局策略账号,则批量只允许风险旋钮/密钥
if (user.get("role") or "user") == "admin":
gid = _global_strategy_account_id()
if int(account_id) != int(gid):
if item.key not in (USER_RISK_KNOBS | {"BINANCE_API_KEY", "BINANCE_API_SECRET", "USE_TESTNET"}):
errors.append(f"{item.key}: 该配置由全局策略账号 #{gid} 统一管理,请切换账号修改")
continue
# 产品模式:普通用户只能改"风险旋钮"与账号私有密钥/测试网
if (user.get("role") or "user") != "admin":
if item.key not in (USER_RISK_KNOBS | {"BINANCE_API_KEY", "BINANCE_API_SECRET", "USE_TESTNET"}):
errors.append(f"{item.key}: 该配置由平台统一管理(仅管理员可修改)")
continue
```
**验证**
- ✅ 普通用户批量更新时,核心策略参数会被过滤并返回错误
- ✅ 管理员在非全局策略账号时,核心策略参数也会被过滤
---
## ✅ 验证结果
### 1. 所有账户使用全局策略配置 ✅
**验证点**
- `config_manager.py``get_trading_config()` 方法中,所有非风险旋钮的配置都通过 `eff_get()` 从全局账号读取
- 即使普通用户在自己的账户中设置了核心策略参数,也不会生效(因为读取时从全局账号读取)
**代码位置**
- `backend/config_manager.py:509-522`
**结论**:✅ **所有账户都使用全局策略配置**
---
### 2. 普通用户无法修改核心策略参数 ✅
**验证点**
- **前端限制**普通用户在配置页面只能看到风险旋钮通过API过滤
- **后端限制**
- GET `/api/config`:只返回风险旋钮
- PUT `/api/config/{key}`:尝试修改核心参数返回 403
- POST `/api/config/batch`:核心参数被过滤并返回错误
**代码位置**
- `backend/api/routes/config.py:273-280` (GET)
- `backend/api/routes/config.py:645-655` (PUT)
- `backend/api/routes/config.py:765-776` (POST)
**结论**:✅ **普通用户无法通过自己的配置直接影响核心策略参数**
---
## 📊 配置分类总结
### 风险旋钮(每个账户独立)
- `MIN_MARGIN_USDT` - 最小保证金USDT
- `MIN_POSITION_PERCENT` - 最小仓位占比
- `MAX_POSITION_PERCENT` - 最大仓位占比
- `MAX_TOTAL_POSITION_PERCENT` - 总仓位占比上限
- `AUTO_TRADE_ENABLED` - 自动交易开关
- `MAX_OPEN_POSITIONS` - 同时持仓数量上限
- `MAX_DAILY_ENTRIES` - 每日最多开仓次数
### 核心策略参数(全局统一)
- `ATR_STOP_LOSS_MULTIPLIER` - ATR止损倍数
- `ATR_TAKE_PROFIT_MULTIPLIER` - ATR止盈倍数
- `RISK_REWARD_RATIO` - 盈亏比
- `USE_FIXED_RISK_SIZING` - 使用固定风险百分比
- `FIXED_RISK_PERCENT` - 固定风险百分比
- `USE_DYNAMIC_ATR_MULTIPLIER` - 动态ATR倍数
- `MIN_SIGNAL_STRENGTH` - 最小信号强度
- `SCAN_INTERVAL` - 扫描间隔
- `TOP_N_SYMBOLS` - 每次扫描处理的交易对数量
- ... 等等所有非风险旋钮的配置
### 账号私有配置(每个账户独立)
- `BINANCE_API_KEY` - 币安API密钥
- `BINANCE_API_SECRET` - 币安API密钥
- `USE_TESTNET` - 是否使用测试网
---
## 🎯 实际运行验证
### 测试场景1普通用户查看配置
1. 普通用户登录
2. 进入配置页面
3. **预期**:只能看到风险旋钮 + API密钥配置
4. **验证**:前端只显示允许的配置项
### 测试场景2普通用户尝试修改核心策略参数
1. 普通用户登录
2. 尝试通过API修改 `ATR_STOP_LOSS_MULTIPLIER`
3. **预期**:返回 403 错误:"该配置由平台统一管理(仅管理员可修改)"
4. **验证**:后端拒绝修改请求
### 测试场景3管理员在非全局策略账号修改核心策略参数
1. 管理员登录
2. 切换到非全局策略账号(如 account_id=2
3. 尝试修改 `ATR_STOP_LOSS_MULTIPLIER`
4. **预期**:返回 403 错误:"该配置由全局策略账号 #1 统一管理,请切换到该账号修改"
5. **验证**:后端拒绝修改请求
### 测试场景4管理员在全局策略账号修改核心策略参数
1. 管理员登录
2. 切换到全局策略账号account_id=1
3. 修改 `ATR_STOP_LOSS_MULTIPLIER = 2.5`
4. **预期**:修改成功
5. **验证**:所有账户的交易系统都会使用新的值(通过 `config_manager.get_trading_config()` 读取)
---
## 🔍 代码检查清单
- [x] `backend/config_manager.py` - 配置读取逻辑使用全局账号
- [x] `backend/api/routes/config.py` - API权限控制
- [x] `frontend/src/components/ConfigPanel.jsx` - 前端配置页面(依赖后端过滤)
- [x] `frontend/src/components/GlobalConfig.jsx` - 管理员全局配置页面
---
## ✅ 最终结论
1. ✅ **所有用户下的账户都使用全局策略配置**
- 通过 `config_manager.get_trading_config()``eff_get()` 函数实现
- 核心策略参数从全局账号account_id=1读取
- 风险旋钮从当前账号读取
2. ✅ **普通用户无法通过自己的配置直接影响核心策略参数**
- 前端:只能看到风险旋钮
- 后端:尝试修改核心参数会返回 403 错误
- 即使数据库中有值,读取时也会从全局账号读取
3. ✅ **管理员权限控制**
- 管理员在非全局策略账号时,也只能修改风险旋钮
- 只有管理员在全局策略账号时,才能修改核心策略参数
---
## 📝 注意事项
1. **全局策略账号ID**:默认是 `account_id=1`,可通过环境变量 `ATS_GLOBAL_STRATEGY_ACCOUNT_ID` 修改
2. **配置缓存**:配置存储在 Redis 中,修改后需要确保 Redis 缓存已更新
3. **配置生效**:修改全局策略配置后,所有账户的交易系统会在下次 `reload_from_redis()` 时读取新值
4. **风险旋钮的作用**:虽然核心策略参数是全局的,但每个账户可以通过风险旋钮控制:
- 仓位大小MAX_POSITION_PERCENT
- 交易频率MAX_DAILY_ENTRIES
- 同时持仓数量MAX_OPEN_POSITIONS
- 是否启用自动交易AUTO_TRADE_ENABLED
---
## 🎯 建议
1. **定期检查**:定期验证全局策略账号的配置是否正确
2. **配置快照**:在修改全局策略配置前,先导出配置快照作为备份
3. **测试环境**:在测试环境验证配置修改的效果,再应用到生产环境
4. **文档更新**:修改配置后,及时更新相关文档

266
GLOBAL_CONFIG_MIGRATION.md Normal file
View File

@ -0,0 +1,266 @@
# 全局配置独立化迁移说明
## 📋 概述
将全局策略配置从依赖 `account_id=1` 改为独立的配置系统,使用独立的 `global_strategy_config` 表和 Redis 缓存。
## 🎯 目标
1. ✅ 全局配置不再依赖任何账户account_id
2. ✅ 独立的数据库表 `global_strategy_config`
3. ✅ 独立的 Redis 缓存键 `global_strategy_config`
4. ✅ 只有管理员可以查看和修改全局配置
5. ✅ 所有账户自动使用全局配置(通过 `config_manager.py` 读取)
---
## 📦 数据库变更
### 1. 创建新表
执行迁移脚本:
```bash
mysql -u your_user -p auto_trade_sys < backend/database/add_global_strategy_config.sql
```
**新表结构**
```sql
CREATE TABLE `global_strategy_config` (
`id` INT PRIMARY KEY AUTO_INCREMENT,
`config_key` VARCHAR(100) NOT NULL,
`config_value` TEXT NOT NULL,
`config_type` VARCHAR(50) NOT NULL,
`category` VARCHAR(50) NOT NULL,
`description` TEXT,
`updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`updated_by` VARCHAR(50),
UNIQUE KEY `uk_config_key` (`config_key`)
)
```
### 2. 数据迁移
迁移脚本会自动将 `account_id=1` 的核心策略配置迁移到 `global_strategy_config` 表。
**迁移规则**
- 只迁移非风险旋钮的配置
- 风险旋钮(`MIN_MARGIN_USDT`, `MAX_POSITION_PERCENT` 等)不迁移
- API密钥`BINANCE_API_KEY`, `BINANCE_API_SECRET`)不迁移
---
## 🔧 代码变更
### 1. 数据库模型 (`backend/database/models.py`)
**新增**`GlobalStrategyConfig` 类
- `get_all()` - 获取所有全局配置
- `get(key)` - 获取单个配置
- `set(key, value, ...)` - 设置配置
- `get_value(key, default)` - 获取配置值(自动转换类型)
- `delete(key)` - 删除配置
### 2. 配置管理器 (`backend/config_manager.py`)
**新增**`GlobalStrategyConfigManager` 类
- 独立的 Redis 缓存键:`global_strategy_config`
- 独立的数据库表:`global_strategy_config`
- 单例模式,确保全局唯一
**修改**`ConfigManager.get_trading_config()`
- 从 `GlobalStrategyConfigManager` 读取全局配置
- 不再依赖 `account_id=1`
- 风险旋钮仍从当前账户读取
### 3. API 路由 (`backend/api/routes/config.py`)
**新增端点**
- `GET /api/config/global` - 获取全局配置(仅管理员)
- `PUT /api/config/global/{key}` - 更新单个全局配置(仅管理员)
- `POST /api/config/global/batch` - 批量更新全局配置(仅管理员)
**修改端点**
- `GET /api/config/meta` - 移除 `global_strategy_account_id` 字段
**权限控制**
- 所有全局配置端点都检查管理员权限
- 非管理员访问返回 403 错误
### 4. 前端 API 服务 (`frontend/src/services/api.js`)
**修改**
- `getGlobalConfigs()` - 不再需要 `globalAccountId` 参数
- `updateGlobalConfigsBatch()` - 不再需要 `globalAccountId` 参数
### 5. 前端组件 (`frontend/src/components/GlobalConfig.jsx`)
**移除**
- 所有对 `configMeta.global_strategy_account_id` 的引用
- 所有对 `globalAccountId` 的计算和使用
**简化**
- `loadConfigs()` - 直接调用 `api.getGlobalConfigs()`,无需 account_id
- `handleApplyPreset()` - 直接调用 `api.updateGlobalConfigsBatch()`,无需 account_id
- `buildConfigSnapshot()` - 直接调用 `api.getGlobalConfigs()`,无需 account_id
---
## 🔄 迁移步骤
### 步骤1执行数据库迁移
```bash
cd /path/to/auto_trade_sys
mysql -u your_user -p auto_trade_sys < backend/database/add_global_strategy_config.sql
```
### 步骤2重启后端服务
```bash
# 重启 FastAPI 后端
systemctl restart your-backend-service
# 或
supervisorctl restart backend
```
### 步骤3重启交易系统
```bash
# 重启所有交易进程,使新配置生效
supervisorctl restart all
```
### 步骤4验证
1. **管理员登录**,进入"全局配置"页面
2. **检查配置项**:应该能看到所有核心策略配置
3. **修改配置**:尝试修改一个配置项,确认保存成功
4. **检查数据库**:确认 `global_strategy_config` 表中有数据
5. **检查 Redis**:确认 `global_strategy_config` 键中有缓存
---
## ⚠️ 注意事项
### 1. 向后兼容
- 如果 `global_strategy_config` 表不存在,系统会回退到从 `account_id=1` 读取(兼容旧系统)
- 迁移脚本会自动迁移现有配置,不会丢失数据
### 2. Redis 缓存
- 全局配置使用独立的 Redis 键:`global_strategy_config`
- 账户配置仍使用:`trading_config:{account_id}`
- 修改全局配置后,会自动更新 Redis 缓存
### 3. 权限控制
- **管理员**:可以查看和修改全局配置
- **普通用户**:无法访问全局配置 API返回 403
- 普通用户只能修改自己账户的风险旋钮
### 4. 配置读取优先级
1. **风险旋钮**:从当前账户的 `trading_config` 表读取
2. **核心策略参数**:从 `global_strategy_config` 表读取
3. **API密钥**:从 `accounts` 表读取(每个账户独立)
---
## 📊 配置分类
### 全局配置(管理员专用)
- `ATR_STOP_LOSS_MULTIPLIER`
- `ATR_TAKE_PROFIT_MULTIPLIER`
- `RISK_REWARD_RATIO`
- `USE_FIXED_RISK_SIZING`
- `FIXED_RISK_PERCENT`
- `USE_DYNAMIC_ATR_MULTIPLIER`
- `MIN_SIGNAL_STRENGTH`
- `SCAN_INTERVAL`
- `TOP_N_SYMBOLS`
- ... 等等所有非风险旋钮的配置
### 账户配置(每个账户独立)
- `MIN_MARGIN_USDT`
- `MIN_POSITION_PERCENT`
- `MAX_POSITION_PERCENT`
- `MAX_TOTAL_POSITION_PERCENT`
- `AUTO_TRADE_ENABLED`
- `MAX_OPEN_POSITIONS`
- `MAX_DAILY_ENTRIES`
### 账号私有配置(每个账户独立)
- `BINANCE_API_KEY`
- `BINANCE_API_SECRET`
- `USE_TESTNET`
---
## 🐛 故障排查
### 问题1全局配置无法加载
**检查**
1. 确认 `global_strategy_config` 表已创建
2. 确认表中有数据(执行迁移脚本)
3. 检查后端日志,查看是否有错误
**解决**
```sql
-- 检查表是否存在
SHOW TABLES LIKE 'global_strategy_config';
-- 检查表中是否有数据
SELECT COUNT(*) FROM global_strategy_config;
```
### 问题2管理员无法修改全局配置
**检查**
1. 确认用户角色是 `admin`
2. 检查 API 返回的错误信息
3. 检查后端日志
**解决**
```sql
-- 检查用户角色
SELECT id, username, role FROM users WHERE username = 'your_username';
```
### 问题3交易系统仍使用旧配置
**检查**
1. 确认 Redis 缓存已更新
2. 确认交易系统已重启
3. 检查 `config_manager.py` 是否正确读取全局配置
**解决**
```bash
# 清除 Redis 缓存(可选)
redis-cli DEL global_strategy_config
# 重启交易系统
supervisorctl restart all
```
---
## ✅ 验证清单
- [ ] 数据库迁移脚本已执行
- [ ] `global_strategy_config` 表已创建
- [ ] 配置数据已迁移
- [ ] 后端服务已重启
- [ ] 交易系统已重启
- [ ] 管理员可以查看全局配置
- [ ] 管理员可以修改全局配置
- [ ] 普通用户无法访问全局配置
- [ ] 所有账户使用相同的全局配置
- [ ] Redis 缓存正常工作
---
## 📝 总结
全局配置已完全独立化,不再依赖任何账户。所有核心策略参数由管理员统一管理,存储在独立的 `global_strategy_config` 表中,使用独立的 Redis 缓存键。普通用户只能修改自己账户的风险旋钮,无法影响全局策略。

View File

@ -0,0 +1,250 @@
# 山寨币策略快速应用指南
> 5分钟内完成配置更新和验证
## 🚀 快速应用步骤
### 步骤1确认代码已更新✅ 已完成)
已更新的文件:
- ✅ `trading_system/config.py` - 核心配置
- ✅ `trading_system/trade_recommender.py` - 推荐生成
- ✅ `trading_system/position_manager.py` - 持仓管理
### 步骤2重启所有进程⚡ 立即执行)
```bash
# 1. 重启所有交易进程
supervisorctl restart auto_sys:*
# 2. 重启推荐服务
supervisorctl restart auto_recommend:*
# 3. 确认进程状态
supervisorctl status
```
### 步骤3验证配置生效🔍 关键检查)
查看日志,确认以下关键参数:
```bash
# 查看最新日志
tail -n 100 /www/wwwroot/autosys_new/logs/trading_*.log | grep -E "ATR_STOP_LOSS_MULTIPLIER|RISK_REWARD_RATIO|MIN_HOLD_TIME_SEC|USE_TRAILING_STOP|MAX_POSITION_PERCENT"
```
应该看到:
- `ATR_STOP_LOSS_MULTIPLIER: 2.0`
- `RISK_REWARD_RATIO: 4.0`
- `MIN_HOLD_TIME_SEC: 0`
- `USE_TRAILING_STOP: True`
- `MAX_POSITION_PERCENT: 0.015`
### 步骤4清理旧配置缓存可选
如果配置没有生效可能需要清理Redis缓存
```bash
# 方法1通过backend API清理推荐
curl -X POST "http://your-api-domain/api/config/clear-cache"
# 方法2直接重启Redis谨慎
# supervisorctl restart redis
```
## ✅ 验证清单
使用这个清单逐项验证:
### 风险控制
- [ ] ATR止损倍数 = 2.0(日志确认)
- [ ] 固定止损 = 15%(日志确认)
- [ ] 盈亏比 = 4.0(日志确认)
- [ ] 最小持仓时间 = 0秒已取消
- [ ] 每笔风险 = 1%
### 止盈策略
- [ ] 移动止损已启用
- [ ] 移动止损激活 = 30%
- [ ] 移动止损保护 = 15%
- [ ] 第一目标盈亏比 = 1:1
- [ ] 第二目标盈亏比 = 4:1
### 仓位管理
- [ ] 单笔仓位 ≤ 1.5%
- [ ] 总仓位 ≤ 12%
- [ ] 最大同时持仓 = 4个
- [ ] 基础杠杆 = 8倍
- [ ] 最大杠杆 = 12倍
### 交易控制
- [ ] 每日最多5笔
- [ ] 智能入场已启用
- [ ] 币种冷却 = 30分钟
- [ ] 只做趋势市AUTO_TRADE_ONLY_TRENDING = True
### 品种筛选
- [ ] 24H成交量 ≥ 3000万美元
- [ ] 最小波动率 ≥ 3%
- [ ] 最多扫描150个
- [ ] 只做前5个最强信号
### 时间框架
- [ ] 主周期 = 4小时
- [ ] 入场周期 = 1小时
- [ ] 确认周期 = 日线
- [ ] 扫描间隔 = 1小时
## 🔧 如果配置未生效
### 情况1进程重启失败
```bash
# 查看错误日志
tail -n 50 /www/wwwroot/autosys_new/logs/trading_*.err.log
# 常见问题:
# - 代码语法错误:检查最近修改的代码
# - 数据库连接失败:检查数据库状态
# - Redis连接失败检查Redis状态
```
### 情况2配置值仍是旧值
```bash
# 强制重新加载配置
# 在Python代码中调用
# config._config_manager.reload_from_redis()
# 或重启backend服务
supervisorctl restart backend
```
### 情况3部分配置生效部分未生效
```bash
# 检查数据库中的配置(可能有冲突)
# 使用backend管理界面或直接查询数据库
# SELECT * FROM trading_config WHERE config_key LIKE '%ATR%' OR config_key LIKE '%RISK%';
```
## 📊 监控前3笔交易
策略更新后密切监控前3笔交易的关键数据
```
第1笔交易
- 开仓价格_______
- 止损价格_______应该是开仓价的±15%左右)
- 止盈价格_______应该是止损距离的4倍
- 实际杠杆_______应该是8倍左右
- 保证金占比_______应该≤1.5%
第2笔交易
- 开仓价格_______
- 止损价格_______
- 止盈价格_______
- 实际杠杆_______
- 保证金占比_______
第3笔交易
- 开仓价格_______
- 止损价格_______
- 止盈价格_______
- 实际杠杆_______
- 保证金占比_______
```
### 异常判断标准
如果出现以下情况,立即暂停并检查:
- ❌ 止损距离 < 10% > 20%
- ❌ 盈亏比 < 3:1
- ❌ 单笔保证金 > 2%
- ❌ 杠杆 > 12倍
- ❌ 同时持仓 > 4个
- ❌ 触发止损但仍在持仓(说明止损未生效)
## 🎯 预期效果3-5天后
如果策略正确执行,应该看到:
### 短期指标1-2天
- 胜率30-40%(初期可能偏低,正常)
- 单笔盈亏:盈利单平均+4%,亏损单平均-1%
- 交易频率每日2-5笔
- 持仓时间1-4小时
### 中期指标3-5天
- 胜率35-45%
- 盈亏比3.5:1 - 4.5:1
- 期望值:+0.5% - +1.0%(每笔)
- 最大回撤:单日 < 3%
### 预警信号
如果出现以下情况,说明需要调整:
- ⚠️ 胜率 < 25%提高MIN_SIGNAL_STRENGTH到8
- ⚠️ 盈亏比 < 3:1检查止盈设置
- ⚠️ 单日亏损 > 5%:暂停交易,检查市场环境
- ⚠️ 连续亏损 > 5笔暂停交易等待市场转好
## 📞 问题排查
### 问题1配置更新后没有新交易
**可能原因:**
- 信号强度要求提高MIN_SIGNAL_STRENGTH=7
- 成交量要求提高MIN_VOLUME_24H=3000万
- 市场不满足AUTO_TRADE_ONLY_TRENDING条件
**解决方案:**
- 查看推荐服务日志,确认是否有新推荐生成
- 检查当前市场是否处于趋势中
- 如果长期没有交易可以临时降低MIN_SIGNAL_STRENGTH到6
### 问题2止损触发太频繁
**可能原因:**
- ATR_STOP_LOSS_MULTIPLIER太小
- 选择的币种波动过大
**解决方案:**
- 提高ATR_STOP_LOSS_MULTIPLIER到2.2或2.5
- 提高MIN_VOLATILITY筛选标准
- 检查是否在异常波动期间交易
### 问题3盈利单无法达到TP2
**可能原因:**
- 盈亏比4:1对当前市场环境过高
- 移动止损激活过早
**解决方案:**
- 降低RISK_REWARD_RATIO到3.0或3.5
- 提高TRAILING_STOP_ACTIVATION到40%
- 观察是否有盈利单达到30%但未触发移动止损
## 🔄 后续优化
根据实际运行情况,可能需要微调:
### 1周后可能的调整
- MIN_SIGNAL_STRENGTH6.5 - 8
- ATR_STOP_LOSS_MULTIPLIER1.8 - 2.2
- RISK_REWARD_RATIO3.5 - 4.5
- TRAILING_STOP_ACTIVATION25% - 35%
### 1个月后可能的调整
- 建立币种白名单/黑名单
- 按市值分级设置不同参数
- 添加BTC趋势过滤
---
**最后提醒**
1. 🚨 配置更新后前3笔交易必须人工监控
2. 📊 每日检查盈亏比和期望值是否符合预期
3. ⚡ 如有异常立即暂停交易并检查日志
4. 📈 坚持记录每笔交易数据,持续优化
**祝交易顺利!**

View File

@ -0,0 +1,198 @@
# 快速方案选择建议
## 📊 当前可用的快速方案
根据你的系统已完成的优化(大盘共振、固定风险百分比、信号强度分级、阶梯杠杆),以下是各方案的适用场景:
---
## 🎯 推荐方案(按优先级)
### ⭐⭐⭐ **首选波段回归swing**
**适用场景**
- ✅ 刚完成优化,想验证效果
- ✅ 追求稳定盈利,不追求高频
- ✅ 能接受"可能撤单"的情况
**核心特点**
- `SMART_ENTRY_ENABLED: false` - 纯限价单,不追价
- `MIN_SIGNAL_STRENGTH: 8` - 高质量信号配合信号强度分级8分用50%仓位)
- `SCAN_INTERVAL: 1800` - 30分钟扫描低频波段
- `ATR_TAKE_PROFIT_MULTIPLIER: 1.5` - 已优化为1.5:1盈亏比
- `MAX_POSITION_PERCENT: 2.0%` - 配合固定风险百分比,每笔风险恒定
**优势**
- ✅ 与最新优化最匹配(固定风险百分比、信号强度分级)
- ✅ 避免高频追价导致的损失
- ✅ 高质量信号,胜率更高
- ✅ 配合大盘共振过滤,减少大盘暴跌时的损失
**注意事项**
- ⚠️ 可能因为限价单未成交而撤单(这是正常的,避免追价损失)
- ⚠️ 交易频率较低,需要耐心
---
### ⭐⭐ **次选精选低频strict**
**适用场景**
- ✅ 追求最高胜率
- ✅ 只做趋势行情
- ✅ 能接受更少的交易次数
**核心特点**
- `AUTO_TRADE_ONLY_TRENDING: true` - 仅趋势行情自动交易
- `AUTO_TRADE_ALLOW_4H_NEUTRAL: false` - 4H中性不自动下单
- `MIN_SIGNAL_STRENGTH: 8` - 高质量信号
- `SMART_ENTRY_ENABLED: false` - 纯限价单
- `LIMIT_ORDER_OFFSET_PCT: 0.1` - 限价偏移较小,更容易成交
**优势**
- ✅ 胜率最高(只做趋势行情)
- ✅ 避免震荡市亏损
- ✅ 配合大盘共振过滤,效果更好
**注意事项**
- ⚠️ 交易次数最少
- ⚠️ 如果市场长期震荡,可能很久不出单
---
### ⭐ **备选成交优先fill**
**适用场景**
- ✅ 发现"波段回归"方案撤单太多
- ✅ 想要更多成交,但不想回到高频追价
- ✅ 能接受有限的追价(有上限保护)
**核心特点**
- `SMART_ENTRY_ENABLED: true` - 智能入场,有限追价
- `ENTRY_CHASE_MAX_STEPS: 2` - 最多追价2步严格限制
- `ENTRY_MAX_DRIFT_PCT_TRENDING: 0.3` - 追价上限30%(有保护)
- `MIN_SIGNAL_STRENGTH: 7` - 信号门槛略低
- `AUTO_TRADE_ONLY_TRENDING: false` - 解锁自动交易过滤
**优势**
- ✅ 成交率更高,减少撤单
- ✅ 追价有严格限制,不会回到高频追价
- ✅ 配合固定风险百分比,风险可控
**注意事项**
- ⚠️ 追价可能增加成本(但有限制)
- ⚠️ 信号门槛略低,需要配合信号强度分级使用
---
## ⚠️ 不推荐(除非特殊需求)
### 稳定出单steady
- **问题**`MIN_SIGNAL_STRENGTH: 6` 太低,信号质量差
- **问题**`SCAN_INTERVAL: 900` 15分钟扫描频率较高
- **建议**:除非你发现其他方案完全不出单,否则不推荐
### 传统方案conservative/balanced/aggressive
- **问题**:这些方案没有应用最新的优化(固定风险百分比、信号强度分级等)
- **问题**`ATR_TAKE_PROFIT_MULTIPLIER` 可能还是旧值
- **建议**:仅用于对比测试,不建议长期使用
---
## 🎯 选择决策树
```
开始
├─ 是否刚完成优化,想验证效果?
│ └─ 是 → 选择「波段回归swing
├─ 是否追求最高胜率,能接受很少交易?
│ └─ 是 → 选择「精选低频strict
├─ 是否发现「波段回归」撤单太多?
│ └─ 是 → 选择「成交优先fill
└─ 其他情况 → 选择「波段回归swing
```
---
## 📋 方案对比表
| 方案 | 信号门槛 | 入场机制 | 交易频率 | 胜率倾向 | 推荐度 |
|------|---------|---------|---------|---------|--------|
| **波段回归swing** | 8分 | 纯限价 | 低频 | 高 | ⭐⭐⭐ |
| **精选低频strict** | 8分 | 纯限价 | 最低 | 最高 | ⭐⭐ |
| **成交优先fill** | 7分 | 智能入场(有限) | 中频 | 中高 | ⭐ |
| **稳定出单steady** | 6分 | 智能入场 | 中高频 | 中 | ⚠️ |
| **传统方案** | 3-5分 | 混合 | 高频 | 低 | ❌ |
---
## 💡 最终建议
### 第一步先用「波段回归swing
**理由**
1. ✅ 与最新优化最匹配(固定风险百分比、信号强度分级、大盘共振)
2. ✅ 高质量信号8分配合信号强度分级8分用50%仓位
3. ✅ 纯限价单,避免追价损失
4. ✅ 已优化为1.5:1盈亏比更容易止盈
**观察期**运行20-30单观察
- 胜率是否提升
- 是否出现30%以上的大额亏损(应该不会,因为有固定风险百分比)
- 撤单率是否过高
### 第二步:根据观察结果调整
**如果撤单太多**
- 切换到「成交优先fill
- 或手动调整 `LIMIT_ORDER_OFFSET_PCT` 从 0.5% 降到 0.1%
**如果交易太少**
- 切换到「精选低频strict
- 或手动调整 `AUTO_TRADE_ONLY_TRENDING: false`
**如果胜率不够**
- 保持「波段回归swing
- 或切换到「精选低频strict
---
## 🔧 配合最新优化的配置
无论选择哪个方案,以下配置已自动应用(在 `config.py` 中):
- ✅ `BETA_FILTER_ENABLED: True` - 大盘共振过滤
- ✅ `MIN_VOLUME_24H_STRICT: 10000000` - 成交量验证1000万美金
- ✅ `USE_FIXED_RISK_SIZING: True` - 固定风险百分比2%
- ✅ `SIGNAL_STRENGTH_POSITION_MULTIPLIER: {8: 0.5, 9: 1.0, 10: 1.0}` - 信号强度分级
- ✅ `MAX_LEVERAGE_SMALL_CAP: 5` - 小众币杠杆限制
这些优化会在所有方案中生效,进一步提升系统表现。
---
## 📊 预期效果
使用「波段回归swing」+ 最新优化,预期:
- ✅ **胜率**:提升(高质量信号 + 大盘共振过滤)
- ✅ **单笔亏损**控制在2%(固定风险百分比)
- ✅ **大额亏损**避免30%以上的亏损(固定风险百分比 + 阶梯杠杆)
- ✅ **滑点损失**减少2-3%(成交量验证)
- ✅ **大盘暴跌损失**:减少(大盘共振过滤)
---
## 🎯 总结
**推荐顺序**
1. **首选**波段回归swing
2. **次选**精选低频strict
3. **备选**成交优先fill
**不推荐**:稳定出单、传统方案
**建议**先用「波段回归swing」跑20-30单根据实际效果再调整。

View File

@ -0,0 +1,75 @@
# 推荐服务 API Key 修复说明
## 问题描述
推荐服务(`recommendations_main.py`)仍然在使用真实的 API key导致可能使用错误的账户如 account_id=2进行下单。
## 根本原因
1. **推荐服务不应该使用任何账户的 API key**:推荐服务只需要获取公开行情数据,不需要认证。
2. **`config.py` 在导入时会读取 `ATS_ACCOUNT_ID`**:如果推荐服务的 supervisor 配置中设置了 `ATS_ACCOUNT_ID=2`,那么 `config.py` 会读取 account_id=2 的 API key。
3. **`BinanceClient.__init__` 可能被覆盖**:即使传入空字符串,如果 `config._config_manager` 存在,可能会在某个地方被覆盖。
## 修复方案
### 1. 修复 `BinanceClient.__init__` 逻辑
确保传入空字符串时不会被 config 覆盖:
```python
# 如果传入的是空字符串,保持为空字符串(不覆盖)
# 这样推荐服务可以使用空字符串来明确表示"只使用公开接口"
```
### 2. 修复 `connect` 方法
当 API key 为空时,跳过权限验证:
```python
# 验证API密钥权限仅当提供了有效的 API key 时)
if self.api_key and self.api_secret:
await self._verify_api_permissions()
else:
logger.info("✓ 使用公开 API跳过权限验证只能获取行情数据")
```
### 3. 在推荐服务中添加验证
`recommendations_main.py` 中添加验证逻辑,确保 API key 确实是空的:
```python
# 验证:确保 API key 确实是空的
if client.api_key:
logger.error(f"❌ 推荐服务 API Key 非空!当前值: {client.api_key[:4]}...")
logger.error(" 这可能导致推荐服务使用错误的账户密钥,请检查 BinanceClient.__init__ 逻辑")
else:
logger.info("✓ 推荐服务 API Key 确认为空,将只使用公开接口")
```
## 检查清单
1. ✅ 确保 `recommendations_main.py` 传入空字符串:`BinanceClient(api_key="", api_secret="")`
2. ✅ 确保 `BinanceClient.__init__` 不会覆盖空字符串
3. ✅ 确保 `connect` 方法在 API key 为空时跳过权限验证
4. ✅ 在推荐服务中添加验证逻辑,确保 API key 确实是空的
## 验证方法
1. 查看推荐服务的日志,确认显示:
- `✓ 推荐服务 API Key 确认为空,将只使用公开接口`
- `✓ 使用公开 API跳过权限验证只能获取行情数据`
2. 如果看到以下日志,说明仍有问题:
- `❌ 推荐服务 API Key 非空!`
- `初始化币安客户端: gqtx...sYmj, l3IB...I6NA`(显示真实的 API key
## 注意事项
1. **推荐服务不应该设置 `ATS_ACCOUNT_ID`**:推荐服务的 supervisor 配置不应该设置 `ATS_ACCOUNT_ID`,或者应该明确设置为空。
2. **推荐服务不应该下单**:推荐服务只生成推荐,不应该进行任何下单操作。
3. **如果推荐服务仍然使用真实的 API key**:检查 supervisor 配置,确保推荐服务进程没有设置 `ATS_ACCOUNT_ID`
## 后续优化
1. 考虑在 `config.py` 中添加一个标志,区分推荐服务和交易服务。
2. 考虑在推荐服务启动时,明确清除 `ATS_ACCOUNT_ID` 环境变量。

View File

@ -0,0 +1,128 @@
# 止损立即平仓修复说明
## 🔍 问题描述
**时间范围**23点后到早上
**症状**:系统检测到价格已触发止损价,但只记录错误日志,**没有执行平仓操作**,导致亏损持续扩大。
### 错误日志示例
```
NOMUSDT ⚠️ 当前价格(0.00944000)已触发止损价(0.00977746),无法挂止损单,应该立即平仓!
ZROUSDT ⚠️ 当前价格(2.02533560)已触发止损价(2.02531200),无法挂止损单,应该立即平仓!
WCTUSDT ⚠️ 当前价格(0.08786000)已触发止损价(0.08963080),无法挂止损单,应该立即平仓!
```
## 🎯 根本原因
`trading_system/position_manager.py``_ensure_exchange_sltp_orders()` 方法中:
1. **挂单逻辑死锁**:当 `current_price` 已经低于 `stop_loss_price`(做多时),币安 API 会拒绝 `STOP_MARKET` 订单,返回 `Order would immediately trigger`(错误代码 -2021
2. **只报警不执行**:代码检测到了这个情况并打印了警告日志,但**只设置了 `sl_order = None`,没有触发市价平仓**。
3. **依赖WebSocket延迟**:代码注释说"依赖WebSocket监控立即平仓"但WebSocket监控可能有延迟在深夜价格剧烈波动时无法及时止损。
## ✅ 修复方案
### 修复位置
`trading_system/position_manager.py``_ensure_exchange_sltp_orders()` 方法
### 修复内容
#### 1. 止损价触发时立即平仓第1199-1223行
**修复前**
```python
if current_price_val <= stop_loss_val:
logger.error(f"{symbol} ⚠️ 当前价格(...)已触发止损价(...),无法挂止损单,应该立即平仓!")
logger.error(f" 建议: 立即手动平仓或等待WebSocket监控触发平仓")
sl_order = None # ❌ 只设置None没有执行平仓
```
**修复后**
```python
if current_price_val <= stop_loss_val:
logger.error(f"{symbol} ⚠️ 当前价格({current_price_val:.8f})已触发止损价({stop_loss_val:.8f}),无法挂止损单,立即执行市价平仓保护!")
logger.error(f" 入场价: {entry_price_val:.8f if entry_price_val else 'N/A'}")
# ✅ 立即执行市价平仓
await self.close_position(symbol, reason='stop_loss')
return # 直接返回,不再尝试挂单
```
#### 2. 止盈价触发时立即平仓第1272-1288行
**新增逻辑**:在挂止盈单前,也检查价格是否已经达到止盈价,如果达到则立即执行市价平仓。
```python
# 在挂止盈单前,检查当前价格是否已经触发止盈
if current_price and take_profit:
try:
current_price_val = float(current_price)
take_profit_val = float(take_profit)
# 检查是否已经触发止盈
triggered_tp = False
if side == "BUY" and current_price_val >= take_profit_val:
triggered_tp = True
elif side == "SELL" and current_price_val <= take_profit_val:
triggered_tp = True
if triggered_tp:
logger.info(f"{symbol} 🎯 当前价格({current_price_val:.8f})已达到止盈价({take_profit_val:.8f}),立即执行市价止盈!")
await self.close_position(symbol, reason='take_profit')
return
except Exception as e:
logger.debug(f"{symbol} 检查止盈触发条件时出错: {e}")
```
## 📊 修复效果
### 修复前
- ❌ 检测到止损触发 → 只记录错误日志 → 等待WebSocket监控 → **可能延迟或失败**
- ❌ 价格继续下跌 → 亏损扩大 → 直到下次扫描才可能止损
### 修复后
- ✅ 检测到止损触发 → **立即执行市价平仓** → 止损保护立即生效
- ✅ 价格继续下跌 → **已平仓,不再亏损**
## 🔄 触发场景
这个修复会在以下场景生效:
1. **开仓后立即检查**:在 `_ensure_exchange_sltp_orders()` 被调用时(开仓后立即执行)
2. **系统重启后同步**:如果系统重启,同步持仓时会调用 `_ensure_exchange_sltp_orders()` 补挂保护单
3. **定期检查**`check_stop_loss_take_profit()` 方法会定期检查(通过扫描间隔)
## ⚠️ 注意事项
1. **市价平仓**:修复使用 `close_position()` 方法执行市价平仓,可能会有轻微滑点,但能确保及时止损。
2. **扫描间隔影响**如果扫描间隔较长如1小时在间隔期间价格暴跌穿透止损线等到下次扫描时`_ensure_exchange_sltp_orders()` 会被调用(例如系统重启后),此时会立即平仓。
3. **WebSocket监控**WebSocket监控仍然有效作为第二层保护。但修复后即使WebSocket延迟也能通过价格检查立即平仓。
## 🚀 部署建议
1. **重启交易进程**:修复后需要重启所有 `trading_system` 进程才能生效。
```bash
supervisorctl restart auto_sys_acc1 auto_sys_acc2 auto_sys_acc3 ...
```
2. **验证修复**:查看日志,确认当价格触发止损时,会看到:
```
{symbol} ⚠️ 当前价格(...)已触发止损价(...),无法挂止损单,立即执行市价平仓保护!
{symbol} [平仓] 开始平仓操作 (原因: stop_loss)
{symbol} [平仓] ✓ 平仓订单已提交
```
3. **监控效果**:观察后续交易,确认深夜价格波动时能及时止损,不再出现"只报警不平仓"的情况。
## 📝 相关文件
- `trading_system/position_manager.py`:主要修复文件
- `_ensure_exchange_sltp_orders()` 方法第1101-1320行
- `close_position()` 方法第669-769行
## ✅ 修复完成时间
2026-01-25

View File

@ -0,0 +1,246 @@
# 止损单挂单失败分析
## 📋 问题描述
INUSDT 止损单挂单失败系统将依赖WebSocket监控但可能无法及时止损。
**错误信息**
```
INUSDT ❌ 止损单挂单失败将依赖WebSocket监控但可能无法及时止损
```
---
## ⚠️ 风险
**止损单挂单失败的风险**
1. **没有交易所级别保护**:如果系统崩溃或网络中断,可能无法及时止损
2. **依赖WebSocket监控**如果WebSocket断开可能无法及时止损
3. **用户无法在币安界面看到止损单**:无法手动确认止损单是否已设置
---
## 🔍 可能的原因
### 1. 止损价格计算错误
**问题**
- 止损价格可能不在正确的一侧
- BUY时止损价应低于入场价SELL时止损价应高于入场价
- 如果止损价计算错误,币安会拒绝挂单
**检查**
- 查看日志中的止损价格和入场价格
- 确认止损价格方向是否正确
### 2. 价格精度问题
**问题**
- 止损价格可能不符合币安的精度要求tickSize
- 错误代码:-4014Price not increased by tick size
**检查**
- 查看日志中的价格精度信息
- 确认止损价格是否对齐到 tickSize
### 3. 持仓不存在或方向不对
**问题**
- 可能没有持仓或持仓方向不匹配
- 错误代码:-2022ReduceOnly Order is rejected
**检查**
- 确认币安账户中是否有持仓
- 确认持仓方向是否匹配
### 4. 对冲/单向模式问题
**问题**
- 币安账户可能是对冲模式,但代码按单向模式处理(或反之)
- 需要正确设置 `positionSide` 参数
**检查**
- 查看日志中的对冲模式信息
- 确认 `positionSide` 参数是否正确
### 5. 触发价格会导致立即触发
**问题**
- 止损价格太接近当前价格,会导致立即触发
- 币安会拒绝这种订单
**检查**
- 查看日志中的当前价格和止损价格
- 确认止损价格是否在正确的一侧
---
## ✅ 已完成的改进
### 1. 增强错误日志
**改进内容**
- 添加详细的错误信息(错误代码、错误消息)
- 记录止损价格、当前价格、持仓方向等关键信息
- 针对常见错误码提供具体的解决建议
**代码位置**
- `trading_system/binance_client.py:1535-1580`
- `trading_system/position_manager.py:1154-1155`
### 2. 添加止损价格验证
**改进内容**
- 在挂单前验证止损价格方向是否正确
- BUY时止损价应低于入场价SELL时止损价应高于入场价
- 如果验证失败,记录错误并跳过挂单
**代码位置**
- `trading_system/position_manager.py:1136-1148`
### 3. 改进重试逻辑
**改进内容**
- 如果首次挂单失败,尝试切换 `positionSide` 重试
- 记录重试过程和结果
- 如果所有重试都失败,记录详细参数用于调试
**代码位置**
- `trading_system/binance_client.py:1526-1549`
### 4. 自动获取当前价格
**改进内容**
- 如果未提供当前价格,自动从币安获取
- 确保止损价格验证和调整使用最新的价格
**代码位置**
- `trading_system/position_manager.py:1150-1155`
---
## 🔧 故障排查步骤
### 步骤1查看详细错误日志
检查交易日志,查找以下信息:
```
INUSDT ❌ 挂保护单失败(STOP_MARKET): ...
错误代码: ...
触发价格: ...
当前价格: ...
持仓方向: ...
平仓方向: ...
价格精度: ..., 价格步长: ...
```
### 步骤2检查止损价格计算
确认止损价格是否正确:
- **BUY订单**:止损价应 < 入场价
- **SELL订单**:止损价应 > 入场价
如果止损价格方向错误,检查:
1. `risk_manager.get_stop_loss_price()` 的计算逻辑
2. ATR 值是否正确
3. `ATR_STOP_LOSS_MULTIPLIER` 配置是否正确
### 步骤3检查持仓状态
确认币安账户中是否有持仓:
- 登录币安,查看是否有 INUSDT 的持仓
- 确认持仓方向LONG/SHORT是否匹配
### 步骤4检查价格精度
确认止损价格是否符合精度要求:
- 查看日志中的 `价格精度``价格步长`
- 确认止损价格是否对齐到 tickSize
### 步骤5检查对冲模式
确认币安账户的持仓模式:
- 查看日志中的 `对冲模式` 信息
- 确认 `positionSide` 参数是否正确
---
## 💡 解决方案
### 方案1修复止损价格计算如果计算错误
**如果止损价格方向错误**
1. 检查 `risk_manager.get_stop_loss_price()` 方法
2. 确认 ATR 计算是否正确
3. 确认 `ATR_STOP_LOSS_MULTIPLIER` 配置是否正确
### 方案2调整价格精度如果精度问题
**如果价格精度错误**
1. 检查 `_format_price_str_with_rounding()` 方法
2. 确认价格格式化是否正确
3. 确保止损价格对齐到 tickSize
### 方案3手动设置止损临时方案
**如果自动挂单失败**
1. 登录币安,手动设置止损单
2. 确保止损价格在正确的一侧
3. 等待系统修复后,再使用自动挂单
### 方案4检查持仓模式如果模式问题
**如果对冲模式问题**
1. 确认币安账户的持仓模式(对冲/单向)
2. 检查代码中的 `dual` 变量是否正确
3. 确保 `positionSide` 参数正确设置
---
## 📊 预期改善
改进后预期:
1. **详细的错误日志**:能够快速定位问题原因
2. **价格验证**:在挂单前验证止损价格,避免无效请求
3. **自动重试**:尝试切换 `positionSide` 重试,提高成功率
4. **更好的诊断**:记录所有关键参数,便于调试
---
## ⚠️ 重要提醒
**止损单挂单失败是严重问题**,因为:
1. 没有交易所级别保护,系统崩溃时可能无法止损
2. 依赖WebSocket监控网络中断时可能无法止损
3. 用户无法在币安界面看到止损单
**必须尽快修复**,否则可能导致大额亏损。
---
## 🔍 需要检查的信息
1. **交易日志**
- 止损单挂单失败的详细错误信息
- 错误代码和错误消息
- 止损价格、当前价格、持仓方向
2. **币安账户**
- 是否有 INUSDT 的持仓
- 持仓方向LONG/SHORT
- 持仓模式(对冲/单向)
3. **配置**
- `ATR_STOP_LOSS_MULTIPLIER` 的值
- `EXCHANGE_SLTP_ENABLED` 的值
- 止损价格计算逻辑
---
## 📝 下一步行动
1. **查看详细日志**:检查最新的错误日志,确认具体失败原因
2. **验证止损价格**:确认止损价格计算是否正确
3. **检查持仓状态**:确认币安账户中是否有持仓
4. **修复问题**:根据错误信息修复相应的问题
5. **测试验证**:修复后测试止损单挂单是否成功

View File

@ -0,0 +1,219 @@
# Supervisor 交易进程启动问题排查指南
## 🔍 问题1UnicodeDecodeError编码错误
### 错误信息
```
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb0 in position 0: invalid start byte
AttributeError: type object 'Faults' has no attribute 'utf-8'
```
### 原因
Supervisor 的 XML-RPC 接口在读取日志时如果日志文件包含非UTF-8字符如中文会报编码错误。
### ✅ 已修复
- `backend/api/supervisor_account.py``tail_supervisor()` 函数已修复
- 如果 `supervisorctl tail` 遇到编码错误,会自动回退到直接读取日志文件
- `_tail_text_file()` 函数已增强支持多种编码UTF-8、GBK、GB2312等
### 验证
重新启动交易进程,编码错误应该不再出现。
---
## 🔍 问题2进程启动失败exit status 1
### 错误信息
```
2026-01-22 15:32:35,250 INFO spawned: 'auto_sys_acc4' with pid 2855641
2026-01-22 15:32:35,574 INFO success: auto_sys_acc4 entered RUNNING state
2026-01-22 15:32:36,074 INFO exited: auto_sys_acc4 (exit status 1; not expected)
```
### 排查步骤
#### 1. 查看进程错误日志
**方法A通过前端查看**
- 进入账号配置页面
- 查看"我的交易进程"部分
- 点击"查看最近错误日志stderr"
**方法B直接查看日志文件**
```bash
# 找到日志文件路径(通常在项目根目录的 logs 目录)
cd /www/wwwroot/autosys_new # 替换为你的项目路径
tail -n 200 logs/trading_4.err.log # 替换 4 为你的 account_id
```
**方法C查看 Supervisor 主日志**
```bash
# 宝塔面板常见路径
tail -n 200 /www/server/panel/plugin/supervisor/log/supervisord.log
```
#### 2. 常见原因及解决方案
##### 原因1Python 路径不可执行或依赖缺失
**症状**
```
ModuleNotFoundError: No module named 'binance_client'
/bin/python: No such file or directory
```
**解决方案**
1. 检查 Python 路径是否正确:
```bash
# 检查 supervisor 配置文件中的 python 路径
cat /www/server/panel/plugin/supervisor/profile/auto_sys_acc4.ini
# 或
cat /www/wwwroot/supervisor_gen/auto_sys_acc4.ini
```
2. 确保使用正确的 Python 环境:
```bash
# 设置环境变量(在 supervisor 配置中)
TRADING_PYTHON_BIN=/www/wwwroot/autosys_new/trading_system/.venv/bin/python
```
3. 检查依赖是否安装:
```bash
# 进入 trading_system 的虚拟环境
source /www/wwwroot/autosys_new/trading_system/.venv/bin/activate
pip list | grep binance
```
##### 原因2API 密钥未配置
**症状**
```
ERROR - 无法获取账户余额可能是API权限问题
ERROR - API密钥未配置
```
**解决方案**
1. 在账号配置页面设置 API Key 和 Secret
2. 确保 API Key 有"合约交易"权限
3. 检查 IP 白名单设置(如果设置了)
##### 原因3工作目录不存在
**症状**
```
FileNotFoundError: [Errno 2] No such file or directory
```
**解决方案**
1. 检查 supervisor 配置中的 `directory` 路径是否存在
2. 确保项目根目录路径正确
##### 原因4权限问题
**症状**
```
Permission denied
```
**解决方案**
1. 检查日志目录权限:
```bash
chmod 755 /www/wwwroot/autosys_new/logs
```
2. 检查 supervisor 运行用户:
```bash
# 在 supervisor 配置中设置
user=www # 替换为实际运行用户
```
##### 原因5配置管理器初始化失败
**症状**
```
ERROR - 配置管理器初始化失败
```
**解决方案**
1. 检查数据库连接
2. 检查 Redis 连接(如果使用)
3. 检查环境变量配置
#### 3. 手动测试启动
如果自动启动失败,可以手动测试:
```bash
# 1. 进入项目根目录
cd /www/wwwroot/autosys_new
# 2. 设置环境变量
export ATS_ACCOUNT_ID=4 # 替换为你的 account_id
export PYTHONPATH=/www/wwwroot/autosys_new
# 3. 使用正确的 Python 环境启动
/www/wwwroot/autosys_new/trading_system/.venv/bin/python -m trading_system.main
# 4. 查看错误信息
```
---
## 🔧 修复后的改进
### 1. 编码错误修复
- ✅ `tail_supervisor()` 函数现在会自动回退到直接读取文件
- ✅ `_tail_text_file()` 支持多种编码UTF-8、GBK、GB2312等
### 2. 错误诊断增强
- ✅ 启动失败时会自动读取多种日志源:
- Supervisor stderr 日志
- Supervisor stdout 日志
- 直接读取日志文件
- Supervisor 主日志
### 3. 日志编码统一
- ✅ 所有日志文件使用 UTF-8 编码
- ✅ 读取时支持多种编码回退
---
## 📋 快速检查清单
当进程启动失败时,按以下顺序检查:
1. ✅ **查看错误日志**`logs/trading_{account_id}.err.log`
2. ✅ **检查 Python 路径**supervisor 配置中的 `command` 路径是否正确
3. ✅ **检查依赖**`pip list | grep binance` 确认依赖已安装
4. ✅ **检查 API 密钥**:账号配置页面是否已设置
5. ✅ **检查权限**:日志目录和项目目录是否有读写权限
6. ✅ **检查环境变量**`ATS_ACCOUNT_ID` 是否正确设置
7. ✅ **手动测试**:使用命令行手动启动,查看详细错误
---
## 🆘 如果问题仍然存在
1. **收集信息**
- 错误日志stderr
- Supervisor 配置(.ini 文件)
- 手动启动的输出
2. **检查系统日志**
```bash
# 查看系统日志
journalctl -u supervisord -n 100
```
3. **联系支持**:提供完整的错误信息和日志
---
## 📝 相关文件
- `backend/api/supervisor_account.py` - Supervisor 管理代码
- `backend/api/routes/accounts.py` - 账号管理 API
- `trading_system/main.py` - 交易系统主程序
- `logs/trading_{account_id}.err.log` - 错误日志
- `logs/trading_{account_id}.out.log` - 标准输出日志

View File

@ -0,0 +1,222 @@
# 交易亏损分析报告 - 2026-01-23第二批
## 📊 亏损交易详情
### 交易 #1278 (INUSDT)
- **方向**BUY
- **入场价**0.0937 USDT
- **出场价**0.0914 USDT
- **价格跌幅****2.45%**
- **盈亏**-2.54 USDT
- **盈亏比例****-37.00%**相对于保证金6.87 USDT
- **持仓时间**10分钟16:03 - 16:13
- **平仓类型**:手动平仓 ❌
### 交易 #1275 (INUSDT)
- **方向**BUY
- **入场价**0.0970 USDT
- **出场价**0.0952 USDT
- **价格跌幅****1.86%**
- **盈亏**-1.97 USDT
- **盈亏比例****-28.60%**相对于保证金6.90 USDT
- **持仓时间**10分钟15:33 - 15:43
- **平仓类型**:手动平仓 ❌
---
## ⚠️ 核心问题分析
### 问题1手动平仓误判最严重
**现象**
- 两笔交易都被标记为"手动平仓"
- 但亏损比例极高(-37%和-28.6%),明显是止损触发
- 持仓时间只有10分钟符合止损触发的特征
**根本原因**
1. **币安保护单触发机制**
- 币安的保护单STOP/TAKE_PROFIT触发后会生成一个 MARKET 订单
- 这个 MARKET 订单的 `reduceOnly` 字段可能为 `false`币安API的bug或特殊情况
- 导致系统误判为手动平仓
2. **价格匹配逻辑失效**
- 代码使用 `_close_to(ep, sl, max_pct=0.05)` 判断平仓价格是否接近止损价
- 但这两笔交易的平仓价格可能离止损价较远超过5%),导致无法匹配
- 如果止损价设置错误或滑点太大,价格匹配会失败
**代码位置**`trading_system/position_manager.py:1918-1967`
---
### 问题2止损距离可能太紧
**分析**
- 交易 #1278:价格只跌了 2.45%,但亏损比例达到 -37%
- 交易 #1275:价格只跌了 1.86%,但亏损比例达到 -28.6%
**可能原因**
1. **ATR 太小**
- 如果 ATR 只有 0.5-1%,即使使用 2.5 倍 ATR止损距离也只有 1.25-2.5%
- 对于波动较大的币种,这个止损距离太紧了
2. **固定风险百分比未生效**
- 如果固定风险2%生效每笔亏损应该限制在总资金的2%左右
- 但实际亏损比例(相对于保证金)达到 28-37%,说明固定风险可能没有生效
3. **仓位过大**
- 如果固定风险计算失败,回退到传统方法(基于 MAX_POSITION_PERCENT
- 可能导致仓位过大,止损距离相对较小
---
### 问题3价格匹配容忍度可能不够
**当前逻辑**
```python
def _close_to(a: float, b: float, max_pct: float = 0.05) -> bool:
return abs((a - b) / b) <= max_pct # 5%容忍度
```
**问题**
- 如果止损价是 0.0900,平仓价是 0.0914,差距是 1.56%
- 但如果止损价计算错误(比如是 0.0920),平仓价 0.0914 与止损价 0.0920 的差距是 0.65%
- 在极端行情下滑点可能超过5%,导致价格匹配失败
---
## 💡 解决方案
### 方案1改进手动平仓识别逻辑最高优先级
**问题**:当前逻辑依赖 `reduceOnly` 字段但币安API可能不准确。
**解决方案**
1. **优先使用价格匹配**:如果平仓价格接近止损/止盈价5%范围内),直接标记为对应类型
2. **检查持仓时间**:如果持仓时间很短(< 30分钟且亏损更可能是止损触发
3. **检查亏损比例**:如果亏损比例超过止损目标(如 -10%),更可能是止损触发
4. **检查订单来源**:如果是系统自动下单,不应该标记为手动平仓
**代码修改**
```python
# 在 sync_positions_with_binance 中
# 1. 优先检查价格匹配(已实现,但需要提高优先级)
# 2. 如果价格不匹配,但满足以下条件,也标记为止损:
# - 持仓时间 < 30分钟
# - 亏损比例 > 止损目标
# - 是系统自动下单(有 trade_id
```
---
### 方案2放宽止损距离提高 ATR 倍数)
**当前配置**
- `ATR_STOP_LOSS_MULTIPLIER = 2.5`
**建议调整**
- 提高到 **3.0-3.5**,给波动留出更多空间
- 或者根据币种波动率动态调整
**风险**
- 止损距离放宽后,单笔亏损会增加
- 但如果固定风险2%生效,总亏损仍然可控
---
### 方案3增强价格匹配逻辑
**当前问题**
- 5%的容忍度可能不够(极端滑点)
- 只检查平仓价与止损价,没有检查实际亏损比例
**改进方案**
1. **提高容忍度**从5%提高到8-10%
2. **检查亏损比例**:如果实际亏损比例接近止损目标(如 -8% vs -10%),也标记为止损
3. **检查价格方向**如果平仓价在止损价的方向上BUY时平仓价 < 止损价更可能是止损触发
---
### 方案4确保固定风险百分比生效
**检查点**
1. 确认 `USE_FIXED_RISK_SIZING = true`
2. 确认 `FIXED_RISK_PERCENT = 0.02`2%
3. 检查交易日志,确认是否显示"使用固定风险百分比计算仓位"
4. 如果固定风险计算失败需要修复bug
---
## 🎯 立即行动
### 1. 修复手动平仓识别逻辑(紧急)
**修改文件**`trading_system/position_manager.py`
**修改位置**`sync_positions_with_binance` 方法中的 `exit_reason` 判断逻辑
**修改内容**
1. 提高价格匹配的优先级
2. 增加持仓时间和亏损比例的检查
3. 如果满足止损特征,即使 `reduceOnly=false`,也标记为止损
---
### 2. 检查并调整止损距离
**检查**
1. 查看这两笔交易的 ATR 值
2. 计算实际止损距离
3. 确认是否使用了 2.5 倍 ATR
**调整**
- 如果 ATR 太小,考虑提高 `ATR_STOP_LOSS_MULTIPLIER` 到 3.0-3.5
- 或者设置最小止损距离(如 3%
---
### 3. 验证固定风险百分比
**检查**
1. 查看交易日志,确认是否使用固定风险计算
2. 如果未使用,检查失败原因
3. 修复bug确保固定风险生效
---
## 📋 预期改善
修复后预期:
1. **准确识别平仓原因**:止损触发不再被误判为手动平仓
2. **止损距离更合理**:减少被随机波动扫损的概率
3. **单笔亏损可控**固定风险2%生效每笔亏损限制在总资金的2%左右
---
## 🔍 需要检查的数据
1. **交易日志**
- 这两笔交易的 ATR 值
- 止损价格
- 是否使用固定风险计算
- 币安订单的 `reduceOnly` 字段
2. **配置快照**
- `ATR_STOP_LOSS_MULTIPLIER` 的实际值
- `USE_FIXED_RISK_SIZING` 的实际值
- `FIXED_RISK_PERCENT` 的实际值
3. **数据库记录**
- 这两笔交易的 `stop_loss_price` 字段
- `atr` 字段
- `exit_reason` 字段
---
## ⚠️ 重要提醒
这两笔交易亏损比例极高(-37%和-28.6%),说明:
1. **止损距离太紧**价格只跌了1.86-2.45%就触发止损
2. **固定风险可能未生效**如果固定风险2%生效,亏损比例不应该这么高
3. **手动平仓误判**:这两笔明显是止损触发,不应该标记为手动平仓
**必须立即修复**,否则系统会继续产生大额亏损。

View File

@ -0,0 +1,250 @@
# 交易亏损分析报告 - 2026-01-23
## 📊 统计数据
- **总交易数**107
- **胜率**33.68% ❌远低于盈亏平衡点50%
- **总盈亏**-4.97 USDT亏损率 8.3%本金60 USDT
- **平均盈亏**-0.05 USDT
- **平均持仓时长**65分钟
- **平仓原因**:止损 23 / 止盈 21 / 移动止损 2 / **同步 49**45.8%
- **平均盈利/平均亏损**1.22:1 ❌远低于期望的3:1
- **总交易量(名义)**1538.25 USDT
---
## ⚠️ 核心问题分析
### 问题1止损距离过紧导致大额亏损
**典型案例**
- **订单 #1246 (MANAUSDT)**
- 入场价0.1815出场价0.1793
- 价格跌幅:**仅 1.21%**
- 但盈亏比例:**-18.18%**(相对于保证金)
- 说明:止损距离太紧,价格稍微波动就触发止损
- **订单 #1245 (IOUSDT)**
- 入场价0.1681出场价0.1661
- 价格跌幅:**仅 1.19%**
- 但盈亏比例:**-17.85%**
**根本原因**
1. **可能使用了旧的ATR止损倍数**0.5或1.8而不是新的2.5
2. **固定风险百分比可能没有生效**,或者被最大仓位限制覆盖
3. **止损距离计算错误**,导致止损价太接近入场价
---
### 问题2固定风险百分比可能没有生效
**理论计算**
- 本金60 USDT
- 固定风险2% = 1.2 USDT
- 如果止损距离 = 2.5倍ATR假设ATR = 0.5%,止损距离 = 1.25%
- 仓位 = 1.2 / (入场价 × 1.25%) = 1.2 / (入场价 × 0.0125)
**实际情况**
- 大部分订单保证金0.9-1.0 USDT约占总资金的1.67%
- 但亏损比例相对于保证金15-31%
- **如果固定风险2%生效每笔亏损应该限制在总资金的2%左右而不是保证金的15-31%**
**可能原因**
1. **固定风险计算失败**回退到传统方法基于MAX_POSITION_PERCENT
2. **止损距离太紧**,导致即使使用固定风险,实际亏损比例仍然很高
3. **最大仓位限制覆盖了固定风险**如果固定风险计算的保证金超过MAX_POSITION_PERCENT会被调整为最大仓位但止损距离不变
---
### 问题3同步平仓过多49笔45.8%
**问题**
- 49笔订单被标记为"同步平仓",说明系统无法正确识别平仓原因
- 可能原因:
1. **滑点太大**超过了5%的容忍度
2. **币安订单历史获取不完整**
3. **WebSocket断线**,导致没有及时监控
**影响**
- 无法准确分析哪些是止损、哪些是止盈
- 无法优化策略参数
---
### 问题4胜率太低33.68%
**数学分析**
- 当前胜率33.68%
- 当前盈亏比1.22:1
- 盈亏平衡点 = 1 / (1 + 1.22) = **45.05%**
- **当前胜率低于盈亏平衡点,必然亏损**
**原因**
1. **止损距离太紧**,导致频繁被扫损
2. **入场信号质量不够**,或者市场环境不适合交易
3. **止盈目标可能设置太高**,导致大部分订单无法止盈
---
## 🔍 具体案例分析
### 案例1订单 #1246 (MANAUSDT)
```
入场价0.1815
出场价0.1793
价格跌幅1.21%
盈亏:-0.1716 USDT
盈亏比例:-18.18%相对于保证金0.9438 USDT
```
**分析**
- 如果使用固定风险2%本金60 USDT风险金额 = 1.2 USDT
- 如果止损距离 = 1.21%,那么仓位 = 1.2 / (0.1815 × 0.0121) = 546.5
- 实际数量78保证金0.9438 USDT
- **说明:可能使用了传统方法计算仓位,而不是固定风险**
### 案例2订单 #1245 (IOUSDT)
```
入场价0.1681
出场价0.1661
价格跌幅1.19%
盈亏:-0.1726 USDT
盈亏比例:-17.85%相对于保证金0.967 USDT
```
**分析**
- 价格只跌了1.19%就触发止损
- 如果使用2.5倍ATR止损ATR应该约为 1.19% / 2.5 = **0.48%**
- **但实际止损距离只有1.19%说明可能使用了更小的ATR倍数如0.5倍或1.8倍)**
---
## 💡 解决方案
### 方案1确认并应用新的策略配置最高优先级
**立即行动**
1. **在前端"全局配置"页面,重新应用"波段回归"方案**
- 确保 `ATR_STOP_LOSS_MULTIPLIER = 2.5`
- 确保 `USE_DYNAMIC_ATR_MULTIPLIER = false`
- 确保 `USE_FIXED_RISK_SIZING = true`
- 确保 `FIXED_RISK_PERCENT = 0.02`
2. **重启交易服务**,使新配置生效
3. **验证配置**
- 查看交易日志,确认是否显示"使用固定风险百分比计算仓位"
- 确认止损距离是否基于2.5倍ATR
---
### 方案2优化固定风险计算的逻辑
**问题**如果固定风险计算的保证金超过MAX_POSITION_PERCENT系统会调整为最大仓位但止损距离不变导致实际风险超过2%。
**建议**
- 当固定风险计算的保证金超过最大仓位时,应该**同时调整止损距离**确保实际风险仍然是2%
- 或者:**降低MAX_POSITION_PERCENT**,让固定风险计算有更多空间
---
### 方案3降低交易频率提高信号质量
**当前问题**
- 107笔交易平均持仓65分钟
- 胜率只有33.68%
**建议**
1. **提高信号强度门槛**`MIN_SIGNAL_STRENGTH` 从8提高到9
2. **增加扫描间隔**`SCAN_INTERVAL` 从1800秒30分钟增加到3600秒1小时
3. **减少TOP_N_SYMBOLS**从8减少到5只交易最优质的信号
---
### 方案4优化同步平仓识别逻辑
**问题**49笔同步平仓占比45.8%
**建议**
1. **增加滑点容忍度**从5%增加到8%,以应对极端行情
2. **增强WebSocket监控**:确保及时接收价格更新
3. **优化订单历史获取**:扩大时间范围,确保能获取到所有平仓订单
---
## 📋 预期改善
应用新的策略配置ATR_STOP_LOSS_MULTIPLIER = 2.5)后,预期:
1. **止损距离放宽**
- 从1.2%增加到约3%假设ATR = 1.2%
- 减少被随机波动扫损的概率
2. **胜率提升**
- 从33.68%提升到**50-60%**以上
- 因为止损距离放宽,给波动留出更多空间
3. **单笔亏损降低**
- 如果固定风险2%生效每笔亏损限制在总资金的2%左右
- 而不是保证金的15-31%
4. **盈亏比改善**
- 从1.22:1提升到**1.5:1以上**
- 配合止盈倍数1.5,更容易达成目标
---
## 🎯 立即行动清单
### 高优先级(立即执行)
1. ✅ **重新应用策略配置**
- 在"全局配置"页面,点击"应用"波段回归方案
- 确认 `ATR_STOP_LOSS_MULTIPLIER = 2.5`
- 确认 `USE_DYNAMIC_ATR_MULTIPLIER = false`
2. ✅ **重启交易服务**
- 使新配置立即生效
3. ✅ **验证配置**
- 查看交易日志,确认使用固定风险计算
- 确认止损距离基于2.5倍ATR
### 中优先级(本周执行)
4. ⏳ **提高信号质量门槛**
- `MIN_SIGNAL_STRENGTH`: 8 → 9
- 减少交易频率,提高胜率
5. ⏳ **优化固定风险计算逻辑**
- 当超过最大仓位时,同时调整止损距离
---
## 📝 总结
**当前主要问题**
1. ❌ 止损距离太紧可能使用了旧的0.5倍或1.8倍ATR
2. ❌ 固定风险百分比可能没有生效
3. ❌ 胜率太低33.68%
4. ❌ 盈亏比太低1.22:1
5. ❌ 同步平仓太多49笔45.8%
**解决方案**
1. ✅ 应用新的策略配置ATR_STOP_LOSS_MULTIPLIER = 2.5
2. ✅ 确保固定风险百分比生效
3. ✅ 提高信号质量门槛
4. ✅ 优化同步平仓识别逻辑
**预期改善**
- 胜率33.68% → **50-60%**
- 盈亏比1.22:1 → **1.5:1以上**
- 单笔亏损15-31% → **2%左右**(相对于总资金)
---
## ⚠️ 重要提醒
**当前配置可能仍在使用旧参数**ATR_STOP_LOSS_MULTIPLIER = 0.5或1.8),导致止损距离太紧。
**必须在前端重新应用策略方案**确保数据库和Redis中的配置更新为最新值。

View File

@ -0,0 +1,290 @@
# 交易表现分析 - 2026-01-23
## 📊 今日统计
- **总交易数**35
- **胜率**44.00%
- **总盈亏**2.03 USDT
- **平均盈亏**0.08 USDT
- **平均持仓时长**35分钟
- **平仓原因**:止盈 1 / 手动 9 / 同步 15
- **平均盈利/平均亏损**1.35 : 1期望 3:1
- **总交易量(名义)**3512.05 USDT
## ⚠️ 严重问题分析
### 问题1盈亏比严重失衡1.35:1 vs 期望3:1
**现状**
- 平均盈利/平均亏损 = 1.35:1
- 胜率 = 44%
- 期望盈亏比 = 3:1
**数学分析**
- 盈亏平衡点 = 1 / (1 + 盈亏比) = 1 / (1 + 1.35) = **42.55%**
- 当前胜率 44% 仅略高于盈亏平衡点,所以总盈亏只有 2.03 USDT几乎不盈利
- 如果盈亏比达到 3:1盈亏平衡点 = 1 / (1 + 3) = **25%**
- 在胜率 44% 的情况下,盈亏比 3:1 的期望收益 = (0.44 × 3) - (0.56 × 1) = **0.76**每笔亏损赚0.76倍)
**结论**:盈亏比 1.35:1 太低了,必须提升到至少 2:1 才能稳定盈利。
---
### 问题2大额亏损30-50%)说明止损失效
**具体案例**
- #1138 DUSKUSDT: **-31.28%**(同步平仓)
- #1135 RIVERUSDT: **-49.06%**(同步平仓)
- #1133 BDXNUSDT: **-31.69%**(手动平仓)
**问题分析**
1. **固定风险百分比应该限制亏损为2%**但实际亏损达到30-50%
2. **说明止损没有及时执行**,或者止损价格计算错误
3. **"同步平仓"** 可能是在止损触发后,系统同步币安状态时发现已经亏损很大
**可能原因**
1. 止损单没有正确挂到交易所
2. 止损价格计算错误(可能基于价格百分比而不是保证金百分比)
3. WebSocket 监控断线,没有及时触发止损
4. 固定风险百分比计算时,止损距离估算错误
---
### 问题3止盈太少35笔只有1笔止盈
**现状**
- 35笔交易只有1笔止盈2.86%
- 15笔同步平仓9笔手动平仓
**问题分析**
1. **止盈目标可能设置太高**`ATR_TAKE_PROFIT_MULTIPLIER = 1.5` 可能仍然太高
2. **大部分订单被提前平仓**15笔同步平仓可能是止损触发9笔手动平仓可能是用户干预
3. **止盈单可能没有正确挂到交易所**
---
### 问题4固定风险百分比可能没有生效
**理论**
- 固定风险百分比 = 2%
- 如果止损距离 = 5%,那么仓位 = (总资金 × 2%) / 5% = 总资金的 40%
- 如果止损触发,亏损 = 总资金的 2%(符合预期)
**实际情况**
- 亏损达到 30-50%,说明:
1. 固定风险百分比没有生效
2. 或者止损距离计算错误(止损距离太小,导致仓位过大)
3. 或者止损没有及时触发
---
## 🔍 根本原因分析
### 1. 止损执行问题
**可能原因**
- 止损单没有正确挂到交易所
- WebSocket 监控断线,没有及时触发止损
- 止损价格计算错误
**验证方法**
- 查看日志,确认止损单是否成功挂到交易所
- 检查 WebSocket 监控是否正常运行
- 检查止损价格计算逻辑
### 2. 固定风险百分比可能没有生效
**验证方法**
- 检查 `USE_FIXED_RISK_SIZING` 是否启用
- 检查开仓日志,确认是否使用了固定风险计算
- 检查止损距离估算是否准确
### 3. 止盈目标设置问题
**当前配置**
- `ATR_TAKE_PROFIT_MULTIPLIER = 1.5`
- `TAKE_PROFIT_PERCENT = 25%`(相对于保证金)
**问题**
- 如果 ATR 很大1.5倍 ATR 的止盈目标可能很难达到
- 25% 的止盈目标对于小币种可能太高
---
## 💡 解决方案
### 方案1确保止损正确执行最高优先级
1. **检查止损单是否挂到交易所**
- 在开仓后立即检查止损单状态
- 如果挂单失败,重试或报警
2. **增强 WebSocket 监控可靠性**
- 增加心跳检测
- 增加断线重连机制
- 增加兜底巡检每1-2分钟检查一次
3. **修复止损价格计算**
- 确保止损基于保证金百分比,而不是价格百分比
- 确保止损距离估算准确
### 方案2验证并修复固定风险百分比
1. **检查配置**
- 确认 `USE_FIXED_RISK_SIZING = True`
- 确认 `FIXED_RISK_PERCENT = 0.02`2%
2. **检查计算逻辑**
- 确认止损距离估算准确
- 确认仓位计算使用了固定风险公式
3. **增加日志**
- 记录固定风险计算的详细过程
- 记录实际止损距离和仓位大小
### 方案3调整止盈目标
1. **降低止盈目标**
- `ATR_TAKE_PROFIT_MULTIPLIER` 从 1.5 降到 1.2
- `TAKE_PROFIT_PERCENT` 从 25% 降到 20%
2. **确保止盈单正确挂到交易所**
- 在开仓后立即挂止盈单
- 检查止盈单状态
---
## 📋 立即行动清单
### 高优先级(立即执行)
1. ✅ **检查止损单挂单状态**
- 在开仓后立即检查止损单是否成功挂到交易所
- 如果失败,重试或报警
2. ✅ **验证固定风险百分比是否生效**
- 检查开仓日志,确认是否使用了固定风险计算
- 如果未生效,修复计算逻辑
3. ✅ **增强止损执行可靠性**
- 增加 WebSocket 心跳检测
- 增加兜底巡检每1-2分钟检查一次
### 中优先级(本周执行)
4. ⏳ **调整止盈目标**
- 降低 `ATR_TAKE_PROFIT_MULTIPLIER` 到 1.2
- 降低 `TAKE_PROFIT_PERCENT` 到 20%
5. ⏳ **增加诊断日志**
- 记录止损单挂单状态
- 记录固定风险计算过程
- 记录实际止损距离
---
## 🎯 目标指标
### 当前表现
- 盈亏比1.35:1 ❌
- 胜率44% ✅
- 总盈亏2.03 USDT几乎不盈利
### 目标表现
- 盈亏比:≥ 2.0:1理想 3:1
- 胜率:≥ 40% ✅
- 单笔最大亏损:≤ 5%固定风险2% + 滑点)✅
- 止盈率:≥ 30%35笔中至少10笔止盈
---
## 📝 下一步
1. ✅ **已修复**:固定风险百分比计算逻辑(已添加到代码中)
2. ✅ **已增强**:止损单挂单状态日志(成功/失败都会记录)
3. ⏳ **待验证**重新运行后观察是否还有30%以上的亏损
4. ⏳ **待调整**:降低止盈目标,提高止盈率
---
## 🔧 已实施的修复
### 1. ✅ 修复固定风险百分比计算逻辑
**问题**:固定风险百分比计算逻辑缺失,导致系统没有使用固定风险公式计算仓位。
**修复**
- 在 `risk_manager.py``calculate_position_size()` 中添加了完整的固定风险百分比计算逻辑
- 如果 `USE_FIXED_RISK_SIZING = True` 且提供了 `entry_price``side`,会使用固定风险公式
- 公式:`quantity = (总资金 × 2%) / (入场价 - 止损价)`
### 2. ✅ 增强止损单挂单状态日志
**问题**:无法知道止损单是否成功挂到交易所。
**修复**
- 在 `position_manager.py``_ensure_exchange_sltp_orders()` 中增加了日志
- 止损单和止盈单挂单成功/失败都会记录日志
- 如果挂单失败会明确提示将依赖WebSocket监控
---
## ⚠️ 关键发现
### 为什么会出现30-50%的亏损?
**根本原因**
1. **固定风险百分比没有生效**(已修复)
- 如果固定风险百分比生效每笔亏损应该限制在2%
- 但实际亏损达到30-50%,说明固定风险百分比没有生效
2. **止损单可能没有正确挂到交易所**
- 如果止损单挂单失败系统只能依赖WebSocket监控
- 如果WebSocket断线止损可能无法及时执行
3. **止损价格计算可能有问题**
- 止损可能基于价格百分比而不是保证金百分比
- 或者止损距离估算错误
### 为什么盈亏比只有1.35:1
**原因**
1. **止盈目标设置太高**`ATR_TAKE_PROFIT_MULTIPLIER = 1.5` 可能仍然太高
2. **止盈单可能没有正确挂到交易所**只有1笔止盈说明大部分订单没有达到止盈目标
3. **大部分订单被提前平仓**15笔同步平仓可能是止损9笔手动平仓用户干预
---
## 🎯 预期改善
修复后,预期:
- ✅ **单笔最大亏损**从30-50%降低到≤5%固定风险2% + 滑点)
- ✅ **盈亏比**从1.35:1提升到≥2.0:1通过降低止盈目标
- ✅ **止盈率**从2.86%提升到≥30%(通过降低止盈目标)
---
## 📋 建议的配置调整
### 立即调整在GlobalConfig中
1. **降低止盈目标**
- `ATR_TAKE_PROFIT_MULTIPLIER`: 1.5 → **1.2**
- `TAKE_PROFIT_PERCENT`: 25% → **20%**
2. **确保固定风险百分比启用**
- `USE_FIXED_RISK_SIZING`: **True**
- `FIXED_RISK_PERCENT`: **0.02** (2%)
3. **确保止损单挂单**
- `EXCHANGE_SLTP_ENABLED`: **True**(默认已启用)
---
## 🔍 验证方法
修复后,请观察:
1. **开仓日志**:是否显示"使用固定风险百分比计算仓位"
2. **止损单日志**:是否显示"止损单已成功挂到交易所"
3. **实际亏损**是否还有30%以上的亏损
4. **止盈率**是否提升到30%以上

View File

@ -0,0 +1,103 @@
# WebSocket监控 hold_time_minutes 变量未初始化修复
## 🔍 问题描述
**错误信息**
```
trading_system.position_manager - WARNING - FLUIDUSDT WebSocket监控出错 (重试 1/5):
cannot access local variable 'hold_time_minutes' where it is not associated with a value
```
**问题根源**
`_check_single_position()` 方法中,`hold_time_minutes` 变量只在**止损分支**第2725-2734行中被初始化但在**止盈分支**第2889行中也被使用。当代码走止盈路径时变量未被初始化导致 `UnboundLocalError`
## ✅ 修复方案
### 修复位置
`trading_system/position_manager.py``_check_single_position()` 方法
### 修复内容
在止盈分支第2877行之后添加 `hold_time_minutes` 的初始化逻辑:
**修复前**
```python
# 直接比较当前盈亏百分比与止盈目标(基于保证金)
if pnl_percent_margin >= take_profit_pct_margin:
should_close = True
exit_reason = 'take_profit'
# 详细诊断日志:记录平仓时的所有关键信息
logger.info("=" * 80)
logger.info(f"{symbol} [实时监控-平仓诊断日志] ===== 触发止盈平仓 =====")
# ...
logger.info(f" 持仓时间: {hold_time_minutes:.1f} 分钟") # ❌ 变量未初始化
# ...
```
**修复后**
```python
# 直接比较当前盈亏百分比与止盈目标(基于保证金)
if pnl_percent_margin >= take_profit_pct_margin:
should_close = True
exit_reason = 'take_profit'
# 计算持仓时间(用于日志)
entry_time = position_info.get('entryTime')
hold_time_minutes = 0
if entry_time:
try:
if isinstance(entry_time, datetime):
hold_time_sec = int((get_beijing_time() - entry_time).total_seconds())
else:
hold_time_sec = int(time.time() - (float(entry_time) if isinstance(entry_time, (int, float)) else 0))
hold_time_minutes = hold_time_sec / 60.0
except Exception:
hold_time_minutes = 0
# 详细诊断日志:记录平仓时的所有关键信息
logger.info("=" * 80)
logger.info(f"{symbol} [实时监控-平仓诊断日志] ===== 触发止盈平仓 =====")
# ...
logger.info(f" 持仓时间: {hold_time_minutes:.1f} 分钟") # ✅ 变量已初始化
# ...
```
## 📊 修复效果
### 修复前
- ❌ 止盈触发时 → 尝试使用 `hold_time_minutes``UnboundLocalError` → WebSocket监控出错 → 重试
### 修复后
- ✅ 止盈触发时 → `hold_time_minutes` 已初始化 → 正常记录日志 → WebSocket监控正常
## 🔄 相关代码路径
1. **止损分支**第2725-2734行已正确初始化 `hold_time_minutes`
2. **止盈分支**第2877-2907行**已修复**,现在也会初始化 `hold_time_minutes`
3. **第二目标止盈分支**第2838-2846行未使用 `hold_time_minutes`,无需修复
## ⚠️ 注意事项
1. **变量作用域**`hold_time_minutes` 是局部变量,只在各自的代码分支内有效。
2. **初始化逻辑**:与止损分支的初始化逻辑保持一致,确保计算方式统一。
3. **异常处理**:如果计算持仓时间失败,默认设置为 0避免程序崩溃。
## 🚀 部署建议
1. **重启交易进程**:修复后需要重启所有 `trading_system` 进程才能生效。
```bash
supervisorctl restart auto_sys_acc1 auto_sys_acc2 auto_sys_acc3 ...
```
2. **验证修复**:查看日志,确认 WebSocket 监控不再出现 `hold_time_minutes` 相关错误。
## 📝 相关文件
- `trading_system/position_manager.py`:主要修复文件
- `_check_single_position()` 方法第2580-2960行
- `_monitor_position_price()` 方法第2499-2578行
## ✅ 修复完成时间
2026-01-25

100
apply_altcoin_strategy.sh Executable file
View File

@ -0,0 +1,100 @@
#!/bin/bash
# 山寨币高盈亏比狙击策略 - 一键应用脚本
# 使用方法: bash apply_altcoin_strategy.sh
echo "=================================="
echo "山寨币高盈亏比狙击策略 - 一键应用"
echo "=================================="
echo ""
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
# 检查是否在正确的目录
if [ ! -f "trading_system/config.py" ]; then
echo -e "${RED}❌ 错误:请在项目根目录运行此脚本${NC}"
exit 1
fi
echo "第1步重新构建前端..."
echo "----------------------------------------"
cd frontend
if [ ! -d "node_modules" ]; then
echo -e "${YELLOW}⚠️ node_modules不存在跳过前端构建${NC}"
echo " 如需更新前端界面,请手动执行: cd frontend && npm run build"
else
npm run build
if [ $? -eq 0 ]; then
echo -e "${GREEN}✅ 前端构建成功${NC}"
else
echo -e "${RED}❌ 前端构建失败${NC}"
exit 1
fi
fi
cd ..
echo ""
echo "第2步重启所有交易进程..."
echo "----------------------------------------"
supervisorctl restart auto_sys:*
if [ $? -eq 0 ]; then
echo -e "${GREEN}✅ 交易进程重启成功${NC}"
else
echo -e "${YELLOW}⚠️ 交易进程重启失败,请手动执行: supervisorctl restart auto_sys:*${NC}"
fi
echo ""
echo "第3步重启推荐服务..."
echo "----------------------------------------"
supervisorctl restart auto_recommend:*
if [ $? -eq 0 ]; then
echo -e "${GREEN}✅ 推荐服务重启成功${NC}"
else
echo -e "${YELLOW}⚠️ 推荐服务重启失败,请手动执行: supervisorctl restart auto_recommend:*${NC}"
fi
echo ""
echo "第4步查看进程状态..."
echo "----------------------------------------"
supervisorctl status | grep -E "auto_sys|auto_recommend"
echo ""
echo "第5步验证配置..."
echo "----------------------------------------"
echo "查看最近日志,确认关键配置:"
tail -n 50 logs/trading_*.log 2>/dev/null | grep -E "ATR_STOP_LOSS_MULTIPLIER|RISK_REWARD_RATIO|MIN_HOLD_TIME_SEC|USE_TRAILING_STOP" | tail -5
if [ $? -eq 0 ]; then
echo ""
echo -e "${GREEN}✅ 配置验证完成${NC}"
else
echo -e "${YELLOW}⚠️ 日志文件不存在或未找到配置,请稍后查看${NC}"
fi
echo ""
echo "=================================="
echo -e "${GREEN}✅ 山寨币策略应用完成!${NC}"
echo "=================================="
echo ""
echo "📊 预期效果:"
echo " • 胜率目标: 35%"
echo " • 盈亏比: 4.0:1"
echo " • 期望值: +0.75%/笔"
echo ""
echo "⚠️ 重要提醒:"
echo " 1. 前3笔交易必须人工监控"
echo " 2. 确认止损距离≈15%盈亏比≈4:1"
echo " 3. 单日亏损>5%立即暂停"
echo " 4. 只做24H成交量≥3000万美元的币种"
echo ""
echo "📝 详细说明请查看:"
echo " • 山寨币策略快速应用完整指南.md"
echo " • ALTCOIN_STRATEGY_UPDATE.md"
echo ""
echo "🔍 持续监控:"
echo " tail -f logs/trading_*.log"
echo ""

144
check_accounts_no_trades.sh Executable file
View File

@ -0,0 +1,144 @@
#!/bin/bash
# 排查 account3 和 account4 没有下单的问题
echo "=========================================="
echo "排查 account3 和 account4 未下单问题"
echo "=========================================="
echo ""
# 检查进程状态
echo "【1】检查进程状态"
echo "----------------------------------------"
for acc in 3 4; do
echo ""
echo "Account $acc:"
supervisorctl status auto_sys_acc$acc 2>/dev/null || echo " ❌ supervisorctl 命令失败"
done
echo ""
# 检查日志文件
echo "【2】检查最近的日志最后50行"
echo "----------------------------------------"
PROJECT_ROOT="/www/wwwroot/autosys_new"
for acc in 3 4; do
echo ""
echo "Account $acc 日志:"
LOG_FILE="$PROJECT_ROOT/logs/trading_${acc}.log"
if [ -f "$LOG_FILE" ]; then
echo " 📄 日志文件: $LOG_FILE"
echo " 📊 最后50行:"
tail -n 50 "$LOG_FILE" | grep -E "(ERROR|WARNING|INFO|扫描|交易|下单|开仓|信号|过滤|跳过|余额|配置)" | tail -n 20
echo ""
echo " 🔍 最近的错误:"
tail -n 200 "$LOG_FILE" | grep -i "error" | tail -n 5
echo ""
echo " ⚠️ 最近的警告:"
tail -n 200 "$LOG_FILE" | grep -i "warning" | tail -n 5
else
echo " ❌ 日志文件不存在: $LOG_FILE"
fi
done
echo ""
# 检查配置
echo "【3】检查关键配置项"
echo "----------------------------------------"
echo "检查 account3 和 account4 的配置..."
echo "(需要查看数据库或前端配置页面)"
echo ""
# 检查市场扫描
echo "【4】检查市场扫描活动"
echo "----------------------------------------"
for acc in 3 4; do
echo ""
echo "Account $acc 扫描活动:"
LOG_FILE="$PROJECT_ROOT/logs/trading_${acc}.log"
if [ -f "$LOG_FILE" ]; then
echo " 最近一次扫描时间:"
tail -n 500 "$LOG_FILE" | grep -E "(开始扫描|扫描完成|等待.*秒后进行下次扫描)" | tail -n 3
echo ""
echo " 扫描到的交易对数量:"
tail -n 500 "$LOG_FILE" | grep -E "(扫描到.*个交易对|处理交易对)" | tail -n 5
echo ""
echo " 交易信号分析:"
tail -n 500 "$LOG_FILE" | grep -E "(技术指标分析|交易信号|should_trade|跳过自动交易)" | tail -n 10
fi
done
echo ""
# 检查风险控制
echo "【5】检查风险控制是否阻止交易"
echo "----------------------------------------"
for acc in 3 4; do
echo ""
echo "Account $acc 风险控制:"
LOG_FILE="$PROJECT_ROOT/logs/trading_${acc}.log"
if [ -f "$LOG_FILE" ]; then
echo " 风险检查结果:"
tail -n 500 "$LOG_FILE" | grep -E "(风险检查|余额不足|仓位限制|最大持仓|每日限额)" | tail -n 10
echo ""
echo " 账户余额:"
tail -n 500 "$LOG_FILE" | grep -E "(账户余额|余额|balance)" | tail -n 5
fi
done
echo ""
# 检查API连接
echo "【6】检查API连接状态"
echo "----------------------------------------"
for acc in 3 4; do
echo ""
echo "Account $acc API状态:"
LOG_FILE="$PROJECT_ROOT/logs/trading_${acc}.log"
if [ -f "$LOG_FILE" ]; then
echo " API连接:"
tail -n 200 "$LOG_FILE" | grep -E "(币安客户端|API|连接|权限|密钥)" | tail -n 5
echo ""
echo " 最近的API错误:"
tail -n 200 "$LOG_FILE" | grep -iE "(api.*error|api.*fail|连接失败|权限)" | tail -n 5
fi
done
echo ""
# 检查持仓
echo "【7】检查当前持仓状态"
echo "----------------------------------------"
for acc in 3 4; do
echo ""
echo "Account $acc 持仓:"
LOG_FILE="$PROJECT_ROOT/logs/trading_${acc}.log"
if [ -f "$LOG_FILE" ]; then
echo " 当前持仓数量:"
tail -n 500 "$LOG_FILE" | grep -E "(当前持仓|持仓数量|active_positions)" | tail -n 5
echo ""
echo " 最大持仓限制:"
tail -n 500 "$LOG_FILE" | grep -E "(MAX_OPEN_POSITIONS|最大持仓|持仓上限)" | tail -n 3
fi
done
echo ""
# 检查时间
echo "【8】检查进程运行时间"
echo "----------------------------------------"
for acc in 3 4; do
echo ""
echo "Account $acc:"
ps aux | grep -E "trading_system.*main.*acc$acc|auto_sys_acc$acc" | grep -v grep | head -n 1 | awk '{print " PID: "$2", 运行时间: "$10", 启动时间: "$9}'
done
echo ""
echo "=========================================="
echo "排查完成"
echo "=========================================="
echo ""
echo "💡 建议下一步操作:"
echo "1. 如果进程未运行,检查 supervisor 配置和启动日志"
echo "2. 如果进程运行但无交易,检查:"
echo " - 配置是否正确(特别是 MIN_SIGNAL_STRENGTH, MAX_OPEN_POSITIONS 等)"
echo " - 市场扫描是否正常(查看'开始扫描'日志)"
echo " - 是否有交易信号但被过滤(查看'跳过自动交易'日志)"
echo " - 风险控制是否阻止(查看'风险检查'日志)"
echo " - 账户余额是否充足"
echo "3. 查看完整日志: tail -f $PROJECT_ROOT/logs/trading_3.log"
echo "4. 检查前端配置页面,确认 account3 和 account4 的配置项"

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,114 @@
# 山寨币高盈亏比狙击策略 - 快速应用说明
## 🎯 在界面上快速应用
### 方式一:全局配置页面(管理员)
1. 登录管理员账号
2. 进入"**全局配置**"页面
3. 在"**快速切换方案**"区域
4. 找到"**⭐ 山寨币高盈亏比狙击策略**"分组
5. 点击"**山寨币狙击(高盈亏比)**"按钮
6. 系统会自动应用所有配置,完成后显示成功提示
### 方式二:普通配置页面
1. 登录自己的账号
2. 进入"**配置**"页面
3. 在"**建议方案**"区域
4. 点击"**⭐山寨币狙击**"按钮
5. 系统会自动应用所有配置
## ✅ 应用后自动配置的参数
点击按钮后,以下参数会自动设置:
### 风险控制
- ✅ ATR止损倍数2.0(容忍山寨币波动)
- ✅ 固定止损15%
- ✅ 盈亏比4.0(追求大赢家)
- ✅ ATR止盈倍数8.0
- ✅ 固定止盈60%
- ✅ 最小持仓时间0秒取消持仓锁
- ✅ 每笔风险1%
### 移动止损
- ✅ 启用移动止损
- ✅ 激活条件盈利30%
- ✅ 保护利润15%
### 仓位管理
- ✅ 单笔仓位1.5%
- ✅ 总仓位12%
- ✅ 每日最多5笔
- ✅ 最大持仓4个
- ✅ 基础杠杆8倍
- ✅ 最大杠杆12倍
### 品种筛选
- ✅ 24H成交量≥3000万美元
- ✅ 最小波动率≥3%
- ✅ 只做最强5个交易对
- ✅ 扫描范围前150个
- ✅ 信号强度≥7
### 时间控制
- ✅ 扫描间隔1小时
- ✅ 只做趋势市场
- ✅ 4H中性不交易
## 🚀 应用后的操作
1. **重启交易进程**(必须)
```bash
supervisorctl restart auto_sys:*
```
2. **查看日志确认**
```bash
tail -f /www/wwwroot/autosys_new/logs/trading_*.log | grep -E "ATR_STOP_LOSS_MULTIPLIER|RISK_REWARD_RATIO"
```
应该看到:
- `ATR_STOP_LOSS_MULTIPLIER: 2.0`
- `RISK_REWARD_RATIO: 4.0`
- `MIN_HOLD_TIME_SEC: 0`
- `USE_TRAILING_STOP: True`
3. **监控前3笔交易**
- 确认止损距离合理10-20%
- 确认盈亏比接近4:1
- 确认单笔保证金≤1.5%
## 📊 预期效果
- **胜率目标**35%(山寨币正常水平)
- **盈亏比目标**4.0:1
- **期望值**+0.75%/笔
- **数学期望**(0.35 × 4.0) - 0.65 = **+0.75**
每笔交易平均盈利总资金的0.75%,长期可持续盈利。
## ⚠️ 重要提醒
1. **前3笔交易必须人工监控**
2. **单日亏损 > 5% 立即暂停**
3. **连续亏损 > 5笔 暂停等待**
4. **盈亏比 < 3.0 检查配置**
5. **胜率 < 25% 提高信号强度**
## 🔄 如何切换回其他策略
在同一页面点击其他预设方案按钮即可:
- **波段回归**:低频波段策略
- **成交优先**:减少漏单
- **精选低频**:高胜率倾向
- **稳定出单**:均衡收益/频率
## 📝 查看详细配置
应用后,可以在配置页面查看所有已设置的参数详情,支持单项微调。
---
**提示**山寨币策略适合24H成交量≥3000万美元的主流山寨币不适合低流动性的小币种。

View File

@ -0,0 +1,305 @@
山寨币专属策略框架
核心理念:高盈亏比 + 宽止损 + 快速止盈
山寨币策略必须是:
容忍高波动:止损足够宽,不被正常波动扫掉
追求大盈亏比5-10倍用少数大赢家覆盖多次小亏损
快速止盈:不恋战,有利润就分批走
精选时机:只做流动性最好的时段和币种
🔧 完整优化配置方案
第一部分:风险控制(最关键)
json
[
{
"key": "ATR_STOP_LOSS_MULTIPLIER",
"value": 2.0,
"reason": "山寨币波动大止损要宽。2.0倍ATR是合理起点"
},
{
"key": "MIN_HOLD_TIME_SEC",
"value": 0,
"reason": "立即取消山寨币30分钟可能暴涨暴跌50%"
},
{
"key": "STOP_LOSS_PERCENT",
"value": 0.15,
"reason": "固定止损15%配合ATR使用"
},
{
"key": "RISK_REWARD_RATIO",
"value": 4.0,
"reason": "盈亏比必须≥4山寨币需要大赢家"
},
{
"key": "USE_FIXED_RISK_SIZING",
"value": true,
"reason": "固定每笔风险,避免亏损扩大"
},
{
"key": "FIXED_RISK_PERCENT",
"value": 0.01,
"reason": "每笔最多亏总资金1%(山寨币风险高)"
}
]
第二部分:入场与出场优化
json
[
{
"key": "MIN_SIGNAL_STRENGTH",
"value": 7,
"reason": "保持较高门槛但比8合理"
},
{
"key": "AUTO_TRADE_ONLY_TRENDING",
"value": true,
"reason": "山寨币只做趋势明确的,震荡市必死"
},
{
"key": "SMART_ENTRY_ENABLED",
"value": true,
"reason": "开启智能入场,提高成交率"
},
{
"key": "USE_TRAILING_STOP",
"value": true,
"reason": "必须开启!山寨币利润要保护"
},
{
"key": "TRAILING_STOP_ACTIVATION",
"value": 0.3,
"reason": "盈利30%后激活(山寨币波动大)"
},
{
"key": "TRAILING_STOP_PROTECT",
"value": 0.15,
"reason": "保护15%利润(给回撤足够空间)"
},
{
"key": "ENTRY_MAX_DRIFT_PCT_TRENDING",
"value": 0.8,
"reason": "追价偏离放宽到0.8%(山寨币跳空大)"
}
]
第三部分:交易品种筛选
json
[
{
"key": "MIN_VOLUME_24H",
"value": 30000000,
"reason": "24小时成交额≥3000万美元过滤垃圾币"
},
{
"key": "MIN_VOLUME_24H_STRICT",
"value": 50000000,
"reason": "严格过滤≥5000万美元"
},
{
"key": "MAX_SCAN_SYMBOLS",
"value": 150,
"reason": "扫描前150个覆盖主流山寨"
},
{
"key": "TOP_N_SYMBOLS",
"value": 5,
"reason": "只做信号最强的5个专注优质机会"
},
{
"key": "MIN_VOLATILITY",
"value": 0.03,
"reason": "最小波动率3%,过滤死币"
}
]
第四部分:仓位与频率控制
json
[
{
"key": "MAX_POSITION_PERCENT",
"value": 0.015,
"reason": "单笔仓位1.5%,山寨币不加仓"
},
{
"key": "MAX_TOTAL_POSITION_PERCENT",
"value": 0.12,
"reason": "总仓位12%同时持仓不超过3-4个"
},
{
"key": "MAX_DAILY_ENTRIES",
"value": 5,
"reason": "每日最多5笔山寨币少做多看"
},
{
"key": "LEVERAGE",
"value": 8,
"reason": "基础杠杆降到8倍山寨币波动大"
},
{
"key": "MAX_LEVERAGE",
"value": 12,
"reason": "最大杠杆12倍不要超过"
},
{
"key": "ENTRY_SYMBOL_COOLDOWN_SEC",
"value": 1800,
"reason": "同一币种冷却30分钟避免频繁操作"
}
]
第五部分:时间框架调整
json
[
{
"key": "PRIMARY_INTERVAL",
"value": "4h",
"reason": "主周期用4小时过滤噪音"
},
{
"key": "ENTRY_INTERVAL",
"value": "1h",
"reason": "入场周期1小时避免太小的时间框架"
},
{
"key": "CONFIRM_INTERVAL",
"value": "1d",
"reason": "确认周期用日线,看大趋势"
},
{
"key": "SCAN_INTERVAL",
"value": 3600,
"reason": "扫描间隔1小时不要太频繁"
}
]
📈 山寨币专用策略逻辑
1. 止损策略:宽但坚决
ATR倍数2.0 + 固定止损15%(哪个先触发用哪个)
不设持仓锁:触及止损立即离场
逻辑山寨币正常波动10-20%很常见,止损要容忍正常波动,但不能容忍趋势反转
2. 止盈策略:分批 + 移动止损
第一目标盈亏比4:1止损15% → 止盈60%
第二目标移动止损保护盈利30%后激活保护15%利润)
逻辑山寨币可能暴涨100%+,也可能瞬间反转,要快速锁定部分利润
3. 品种选择:流动性为王
text
合格山寨币标准:
1. 24小时成交额 > 3000万美元
2. 市值排名前150
3. 有明确趋势4小时+日线)
4. 不在异常暴涨暴跌期间
4. 时机选择:跟随大盘
BTC处于趋势中时才交易山寨币
💡 针对你交易记录的具体建议
从你的失败案例学习:
KAIAUSDT频繁交易 → 添加币种冷却和日交易次数限制
亏损超过30% → 主要是ATR倍数2.5+持仓锁的组合问题
胜率仅30% → 需要更高门槛的趋势确认
新增规则(如果系统支持):
python
# 伪代码:山寨币专用规则
if 币种市值排名 > 100:
止损倍数 = 2.0
最小盈亏比 = 4.0
最大杠杆 = 8
elif 币种市值排名 ≤ 50:
止损倍数 = 1.5
最小盈亏比 = 3.0
最大杠杆 = 12
📋 执行计划
第一阶段:紧急止血(今天)
暂停交易
修改这5个最关键参数
ATR_STOP_LOSS_MULTIPLIER: 2.0
MIN_HOLD_TIME_SEC: 0
RISK_REWARD_RATIO: 4.0
MIN_VOLUME_24H: 30000000
MAX_POSITION_PERCENT: 0.015
第二阶段回测验证1-2天
用模拟账户或极小实盘单笔0.5%
记录每笔交易的:
入场信号强度
最大浮盈
是否触及止损/止盈
持仓时间
调整参数至胜率35-40%盈亏比4-5
第三阶段正式运行3天后
单笔风险1%总仓位不超过10%
每日最多交易3-4笔
每周复盘,调整过滤条件
📊 数学期望计算
优化后目标:
胜率35%(山寨币难有高胜率)
盈亏比4.0
固定风险每笔1%
期望值:
text
期望值 = (胜率 × 盈亏比) - (1 - 胜率)
= (0.35 × 4.0) - 0.65
= 1.4 - 0.65
= 0.75
每笔交易平均盈利0.75个风险单位即总资金的0.75%
与现状对比:
text
现状:期望值 = (0.30 × 1.95) - 0.70 = -0.115(亏损)
优化后:期望值 = +0.75(盈利)
⚠️ 山寨币交易铁律
绝不扛单亏损15%无条件离场
绝不加仓:山寨币没有"摊平成本",只有越亏越多
绝不做空低流通币:容易被轧空
绝不信消息:只信价格和成交量
仓位永远小于主流币单笔不超过1.5%
🎯 最终建议总结
你的策略需要从 "波段趋势策略" 转变为 "山寨币高盈亏比狙击策略"
维度 改变方向 具体调整
止损 放宽容忍波动 ATR倍数2.0 + 取消持仓锁
止盈 追求大盈亏比 盈亏比4.0 + 移动止损
品种 精选高流动性 成交额>3000万 + 前150市值
仓位 更保守 单笔1.5%杠杆≤8倍
频率 少而精 每日≤5笔只做最强信号
最关键的三个数字:
止损2倍ATR容忍波动
盈亏比4倍追求大赢家
成交量:>3000万美元确保流动性
这样调整后虽然胜率可能还是只有35%左右但盈亏比4.0能让数学期望转正,在山寨币市场中长期存活并盈利。

View File

@ -0,0 +1,535 @@
# ✅ 山寨币高盈亏比狙击策略 - 完成总结
> 更新时间2026-01-24
> 状态:**已完成所有代码和界面更新**
---
## 🎯 完成的工作
### 1. 后端核心配置更新 ✅
**文件:`trading_system/config.py`**
已更新40+个核心配置参数,主要变更:
| 类别 | 关键参数 | 变更 |
|------|----------|------|
| 风险控制 | ATR_STOP_LOSS_MULTIPLIER | 2.5 → **2.0** |
| | STOP_LOSS_PERCENT | 10% → **15%** |
| | RISK_REWARD_RATIO | 1.5 → **4.0** ⭐ |
| | ATR_TAKE_PROFIT_MULTIPLIER | 1.5 → **8.0** |
| | TAKE_PROFIT_PERCENT | 25% → **60%** |
| | MIN_HOLD_TIME_SEC | 1800 → **0** ⭐ |
| | FIXED_RISK_PERCENT | 2% → **1%** |
| 移动止损 | USE_TRAILING_STOP | False → **True** ⭐ |
| | TRAILING_STOP_ACTIVATION | 10% → **30%** |
| | TRAILING_STOP_PROTECT | 5% → **15%** |
| 仓位管理 | MAX_POSITION_PERCENT | 8% → **1.5%** ⭐ |
| | MAX_TOTAL_POSITION_PERCENT | 40% → **12%** |
| | MAX_DAILY_ENTRIES | 8 → **5** |
| | LEVERAGE | 10 → **8** |
| | MAX_LEVERAGE | 15 → **12** |
| 品种筛选 | MIN_VOLUME_24H | 500万 → **3000万** ⭐ |
| | MIN_VOLUME_24H_STRICT | 1000万 → **5000万** |
| | TOP_N_SYMBOLS | 50 → **5** ⭐ |
| | MIN_VOLATILITY | 2% → **3%** |
| | MIN_SIGNAL_STRENGTH | 8 → **7** |
| 时间框架 | SCAN_INTERVAL | 1800s → **3600s** |
| | PRIMARY_INTERVAL | 1h → **4h** |
| | ENTRY_INTERVAL | 15m → **1h** |
| | CONFIRM_INTERVAL | 4h → **1d** |
| 智能入场 | SMART_ENTRY_ENABLED | False → **True** |
| | ENTRY_SYMBOL_COOLDOWN_SEC | 120 → **1800** |
| | ENTRY_MAX_DRIFT_PCT_TRENDING | 0.6% → **0.8%** |
### 2. 推荐逻辑优化 ✅
**文件:`trading_system/trade_recommender.py`**
- ✅ 更新分批止盈TP2从2.0:1改为**4.0:1**
- ✅ 优化用户指南描述,强调山寨币策略特点
- ✅ 添加移动止损说明和山寨币交易铁律
### 3. 持仓管理优化 ✅
**文件:`trading_system/position_manager.py`**
- ✅ 更新第二目标止盈日志2.0:1 → 4.0:1
- ✅ 添加"山寨币策略"标识,方便日志追踪
### 4. 前端界面更新 ✅
**新增预设方案:`frontend/src/components/GlobalConfig.jsx` & `ConfigPanel.jsx`**
```javascript
altcoin: {
name: '⭐山寨币狙击(高盈亏比)',
desc: '高盈亏比4:1+ 宽止损2.0×ATR+ 移动止损保护 + 严格流动性筛选',
configs: {
// 包含40+个自动配置参数
ATR_STOP_LOSS_MULTIPLIER: 2.0,
RISK_REWARD_RATIO: 4.0,
MIN_HOLD_TIME_SEC: 0,
USE_TRAILING_STOP: true,
// ... 更多参数
}
}
```
**界面特性:**
- ✅ 红色高亮边框和渐变背景
- ✅ ⭐ 星标突出显示
- ✅ 放在预设方案列表最顶部
- ✅ 一键应用所有40+个配置参数
- ✅ 详细的策略说明和期望值计算
### 5. CSS样式优化 ✅
**文件:`frontend/src/components/ConfigPanel.css` & `ConfigGuide.css`**
- ✅ 添加`.preset-tag--altcoin`样式(红色渐变标签)
- ✅ 添加`.preset-btn[data-preset="altcoin"]`样式(红色边框按钮)
- ✅ 添加`.preset-group[data-group="altcoin"]`样式(红色高亮组)
- ✅ 添加`.highlight-card`样式(高亮卡片)
### 6. 文档更新 ✅
已创建/更新的文档:
1. **`ALTCOIN_STRATEGY_UPDATE.md`** - 完整技术文档
- 所有配置变更对比表
- 策略逻辑详解
- 数学期望计算
- 执行计划和监控指标
2. **`QUICK_APPLY_ALTCOIN_STRATEGY.md`** - 5分钟快速应用指南
- 快速应用步骤
- 验证清单
- 问题排查
- 监控模板
3. **`山寨币策略快速应用完整指南.md`** - 用户友好版指南
- 界面操作步骤(带截图说明)
- 完整参数列表
- 策略逻辑说明
- 性能跟踪表格
4. **`frontend/山寨币策略快速应用说明.md`** - 前端专用说明
- 界面快速应用方法
- 视觉效果说明
- 常见问题解答
5. **`apply_altcoin_strategy.sh`** - 一键应用脚本
- 自动重建前端
- 自动重启所有进程
- 自动验证配置
- 带颜色的友好输出
6. **`frontend/src/components/ConfigGuide.jsx`** - 前端帮助文档
- 添加山寨币策略详细说明
- 包含数学期望计算示例
---
## 🚀 如何在界面上快速应用
### 最简单方法3步完成
1. **登录管理员账号** → 进入 "**全局配置**" 页面
2. **找到红色高亮区域** "⭐ 山寨币高盈亏比狙击策略"
3. **点击按钮** "山寨币狙击(高盈亏比)"
等待提示 "✅ 已应用山寨币狙击(高盈亏比)",完成!
### 然后执行:
```bash
# 方法1使用一键脚本推荐
bash apply_altcoin_strategy.sh
# 方法2手动重启
supervisorctl restart auto_sys:*
supervisorctl restart auto_recommend:*
```
---
## 📊 自动配置的完整参数列表
点击按钮后,这些参数会自动设置:
### 核心参数10个最重要
```yaml
1. ATR_STOP_LOSS_MULTIPLIER: 2.0 # ⭐ 止损宽度
2. STOP_LOSS_PERCENT: 15.0 # ⭐ 固定止损
3. RISK_REWARD_RATIO: 4.0 # ⭐ 盈亏比(最关键)
4. ATR_TAKE_PROFIT_MULTIPLIER: 8.0 # ⭐ 止盈倍数
5. MIN_HOLD_TIME_SEC: 0 # ⭐ 取消持仓锁
6. USE_TRAILING_STOP: true # ⭐ 启用移动止损
7. MAX_POSITION_PERCENT: 1.5 # ⭐ 单笔1.5%
8. MIN_VOLUME_24H: 30000000 # ⭐ 成交量≥3000万
9. TOP_N_SYMBOLS: 5 # ⭐ 只做最强5个
10. FIXED_RISK_PERCENT: 1.0 # ⭐ 每笔最多亏1%
```
### 其他自动配置参数30+
- 移动止损激活30%保护15%
- 仓位总仓位12%最多4个持仓每日5笔
- 杠杆基础8倍最大12倍
- 筛选波动率≥3%扫描150个
- 时间1小时扫描4小时主周期日线确认
- 入场智能入场开启币种冷却30分钟
- 控制只做趋势市4H中性不交易
---
## 📈 预期交易表现对比
| 指标 | 优化前(实际) | 优化后(目标) | 改善幅度 |
|------|---------------|----------------|----------|
| 胜率 | 30% | 35% | +16.7% |
| 盈亏比 | 0.91:1 | **4.0:1** | **+340%** ⭐ |
| 期望值 | -42.7% | **+75%** | **+117.7%** ⭐ |
| 单笔盈利 | +1.34% | +4.0% | +199% |
| 单笔亏损 | -1.0% | -1.0% | 受控 |
| 平均持仓 | 105分钟 | 1-4小时 | 更合理 |
| 交易频率 | 过高 | 每日≤5笔 | 更精选 |
**核心改善:**
- 🔴 **最关键**:期望值从-42.7%变为**+75%**,转亏为盈!
- 🔴 **关键**盈亏比从0.91:1提升到**4.0:1**提升340%
- 🟡 胜率略提升30% → 35%
- 🟢 风险严格控制每笔1%总仓位12%
---
## ✅ 验证清单
应用后请逐项确认:
### 配置验证(查看日志)
- [ ] ATR_STOP_LOSS_MULTIPLIER = 2.0
- [ ] RISK_REWARD_RATIO = 4.0
- [ ] MIN_HOLD_TIME_SEC = 0
- [ ] USE_TRAILING_STOP = True
- [ ] TRAILING_STOP_ACTIVATION = 0.3 (30%)
- [ ] MAX_POSITION_PERCENT = 0.015 (1.5%)
- [ ] LEVERAGE = 8
- [ ] MIN_VOLUME_24H = 30000000
### 进程状态supervisorctl status
- [ ] auto_sys_acc* 所有进程 RUNNING
- [ ] auto_recommend:* 进程 RUNNING
- [ ] 无 FATAL 或 BACKOFF 状态
### 前3笔交易验证
- [ ] 止损距离 ≈ 10-20%
- [ ] 盈亏比 ≈ 3.5:1 - 4.5:1
- [ ] 单笔保证金 ≤ 1.5%
- [ ] 杠杆 ≤ 12倍
- [ ] 24H成交量 ≥ 3000万美元
---
## 📱 在界面上的使用方法
### 界面效果预览
```
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ ⭐ 山寨币高盈亏比狙击策略 ┃ ← 红色渐变高亮
┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫
┃ 专为山寨币设计:宽止损+高盈亏比 ┃
┃ 期望胜率35%,每笔+0.75% ┃
┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫
┃ [山寨币狙击(高盈亏比)] ✓ ┃ ← 点击这里
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
```
### 步骤
1. **全局配置页面**(管理员)
- 路径:导航栏 → "全局配置"
- 位置:页面顶部,第一个区域
- 操作:点击红色高亮的"山寨币狙击"按钮
2. **配置页面**(所有用户)
- 路径:导航栏 → "配置"
- 位置:"建议方案"区域
- 操作:点击"⭐山寨币狙击"按钮
3. **应用成功提示**
```
✅ 已应用山寨币狙击(高盈亏比)
40+个配置参数已自动更新
```
---
## 🔧 应用后必须执行的操作
### 命令行方式(快速)
```bash
# 一键应用(推荐)
bash apply_altcoin_strategy.sh
# 或者手动执行:
supervisorctl restart auto_sys:*
supervisorctl restart auto_recommend:*
supervisorctl status
```
### 界面方式(管理员)
1. 进入"全局配置"页面
2. 找到"系统控制"区域
3. 点击"重启所有交易账户"按钮
---
## 📊 数学期望详解
### 当前策略的数学期望
```
假设:
- 胜率 = 35%(山寨币正常水平)
- 盈亏比 = 4.0:1
- 每笔风险 = 1%(固定)
计算:
期望值 = (胜率 × 盈亏比 × 风险) - (败率 × 风险)
= (0.35 × 4.0 × 1%) - (0.65 × 1%)
= 1.4% - 0.65%
= 0.75%
结论:
每笔交易平均盈利总资金的 0.75%
实例100 USDT本金
- 100笔交易后100 × (1 + 0.0075)^100 ≈ 211 USDT
- 收益率:+111%
- 时间假设每周10笔 → 10周2.5个月)
```
### 与现状对比
```
现状(实际数据):
- 胜率30%
- 盈亏比0.91:1
- 平均盈利:+1.34%
- 平均亏损:-1.0%
- 期望值:(0.30 × 1.34%) - (0.70 × 1.0%) = -0.298%
- 结果每笔亏损0.298%100笔后本金剩余 ≈ 74 USDT-26%
优化后(目标):
- 胜率35%
- 盈亏比4.0:1
- 平均盈利:+4.0%
- 平均亏损:-1.0%
- 期望值:(0.35 × 4.0%) - (0.65 × 1.0%) = +0.75%
- 结果每笔盈利0.75%100笔后本金 ≈ 211 USDT+111%
改善:从-26%亏损变为+111%盈利提升137%
```
---
## ⚠️ 重要提醒和风险控制
### 前3笔交易必须检查人工监控
```
交易1
□ 开仓时间_______
□ 交易对_______24H成交量≥3000万
□ 开仓价_______
□ 止损价_______≈开仓价±15%
□ 止盈价_______≈止损距离×4
□ 杠杆_______≤12
□ 保证金_______≤1.5%
交易2同上检查
交易3同上检查
✅ 全部符合 → 策略正常运行
❌ 有异常 → 立即暂停并检查日志
```
### 预警阈值(必须遵守)
| 情况 | 阈值 | 操作 |
|------|------|------|
| 单日亏损 | > 5% | 🚨 立即暂停交易 |
| 连续亏损 | > 5笔 | 🚨 立即暂停交易 |
| 胜率 | < 25% | 提高MIN_SIGNAL_STRENGTH到8 |
| 盈亏比 | < 3.0 | 检查止盈设置 |
| 单笔亏损 | > 2% | ⚠️ 检查风险控制 |
| 同时持仓 | > 5个 | ⚠️ 检查仓位管理 |
---
## 📈 性能监控仪表板
### 每日检查5分钟
**交易记录页面:**
- 今日笔数≤5
- 今日胜率≥30%
- 今日盈亏比≥3.5
**持仓页面:**
- 当前持仓≤4个
- 总保证金≤12%
- 是否接近止损
**仪表板:**
- 今日盈亏
- 账户余额
- 是否有异常
### 每周复盘30分钟
1. 导出交易记录(交易记录页面有导出按钮)
2. 统计关键指标:
```
周交易笔数_____
周胜率_____%目标≥35%
周盈亏比_____:1目标≥3.5
周总盈亏_____ USDT
周期望值_____%目标≥0.5%
最大单笔亏损_____ USDT≤1%本金?)
平均持仓时间_____ 小时1-4小时
```
3. 如果不达标,参考"问题排查"部分
---
## 🔄 如何切换回其他策略
如果山寨币策略不适合当前市场环境,可以随时切换:
### 备用策略
| 策略名 | 适用场景 | 特点 |
|--------|----------|------|
| **波段回归** | 稳定趋势市场 | 低频、高门槛、纯限价 |
| **成交优先** | 想要更多成交 | 智能入场、减少漏单 |
| **精选低频** | 追求高胜率 | 更严格筛选、低频 |
| **稳定出单** | 均衡收益/频率 | 中等频率、中等门槛 |
**切换方法:**在同一页面点击其他策略按钮即可,系统会自动应用新配置。
---
## 🎯 核心优势总结
### 为什么这套策略能盈利?
1. **数学期望为正**
```
期望值 = (0.35 × 4.0) - 0.65 = +0.75
即使胜率只有35%,高盈亏比能确保长期盈利
```
2. **风险严格控制**
```
每笔最多亏1%总仓位≤12%
即使连续亏损10笔也只亏10%
但只要1笔大赢家+4%就能覆盖4笔亏损
```
3. **适应山寨币特性**
```
宽止损2.0×ATR容忍山寨币高波动
移动止损:保护山寨币的暴涨利润
严格筛选只做高流动性币种≥3000万
快速止盈:不恋战,有利润就分批走
```
4. **避免历史错误**
```
❌ 之前止损太紧1.5×ATR→ 频繁被扫
✅ 现在止损2.0×ATR容忍正常波动
❌ 之前盈亏比0.91:1 → 数学期望为负
✅ 现在盈亏比4.0:1数学期望为正
❌ 之前持仓锁30分钟 → 错过止损时机
✅ 现在:取消持仓锁,立即止损
❌ 之前:无移动止损 → 利润回吐
✅ 现在盈利30%启动移动止损保护15%
```
---
## 📝 后续优化路线图
### 短期1周内
- [ ] 监控实际盈亏比是否达到3.5:1+
- [ ] 微调MIN_SIGNAL_STRENGTH6.5-8之间
- [ ] 记录表现最好的币种
### 中期1个月内
- [ ] 建立币种白名单/黑名单
- [ ] 实现按市值分级的动态参数
- [ ] 添加BTC趋势过滤增强
### 长期3个月内
- [ ] 优化凯利公式动态调整
- [ ] 开发山寨币专用技术指标
- [ ] 实现多策略组合
---
## 📞 技术支持
### 查看日志
```bash
# 实时查看交易日志
tail -f /www/wwwroot/autosys_new/logs/trading_*.log
# 查看错误日志
tail -f /www/wwwroot/autosys_new/logs/trading_*.err.log
# 查看推荐服务日志
tail -f /www/wwwroot/autosys_new/logs/recommendations_*.log
```
### 常见问题
1. **配置未生效** → 检查是否重启进程
2. **没有新交易** → 检查推荐日志,确认是否有推荐生成
3. **止损触发太频繁** → 提高ATR_STOP_LOSS_MULTIPLIER到2.2
4. **交易频率太低** → 降低MIN_SIGNAL_STRENGTH到6
---
## 🎉 最后的话
这套策略的核心在于:
> **"用少数大赢家(+4%)覆盖多次小亏损(-1%"**
只要:
1. 严格遵守止损15%必须离场)
2. 耐心等待大赢家4:1盈亏比
3. 只做高流动性币种≥3000万美元
4. 控制仓位和频率单笔1.5%每日5笔
数学期望会保证您长期盈利!
---
**现在就开始吧!**
1. 点击界面上的"⭐山寨币狙击"按钮
2. 重启交易进程
3. 监控前3笔交易
4. 享受正期望值带来的稳定收益
**祝您交易顺利!** 🚀

View File

@ -0,0 +1,486 @@
# 🎯 山寨币高盈亏比狙击策略 - 完整应用指南
> **核心理念**高盈亏比4:1+ 宽止损2.0×ATR+ 快速止盈 + 严格筛选
> **目标效果**胜率35%,期望值+0.75%/笔,长期可持续盈利
---
## 📱 第一步:在界面上快速应用(推荐)
### 方式A管理员 - 全局配置页面
1. 登录**管理员账号**
2. 点击导航栏 "**全局配置**"
3. 找到 "**⭐ 山寨币高盈亏比狙击策略**" 区域(带红色高亮边框)
4. 点击 "**山寨币狙击(高盈亏比)**" 按钮
5. 等待提示 "**已应用山寨币狙击(高盈亏比)**"
6. ✅ 完成!系统已自动配置所有参数
### 方式B普通用户 - 配置页面
1. 登录自己的账号
2. 点击导航栏 "**配置**"
3. 在 "**建议方案**" 区域
4. 点击 "**⭐山寨币狙击**" 按钮
5. 等待成功提示
6. ✅ 完成!
---
## 🔧 第二步:重启交易进程(必须)
### 命令行操作
```bash
# 1. 重启所有交易进程
supervisorctl restart auto_sys:*
# 2. 重启推荐服务(可选)
supervisorctl restart auto_recommend:*
# 3. 查看进程状态
supervisorctl status
# 4. 查看日志确认配置已生效
tail -f /www/wwwroot/autosys_new/logs/trading_*.log
```
### 在界面上操作(管理员)
1. 进入 "**全局配置**" 页面
2. 找到 "**系统控制**" 区域
3. 点击 "**重启所有交易账户**" 按钮
4. 等待重启完成
---
## ✅ 第三步:验证配置生效
### 查看日志,确认以下关键参数:
```bash
tail -n 100 /www/wwwroot/autosys_new/logs/trading_*.log | grep -E "ATR_STOP_LOSS|RISK_REWARD|MIN_HOLD_TIME|TRAILING_STOP"
```
**应该看到:**
```
✅ ATR_STOP_LOSS_MULTIPLIER: 2.0
✅ RISK_REWARD_RATIO: 4.0
✅ MIN_HOLD_TIME_SEC: 0
✅ USE_TRAILING_STOP: True
✅ TRAILING_STOP_ACTIVATION: 0.3 (30%)
✅ MAX_POSITION_PERCENT: 0.015 (1.5%)
✅ LEVERAGE: 8
✅ MIN_VOLUME_24H: 30000000
```
---
## 📊 已自动配置的完整参数
点击山寨币策略按钮后,以下**40+个参数**会自动设置:
### 🛡️ 风险控制(最关键)
```
ATR_STOP_LOSS_MULTIPLIER = 2.0 # ATR止损2.0倍
STOP_LOSS_PERCENT = 15% # 固定止损15%
RISK_REWARD_RATIO = 4.0 # 盈亏比4:1
ATR_TAKE_PROFIT_MULTIPLIER = 8.0 # ATR止盈8.0倍
TAKE_PROFIT_PERCENT = 60% # 固定止盈60%
MIN_HOLD_TIME_SEC = 0 # 取消持仓锁
USE_FIXED_RISK_SIZING = true # 固定风险
FIXED_RISK_PERCENT = 1% # 每笔最多亏1%
```
### 📈 移动止损(保护利润)
```
USE_TRAILING_STOP = true # 启用移动止损
TRAILING_STOP_ACTIVATION = 30% # 盈利30%后激活
TRAILING_STOP_PROTECT = 15% # 保护15%利润
```
### 💰 仓位管理
```
MAX_POSITION_PERCENT = 1.5% # 单笔1.5%
MAX_TOTAL_POSITION_PERCENT = 12% # 总仓位12%
MAX_DAILY_ENTRIES = 5 # 每日最多5笔
MAX_OPEN_POSITIONS = 4 # 最多4个持仓
LEVERAGE = 8 # 基础杠杆8倍
MAX_LEVERAGE = 12 # 最大杠杆12倍
```
### 💎 品种筛选(流动性为王)
```
MIN_VOLUME_24H = 30000000 # ≥3000万美元
MIN_VOLUME_24H_STRICT = 50000000 # 严格≥5000万
MIN_VOLATILITY = 3% # 最小波动率3%
TOP_N_SYMBOLS = 5 # 只做最强5个
MAX_SCAN_SYMBOLS = 150 # 扫描前150个
MIN_SIGNAL_STRENGTH = 7 # 信号强度≥7
```
### ⏰ 时间控制
```
SCAN_INTERVAL = 3600秒 # 1小时扫描间隔
PRIMARY_INTERVAL = 4h # 主周期4小时
ENTRY_INTERVAL = 1h # 入场周期1小时
CONFIRM_INTERVAL = 1d # 确认周期日线
ENTRY_SYMBOL_COOLDOWN_SEC = 1800 # 币种冷却30分钟
```
### 🎯 交易控制
```
AUTO_TRADE_ONLY_TRENDING = true # 只做趋势市
AUTO_TRADE_ALLOW_4H_NEUTRAL = false # 4H中性不交易
SMART_ENTRY_ENABLED = true # 开启智能入场
ENTRY_MAX_DRIFT_PCT_TRENDING = 0.8% # 追价偏离0.8%
```
---
## 📈 预期交易表现
### 目标指标3-5天后
| 指标 | 优化前 | 目标值 | 说明 |
|------|--------|--------|------|
| **胜率** | 30% | 35% | 山寨币正常水平 |
| **盈亏比** | 0.91:1 | 4.0:1 | 关键改善 |
| **期望值** | -42.7% | **+75%** | 每笔+0.75% |
| **平均持仓** | 105分钟 | 1-4小时 | 更合理 |
| **单笔盈利** | +1.34% | **+4.0%** | 大幅提升 |
| **单笔亏损** | -1.0% | **-1.0%** | 风险受控 |
### 数学期望验证
```
期望值 = (胜率 × 盈亏比) - (1 - 胜率)
= (0.35 × 4.0) - 0.65
= 1.4 - 0.65
= 0.75
结论:每笔交易平均盈利总资金的 0.75%
```
---
## 🎬 第四步监控前3笔交易关键
### 必须检查的数据点
#### 第1笔交易检查清单
```
□ 开仓价格_______
□ 止损价格_______应该是开仓价的±15%左右)
□ 止盈价格_______应该是止损距离的4倍
□ 实际杠杆_______应该是8倍左右
□ 保证金占比_______应该≤1.5%
□ 24H成交量_______应该≥3000万美元
✅ 如果以上都符合,说明配置生效正确
❌ 如果有异常,立即暂停交易并检查日志
```
### 异常判断标准
如果出现以下情况,**立即暂停交易**
- ❌ 止损距离 < 10% > 20%
- ❌ 盈亏比 < 3:1
- ❌ 单笔保证金 > 2%
- ❌ 杠杆 > 12倍
- ❌ 同时持仓 > 4个
- ❌ 交易的币种24H成交量 < 2000万美元
- ❌ 触发止损但仍在持仓(说明止损未生效)
---
## 🔍 常见问题排查
### Q1应用后没有新交易
**可能原因:**
1. 信号强度要求提高到7比之前更严格
2. 成交量要求≥3000万美元筛选更严格
3. 当前市场不满足趋势条件
**解决方案:**
- 查看推荐页面,确认是否有新推荐生成
- 如果长期没有交易,可以临时降低`MIN_SIGNAL_STRENGTH`到6
- 检查当前BTC/ETH是否处于趋势中
### Q2止损触发太频繁
**可能原因:**
- 选择的币种波动过大
- ATR_STOP_LOSS_MULTIPLIER太小
**解决方案:**
- 提高`ATR_STOP_LOSS_MULTIPLIER`到2.2或2.5
- 检查交易的币种是否都是高流动性币种
- 避免在异常波动期间交易
### Q3盈利单无法达到TP260%
**可能原因:**
- 盈亏比4:1对当前市场环境过高
**解决方案:**
- 观察3-5天后的实际情况
- 如果TP2触发率 < 10%可以降低到3.5:1或3.0:1
- 关注移动止损是否正常激活盈利30%时)
### Q4界面上找不到"山寨币狙击"按钮?
**可能原因:**
- 前端未重新构建
**解决方案:**
```bash
cd /www/wwwroot/autosys_new/frontend
npm run build
# 然后刷新浏览器页面Ctrl+F5 强制刷新)
```
---
## 📊 实时监控建议
### 每日检查5分钟
1. 查看**交易记录页面**
- 今日交易笔数应该≤5笔
- 胜率目标35-40%
- 盈亏比目标3.5:1 - 4.5:1
2. 查看**持仓页面**
- 当前持仓数量应该≤4个
- 总保证金占比应该≤12%
- 是否有持仓接近止损
3. 查看**仪表板**
- 今日盈亏
- 账户余额变化
- 是否有异常亏损
### 每周复盘30分钟
1. **导出交易记录**(交易记录页面有导出按钮)
2. **统计关键指标**
- 周胜率
- 周盈亏比
- 周期望值
- 最大单笔亏损
- 平均持仓时间
3. **调整参数**(如果需要):
- 胜率 < 30%提高`MIN_SIGNAL_STRENGTH`
- 盈亏比 < 3:1检查止盈设置
- 交易过少:降低`MIN_VOLUME_24H`到2000万
- 交易过多:提高`MIN_SIGNAL_STRENGTH`到8
---
## ⚠️ 山寨币交易铁律
遵守这些铁律,避免重大亏损:
### 1. 绝不扛单
```
亏损15%立即离场,不要幻想反弹。
山寨币趋势反转后很难回来。
```
### 2. 绝不加仓
```
山寨币没有"摊平成本",只有越亏越多。
单笔亏损就是单笔亏损,不要试图挽回。
```
### 3. 绝不做空低流通币
```
小币种容易被轧空暴涨100%+。
只做成交量≥3000万美元的主流山寨币。
```
### 4. 绝不信消息
```
只信价格和成交量。
技术信号 > 一切消息面。
```
### 5. 仓位永远小于主流币
```
单笔不超过1.5%总仓位不超过12%。
山寨币风险远高于BTC/ETH。
```
---
## 🎯 策略核心逻辑
### 止损策略:宽但坚决
```
逻辑:
- ATR倍数2.0 + 固定止损15%(哪个先触发用哪个)
- 不设持仓锁:触及止损立即离场
- 山寨币正常波动10-20%很常见,止损要容忍正常波动
- 但不能容忍趋势反转(反转后很难回来)
示例(做多):
- 开仓价0.5000
- ATR0.0122.4%
- ATR止损0.5000 - (0.012 × 2.0) = 0.476-4.8%
- 固定止损0.5000 × (1 - 0.15) = 0.425-15%
- 最终止损0.476取更宽的ATR止损
```
### 止盈策略:分批 + 移动止损
```
第一目标TP1盈亏比1:1
- 快速锁定30-50%利润
- 剩余仓位止损移至成本价(保本)
- 示例:止损-4.8% → 止盈+4.8%
第二目标TP2盈亏比4:1
- 剩余仓位追求大赢家
- 示例:止损-4.8% → 止盈+19.2%
移动止损:
- 盈利30%后自动激活
- 保护15%利润
- 给回撤足够空间,让利润奔跑
示例流程:
1. 开仓 @ 0.5000,止损 @ 0.476-4.8%
2. 涨到 0.5240+4.8%)→ 平仓50%剩余止损移至0.5000
3. 继续涨到 0.6500+30%)→ 移动止损激活保护15%利润
4. 涨到 0.5960+19.2%)→ TP2触发剩余50%全部平仓
5. 总收益50% × 4.8% + 50% × 19.2% = 12%
```
### 品种选择:流动性为王
```
合格山寨币必须满足:
✅ 24小时成交额 > 3000万美元流动性充足
✅ 市值排名前150避免垃圾币
✅ 波动率 ≥ 3%(有交易价值)
✅ 有明确趋势4小时+日线)
✅ 不在异常暴涨暴跌期间
不合格的币种会被自动过滤,不会出现在推荐中。
```
---
## 📱 界面视觉效果
应用后,在配置页面您会看到:
### 全局配置页面
```
┌─────────────────────────────────────────┐
│ ⭐ 山寨币高盈亏比狙击策略 │ ← 红色高亮边框
├─────────────────────────────────────────┤
│ 专为山寨币设计宽止损2.0×ATR+ │
│ 高盈亏比4:1+ 移动止损 + 严格流动性 │
│ 筛选。目标胜率35%,期望值+0.75%/笔。 │
├─────────────────────────────────────────┤
│ [ 山寨币狙击(高盈亏比)] ✓ │ ← 点击这里
└─────────────────────────────────────────┘
```
### 应用成功后
```
✅ 已应用山寨币狙击(高盈亏比)
所有配置已更新,请重启交易进程使配置生效。
```
---
## 🔄 如何切换回其他策略
如果山寨币策略不适合当前市场,可以随时切换:
### 推荐备用策略
1. **波段回归**:低频波段,纯限价单
- 适合:稳定的趋势市场
- 特点:更少交易,更高信号门槛
2. **成交优先**:减少漏单
- 适合:想要更多成交机会
- 特点:智能入场,更少撤单
3. **精选低频**:高胜率倾向
- 适合:追求高胜率
- 特点:更严格的筛选条件
切换方法:在同一页面点击其他策略按钮即可。
---
## 📊 性能跟踪表格
使用此表格记录策略表现(每周更新):
| 周次 | 交易笔数 | 胜率 | 盈亏比 | 总盈亏 | 期望值 | 备注 |
|------|---------|------|--------|--------|--------|------|
| 第1周 | | % | :1 | USDT | | |
| 第2周 | | % | :1 | USDT | | |
| 第3周 | | % | :1 | USDT | | |
| 第4周 | | % | :1 | USDT | | |
**目标达成标准:**
- ✅ 盈亏比 > 3.5
- ✅ 期望值 > 0.5
- ✅ 胜率 > 30%
---
## 💡 优化建议时间线
### 立即(今天)
- ✅ 应用山寨币策略配置
- ✅ 重启所有交易进程
- ✅ 监控前3笔交易
### 3天后
- 检查胜率是否≥30%
- 检查盈亏比是否≥3.5
- 如果盈亏比过低降低RISK_REWARD_RATIO到3.5
### 1周后
- 统计周胜率和周盈亏比
- 如果胜率 < 25%提高MIN_SIGNAL_STRENGTH到8
- 如果交易过少降低MIN_VOLUME_24H到2000万
### 1个月后
- 建立币种白名单/黑名单
- 实现按市值分级的动态参数
- 添加BTC趋势过滤增强
---
## 🎉 最终提醒
### 成功的关键
1. ✅ **严格遵守止损**15%必须离场
2. ✅ **分批止盈**TP1减仓TP2清仓
3. ✅ **不要恋战**:有利润就走,山寨币随时反转
4. ✅ **只做高流动性币种**≥3000万美元
5. ✅ **每日限制笔数**最多5笔少做多看
### 失败的陷阱
1. ❌ 扛单不止损
2. ❌ 亏损后加仓
3. ❌ 频繁交易低流动性币种
4. ❌ 不遵守仓位限制
5. ❌ 手动干预自动策略
---
**祝您交易顺利,长期稳定盈利!**
有任何问题,请及时查看日志或联系技术支持。

View File

@ -0,0 +1,293 @@
# 排查账户未下单问题指南
## 🔍 问题描述
account3 和 account4 今天一直没有下单,没有看到明显的报错日志。
## 📋 排查步骤
### 1. 检查进程是否在运行
```bash
# 检查 supervisor 状态
supervisorctl status auto_sys_acc3
supervisorctl status auto_sys_acc4
# 或者查看所有进程
supervisorctl status all | grep -E "acc3|acc4"
# 检查实际运行的进程
ps aux | grep -E "trading_system.*main" | grep -E "acc3|acc4"
```
**预期结果**
- ✅ `RUNNING` 状态,有 PID
- ❌ `FATAL`、`EXITED`、`BACKOFF` 表示进程异常
**如果进程未运行**
```bash
# 查看启动错误
supervisorctl tail -200 auto_sys_acc3 stderr
supervisorctl tail -200 auto_sys_acc4 stderr
# 尝试手动启动
supervisorctl start auto_sys_acc3
supervisorctl start auto_sys_acc4
```
---
### 2. 检查日志文件
```bash
# 查看最近的日志最后100行
tail -n 100 /www/wwwroot/autosys_new/logs/trading_3.log
tail -n 100 /www/wwwroot/autosys_new/logs/trading_4.log
# 查看今天的错误
grep -i "error" /www/wwwroot/autosys_new/logs/trading_3.log | tail -n 20
grep -i "error" /www/wwwroot/autosys_new/logs/trading_4.log | tail -n 20
# 查看警告
grep -i "warning" /www/wwwroot/autosys_new/logs/trading_3.log | tail -n 20
grep -i "warning" /www/wwwroot/autosys_new/logs/trading_4.log | tail -n 20
```
**关键日志检查点**
- ✅ 进程启动成功:`交易系统启动成功`、`币安客户端连接成功`
- ✅ 配置加载:`交易配置(当前策略)`、`单笔最大仓位`、`杠杆配置`
- ❌ API 错误:`API密钥未配置`、`API权限验证失败`、`连接失败`
- ❌ 配置错误:`配置加载失败`、`配置管理器初始化失败`
---
### 3. 检查市场扫描是否正常
```bash
# 查看最近的扫描活动
grep -E "开始扫描|扫描完成|等待.*秒后进行下次扫描" /www/wwwroot/autosys_new/logs/trading_3.log | tail -n 10
grep -E "开始扫描|扫描完成|等待.*秒后进行下次扫描" /www/wwwroot/autosys_new/logs/trading_4.log | tail -n 10
# 查看扫描到的交易对
grep -E "扫描到.*个交易对|处理交易对" /www/wwwroot/autosys_new/logs/trading_3.log | tail -n 20
grep -E "扫描到.*个交易对|处理交易对" /www/wwwroot/autosys_new/logs/trading_4.log | tail -n 20
```
**预期结果**
- ✅ 每 `SCAN_INTERVAL`默认3600秒=1小时有一次扫描
- ✅ 扫描到交易对并进行分析
- ❌ 如果没有扫描日志,说明扫描循环可能卡住或未启动
**如果扫描未执行**
- 检查 `SCAN_INTERVAL` 配置是否过大
- 检查是否有异常导致扫描循环中断
- 查看是否有 `等待 {SCAN_INTERVAL} 秒后进行下次扫描` 的日志
---
### 4. 检查交易信号生成
```bash
# 查看技术指标分析
grep -E "技术指标分析|交易信号|should_trade" /www/wwwroot/autosys_new/logs/trading_3.log | tail -n 30
grep -E "技术指标分析|交易信号|should_trade" /www/wwwroot/autosys_new/logs/trading_4.log | tail -n 30
# 查看为什么跳过交易
grep -E "跳过自动交易|仅生成推荐|不自动交易" /www/wwwroot/autosys_new/logs/trading_3.log | tail -n 20
grep -E "跳过自动交易|仅生成推荐|不自动交易" /www/wwwroot/autosys_new/logs/trading_4.log | tail -n 20
```
**常见跳过原因**
1. **趋势过滤**`❌ 4H趋势中性为提升胜率仅生成推荐不自动交易`
- **原因**`AUTO_TRADE_ONLY_TRENDING=True` 且 4H 趋势不是明确上涨/下跌
- **解决**:检查 `AUTO_TRADE_ALLOW_4H_NEUTRAL` 配置,或降低 `MIN_SIGNAL_STRENGTH`
2. **信号强度不足**`信号强度: X < MIN_SIGNAL_STRENGTH`
- **原因**:交易信号强度低于 `MIN_SIGNAL_STRENGTH`默认7
- **解决**:降低 `MIN_SIGNAL_STRENGTH` 或提高信号质量
3. **成交量不足**`成交量确认失败`
- **原因**24小时成交量低于 `MIN_VOLUME_24H``MIN_VOLUME_24H_STRICT`
- **解决**:检查成交量配置是否过严格
---
### 5. 检查风险控制是否阻止交易
```bash
# 查看风险检查结果
grep -E "风险检查|余额不足|仓位限制|最大持仓|每日限额" /www/wwwroot/autosys_new/logs/trading_3.log | tail -n 20
grep -E "风险检查|余额不足|仓位限制|最大持仓|每日限额" /www/wwwroot/autosys_new/logs/trading_4.log | tail -n 20
# 查看账户余额
grep -E "账户余额|余额|balance|可用余额" /www/wwwroot/autosys_new/logs/trading_3.log | tail -n 10
grep -E "账户余额|余额|balance|可用余额" /www/wwwroot/autosys_new/logs/trading_4.log | tail -n 10
```
**常见阻止原因**
1. **余额不足**`余额不足,无法开仓`、`可用余额: X USDT < 最小保证金`
- **解决**:检查账户余额,确保有足够的保证金
2. **持仓数量限制**`已达到最大持仓数量`、`当前持仓: X >= MAX_OPEN_POSITIONS`
- **解决**:检查 `MAX_OPEN_POSITIONS` 配置,或平掉部分持仓
3. **每日限额**`今日已开仓 X 次,达到每日限额`
- **解决**:检查 `MAX_DAILY_ENTRIES` 配置
4. **总仓位限制**`总仓位已超过上限`
- **解决**:检查 `MAX_TOTAL_POSITION_PERCENT` 配置
---
### 6. 检查配置是否正确
**前端检查**
1. 登录前端,进入 account3 和 account4 的配置页面
2. 检查以下关键配置项:
- ✅ `BINANCE_API_KEY``BINANCE_API_SECRET` 是否已配置
- ✅ `MIN_SIGNAL_STRENGTH`(信号强度阈值)
- ✅ `MAX_OPEN_POSITIONS`(最大持仓数)
- ✅ `MAX_DAILY_ENTRIES`(每日最大开仓次数)
- ✅ `AUTO_TRADE_ONLY_TRENDING`(是否只交易趋势行情)
- ✅ `AUTO_TRADE_ALLOW_4H_NEUTRAL`是否允许4H中性趋势交易
- ✅ `SCAN_INTERVAL`扫描间隔默认3600秒
**日志检查**
```bash
# 查看启动时的配置输出
grep -A 50 "交易配置(当前策略)" /www/wwwroot/autosys_new/logs/trading_3.log | head -n 60
grep -A 50 "交易配置(当前策略)" /www/wwwroot/autosys_new/logs/trading_4.log | head -n 60
```
---
### 7. 检查API连接和权限
```bash
# 查看API连接状态
grep -E "币安客户端|API|连接|权限|密钥" /www/wwwroot/autosys_new/logs/trading_3.log | tail -n 20
grep -E "币安客户端|API|连接|权限|密钥" /www/wwwroot/autosys_new/logs/trading_4.log | tail -n 20
# 查看API错误
grep -iE "api.*error|api.*fail|连接失败|权限" /www/wwwroot/autosys_new/logs/trading_3.log | tail -n 10
grep -iE "api.*error|api.*fail|连接失败|权限" /www/wwwroot/autosys_new/logs/trading_4.log | tail -n 10
```
**常见API问题**
1. **API密钥未配置**`API密钥未配置`、`API密钥未正确加载`
- **解决**:在前端配置页面设置 API 密钥
2. **API权限不足**`API权限验证失败`、`API密钥权限不足`
- **解决**检查币安API密钥是否启用了"合约交易"权限
3. **IP白名单**`IP地址不在白名单中`
- **解决**在币安API设置中添加服务器IP到白名单
---
### 8. 使用自动化排查脚本
```bash
# 运行自动化排查脚本
chmod +x check_accounts_no_trades.sh
./check_accounts_no_trades.sh
```
脚本会自动检查:
- ✅ 进程状态
- ✅ 最近日志
- ✅ 配置项
- ✅ 市场扫描活动
- ✅ 风险控制
- ✅ API连接
- ✅ 持仓状态
---
## 🎯 常见问题及解决方案
### 问题1进程运行但没有任何日志输出
**可能原因**
- 日志文件路径错误
- 日志级别设置过高只记录ERROR
- 进程卡在某个地方
**解决**
```bash
# 检查日志文件是否存在
ls -lh /www/wwwroot/autosys_new/logs/trading_*.log
# 检查进程是否真的在运行
ps aux | grep trading_system | grep -E "acc3|acc4"
# 重启进程
supervisorctl restart auto_sys_acc3
supervisorctl restart auto_sys_acc4
```
---
### 问题2有扫描日志但没有交易信号
**可能原因**
- 市场条件不满足交易策略
- `MIN_SIGNAL_STRENGTH` 设置过高
- `AUTO_TRADE_ONLY_TRENDING=True` 且市场趋势不明确
**解决**
1. 查看信号分析日志,确认是否有交易信号但被过滤
2. 临时降低 `MIN_SIGNAL_STRENGTH` 测试
3. 检查 `AUTO_TRADE_ALLOW_4H_NEUTRAL` 配置
---
### 问题3有交易信号但被风险控制阻止
**可能原因**
- 余额不足
- 已达到最大持仓数
- 已达到每日开仓限额
**解决**
1. 检查账户余额
2. 检查 `MAX_OPEN_POSITIONS` 和当前持仓数
3. 检查 `MAX_DAILY_ENTRIES` 和今日已开仓次数
---
### 问题4配置已修改但未生效
**可能原因**
- Redis缓存未更新
- 进程未重启
- 配置项名称错误
**解决**
1. 重启交易进程:`supervisorctl restart auto_sys_acc3`
2. 检查启动日志中的配置输出,确认配置已加载
3. 确认配置项名称正确(参考 `config.py` 中的定义)
---
## 📞 进一步排查
如果以上步骤都无法解决问题,请提供以下信息:
1. **进程状态**`supervisorctl status auto_sys_acc3 auto_sys_acc4`
2. **最近100行日志**`tail -n 100 /www/wwwroot/autosys_new/logs/trading_3.log`
3. **配置输出**:从启动日志中提取"交易配置(当前策略)"部分
4. **错误日志**`grep -i error /www/wwwroot/autosys_new/logs/trading_3.log | tail -n 20`
---
## ✅ 检查清单
- [ ] 进程是否在运行(`supervisorctl status`
- [ ] 日志文件是否存在且有新内容
- [ ] API密钥是否已配置
- [ ] 账户余额是否充足
- [ ] 市场扫描是否正常执行
- [ ] 是否有交易信号生成
- [ ] 风险控制是否阻止交易
- [ ] 配置是否正确加载
- [ ] 是否有错误或警告日志