From 83e628b6111068945c4de2789ef38e22fed33766 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=96=87=E8=96=87=E5=AE=89?= Date: Sun, 25 Jan 2026 16:32:08 +0800 Subject: [PATCH] a --- docs/亏损分析_ZENUSDT.md | 135 +++++++++++++ docs/市场扫描优化分析.md | 180 ++++++++++++++++++ docs/市场扫描优化完成总结.md | 127 +++++++++++++ docs/市场扫描深度分析.md | 253 +++++++++++++++++++++++++ docs/扫描效率优化完成总结.md | 153 +++++++++++++++ docs/扫描时间对齐分析.md | 202 ++++++++++++++++++++ docs/扫描时间差异分析.md | 210 ++++++++++++++++++++ docs/账户交易差异分析.md | 222 ++++++++++++++++++++++ 8 files changed, 1482 insertions(+) create mode 100644 docs/亏损分析_ZENUSDT.md create mode 100644 docs/市场扫描优化分析.md create mode 100644 docs/市场扫描优化完成总结.md create mode 100644 docs/市场扫描深度分析.md create mode 100644 docs/扫描效率优化完成总结.md create mode 100644 docs/扫描时间对齐分析.md create mode 100644 docs/扫描时间差异分析.md create mode 100644 docs/账户交易差异分析.md diff --git a/docs/亏损分析_ZENUSDT.md b/docs/亏损分析_ZENUSDT.md new file mode 100644 index 0000000..98ad199 --- /dev/null +++ b/docs/亏损分析_ZENUSDT.md @@ -0,0 +1,135 @@ +# 亏损分析 - ZENUSDT + +## 📊 当前情况 + +### 交易信息 + +``` +ZENUSDT [实时监控] 诊断: 亏损-10.19% of margin | +当前价: 9.6910 | +入场价: 9.8160 | +止损价: 9.6197 (目标: -16.00% of margin) | +方向: BUY | +是否触发: False | +监控状态: 运行中 +``` + +### 计算验证 + +**价格变化**: +- 入场价:9.8160 +- 当前价:9.6910 +- 价格跌幅 = (9.8160 - 9.6910) / 9.8160 = **1.27%** + +**保证金亏损**: +- 假设杠杆:8倍(山寨币策略默认) +- 保证金亏损 = 1.27% × 8 = **10.16%**(接近-10.19%) + +**止损价计算**: +- 止损价:9.6197 +- 止损距离 = 9.8160 - 9.6197 = 0.1963 +- 止损百分比(价格)= 0.1963 / 9.8160 = **2.00%** +- 止损目标(保证金)= 2.00% × 8 = **16.00%** + +--- + +## ✅ 是否正常? + +### 结论:**正常** ✅ + +**理由**: + +1. **亏损-10.19%是正常的市场波动** + - 价格只下跌了1.27%,这是正常的市场波动 + - 山寨币波动大,1-2%的价格波动很常见 + +2. **止损目标-16%符合策略配置** + - 山寨币策略配置:`STOP_LOSS_PERCENT = 15%`(固定止损) + - 实际止损目标-16%可能是因为: + - ATR止损计算的结果(`ATR_STOP_LOSS_MULTIPLIER = 2.0`) + - 止损价选择逻辑选择了ATR止损而不是固定止损 + - 16%接近15%,在合理范围内 + +3. **止损未触发是正常的** + - 当前亏损-10.19% < 止损目标-16% + - 止损机制正常工作,会在亏损达到-16%时触发 + +4. **符合山寨币策略设计** + - 山寨币策略设计:宽止损(15%)+ 高盈亏比(4:1) + - 允许较大的价格波动,避免被正常波动扫损 + +--- + +## 📈 止损价分析 + +### 止损价计算方式 + +根据山寨币策略配置: +- `STOP_LOSS_PERCENT = 15%`(固定止损15%) +- `ATR_STOP_LOSS_MULTIPLIER = 2.0`(ATR止损2.0倍) + +**实际止损价**:9.6197 +- 止损距离 = 9.8160 - 9.6197 = 0.1963 +- 止损百分比 = 0.1963 / 9.8160 = 2.00% +- 保证金亏损 = 2.00% × 8 = 16.00% + +**分析**: +- 如果使用固定止损15%,止损价应该是:9.8160 × (1 - 0.15/8) = 9.8160 × 0.98125 = 9.6315 +- 实际止损价9.6197 < 9.6315,说明可能使用了ATR止损 +- ATR止损可能计算出了更远的止损价(更宽松) + +--- + +## ⚠️ 需要注意的情况 + +### 1. 如果亏损继续扩大 + +**如果价格继续下跌**: +- 当前亏损:-10.19% +- 止损目标:-16.00% +- **还有5.81%的缓冲空间** + +**建议**: +- 如果亏损达到-15%,接近止损目标,可以关注 +- 如果亏损达到-16%,止损会自动触发 + +### 2. 如果止损未及时触发 + +**如果价格快速下跌,止损未及时触发**: +- 检查WebSocket监控是否正常工作 +- 检查止损单是否正常挂到交易所 +- 如果止损单失效,系统会通过WebSocket监控触发平仓 + +--- + +## 🎯 总结 + +### ✅ 当前情况:**正常** + +1. **亏损-10.19%是正常的市场波动** + - 价格只下跌了1.27%,这是正常的 + - 山寨币波动大,1-2%的价格波动很常见 + +2. **止损目标-16%符合策略配置** + - 接近15%的固定止损设置 + - 可能是ATR止损计算的结果 + +3. **止损机制正常工作** + - 当前亏损-10.19% < 止损目标-16% + - 止损会在亏损达到-16%时自动触发 + +4. **符合山寨币策略设计** + - 宽止损(15%)允许较大的价格波动 + - 避免被正常波动扫损 + +### 💡 建议 + +1. **继续观察**:如果亏损继续扩大,接近-15%时可以关注 +2. **信任策略**:止损机制正常工作,会在达到-16%时自动触发 +3. **不要手动干预**:除非系统故障,否则不要手动平仓 + +--- + +## ✅ 完成时间 + +2026-01-25 diff --git a/docs/市场扫描优化分析.md b/docs/市场扫描优化分析.md new file mode 100644 index 0000000..affd57f --- /dev/null +++ b/docs/市场扫描优化分析.md @@ -0,0 +1,180 @@ +# 市场扫描优化分析 + +## 🔍 当前情况 + +### 扫描流程 + +1. **获取所有USDT永续合约交易对**:544个 +2. **限制扫描数量**:150个(`MAX_SCAN_SYMBOLS=150`) +3. **初步筛选**:28个(通过最小涨跌幅和成交量过滤) +4. **最终选择**:5个(`TOP_N_SYMBOLS=5`) + +### 问题分析 + +#### 问题1:扫描150个,只取5个,是否合理? + +**当前逻辑**: +- 扫描前150个交易对(按币安返回顺序,可能不是按市值排序) +- 初步筛选后,28个需要详细分析 +- 最终只选择5个(按信号得分和涨跌幅排序) + +**问题**: +1. **可能错过好机会**: + - 如果前150个中没有包含某些优质山寨币,会错过 + - 如果信号得分排序不准确,可能错过更好的机会 + +2. **TOP_N_SYMBOLS=5 可能太少**: + - 山寨币策略配置:`MAX_OPEN_POSITIONS=4`(最多4个持仓) + - 如果只选择5个,可能不够 + - 建议:`TOP_N_SYMBOLS` 应该 >= `MAX_OPEN_POSITIONS * 1.5`(至少6-8个) + +#### 问题2:是否需要跳过主流币? + +**当前逻辑**: +- 没有过滤主流币(BTC、ETH、BNB等) +- 如果主流币出现在前150个中,会被扫描和分析 + +**问题**: +1. **山寨币策略不应该交易主流币**: + - 主流币波动小,不符合山寨币高盈亏比策略 + - 主流币流动性太好,价格冲击小,但也不容易有大波动 + +2. **主流币可能占用扫描名额**: + - 如果BTC、ETH出现在前150个中,会占用扫描和分析资源 + - 但最终可能因为信号强度不足而不交易 + +--- + +## ✅ 优化方案 + +### 方案1:过滤主流币(推荐) + +**实现**:在扫描前过滤掉主流币 + +**主流币列表**: +```python +MAJOR_COINS = {'BTCUSDT', 'ETHUSDT', 'BNBUSDT', 'SOLUSDT', 'XRPUSDT', 'ADAUSDT', 'DOGEUSDT', 'DOTUSDT', 'AVAXUSDT', 'MATICUSDT'} +``` + +**优点**: +- 专注于山寨币,符合策略定位 +- 节省扫描和分析资源 +- 避免主流币占用名额 + +**缺点**: +- 如果主流币出现异常波动,会错过(但这不是山寨币策略的目标) + +### 方案2:增加 TOP_N_SYMBOLS + +**当前**:`TOP_N_SYMBOLS=5` + +**建议**:增加到 `8-10` + +**理由**: +- `MAX_OPEN_POSITIONS=4`,需要更多候选 +- 增加选择余地,避免错过好机会 +- 即使选择8-10个,最终也可能只交易4个(受持仓限制) + +### 方案3:优化排序逻辑 + +**当前排序**: +```python +sorted_results = sorted( + filtered_results, + key=lambda x: ( + x.get('signalScore', 0) * 10, # 信号得分权重更高 + abs(x['changePercent']) # 其次考虑涨跌幅 + ), + reverse=True +) +``` + +**优化建议**: +1. **增加成交量权重**:成交量越大,流动性越好 +2. **增加波动率权重**:波动率越大,机会越大 +3. **排除主流币**:在排序前排除主流币 + +--- + +## 🎯 推荐配置 + +### 优化后的配置 + +```python +MAX_SCAN_SYMBOLS = 150 # 保持150个(覆盖主流山寨) +TOP_N_SYMBOLS = 8 # 增加到8个(给更多选择余地) +EXCLUDE_MAJOR_COINS = True # 排除主流币(新增配置) +MAJOR_COINS = ['BTCUSDT', 'ETHUSDT', 'BNBUSDT', 'SOLUSDT', 'XRPUSDT', 'ADAUSDT', 'DOGEUSDT', 'DOTUSDT', 'AVAXUSDT', 'MATICUSDT'] +``` + +**理由**: +1. **保持扫描150个**:覆盖主流山寨币 +2. **增加到8个候选**:给更多选择余地,避免错过好机会 +3. **排除主流币**:专注于山寨币,符合策略定位 + +--- + +## 🔧 实现方案 + +### 1. 添加主流币过滤 + +在 `market_scanner.py` 中添加主流币过滤逻辑: + +```python +# 主流币列表(山寨币策略应该排除) +MAJOR_COINS = {'BTCUSDT', 'ETHUSDT', 'BNBUSDT', 'SOLUSDT', 'XRPUSDT', + 'ADAUSDT', 'DOGEUSDT', 'DOTUSDT', 'AVAXUSDT', 'MATICUSDT', + 'LINKUSDT', 'UNIUSDT', 'ATOMUSDT', 'ETCUSDT', 'LTCUSDT'} + +# 在扫描前过滤主流币 +if cfg.get('EXCLUDE_MAJOR_COINS', True): + symbols = [s for s in symbols if s not in MAJOR_COINS] + logger.info(f"排除主流币后,剩余 {len(symbols)} 个交易对") +``` + +### 2. 增加 TOP_N_SYMBOLS + +在配置中增加 `TOP_N_SYMBOLS` 到 8: + +```python +TOP_N_SYMBOLS = 8 # 从5增加到8,给更多选择余地 +``` + +### 3. 优化排序逻辑 + +增加成交量和波动率权重: + +```python +sorted_results = sorted( + filtered_results, + key=lambda x: ( + x.get('signalScore', 0) * 10, # 信号得分权重最高 + abs(x['changePercent']) * 2, # 涨跌幅权重 + x.get('volume24h', 0) / 1000000, # 成交量权重(百万美元) + x.get('volatility', 0) * 100 # 波动率权重 + ), + reverse=True +) +``` + +--- + +## 📊 预期效果 + +### 优化前 + +- 扫描150个,可能包含主流币 +- 最终选择5个 +- 可能错过好机会 + +### 优化后 + +- 扫描150个,排除主流币,专注于山寨币 +- 最终选择8个,给更多选择余地 +- 减少错过好机会的概率 + +--- + +## ✅ 完成时间 + +2026-01-25 diff --git a/docs/市场扫描优化完成总结.md b/docs/市场扫描优化完成总结.md new file mode 100644 index 0000000..1af8681 --- /dev/null +++ b/docs/市场扫描优化完成总结.md @@ -0,0 +1,127 @@ +# 市场扫描优化完成总结 + +## ✅ 已完成的优化 + +### 1. 添加主流币过滤 + +**实现位置**:`trading_system/market_scanner.py` + +**功能**: +- 在扫描前过滤掉主流币(BTC、ETH、BNB等) +- 专注于山寨币,符合策略定位 + +**主流币列表**(20个): +```python +major_coins = { + 'BTCUSDT', 'ETHUSDT', 'BNBUSDT', 'SOLUSDT', 'XRPUSDT', + 'ADAUSDT', 'DOGEUSDT', 'DOTUSDT', 'AVAXUSDT', 'MATICUSDT', + 'LINKUSDT', 'UNIUSDT', 'ATOMUSDT', 'ETCUSDT', 'LTCUSDT', + 'NEARUSDT', 'APTUSDT', 'ARBUSDT', 'OPUSDT', 'SUIUSDT' +} +``` + +**配置项**: +- `EXCLUDE_MAJOR_COINS`: `True`(默认开启) + +### 2. 增加 TOP_N_SYMBOLS + +**优化前**:`TOP_N_SYMBOLS = 5` + +**优化后**:`TOP_N_SYMBOLS = 8` + +**理由**: +- `MAX_OPEN_POSITIONS=4`,需要更多候选 +- 增加选择余地,避免错过好机会 +- 即使选择8个,最终也可能只交易4个(受持仓限制) + +### 3. 更新配置 + +**已更新的文件**: +1. `trading_system/config.py` - 默认配置 +2. `trading_system/market_scanner.py` - 扫描逻辑 +3. `backend/config_manager.py` - 配置管理器 +4. `backend/api/routes/config.py` - API配置元数据 +5. `frontend/src/components/GlobalConfig.jsx` - 前端全局配置 +6. `frontend/src/components/ConfigPanel.jsx` - 前端用户配置 + +--- + +## 📊 优化效果 + +### 优化前 + +- 扫描150个交易对,可能包含主流币 +- 最终选择5个 +- 可能错过好机会(选择太少) +- 主流币占用扫描资源 + +### 优化后 + +- 扫描150个交易对,**排除主流币**,专注于山寨币 +- 最终选择**8个**,给更多选择余地 +- 减少错过好机会的概率 +- 节省扫描和分析资源 + +--- + +## 🎯 预期改进 + +### 1. 更专注于山寨币 + +- 排除主流币后,扫描结果更符合山寨币策略 +- 避免主流币占用扫描名额 + +### 2. 增加交易机会 + +- `TOP_N_SYMBOLS` 从5增加到8,给更多选择余地 +- 即使选择8个,最终也可能只交易4个(受持仓限制) +- 减少错过好机会的概率 + +### 3. 提高效率 + +- 排除主流币后,减少不必要的扫描和分析 +- 专注于有潜力的山寨币 + +--- + +## 🔧 配置说明 + +### EXCLUDE_MAJOR_COINS + +- **类型**:`boolean` +- **默认值**:`True` +- **说明**:是否排除主流币(BTC、ETH、BNB等),专注于山寨币 +- **建议**:山寨币策略建议开启 + +### TOP_N_SYMBOLS + +- **类型**:`number` +- **默认值**:`8`(从5增加到8) +- **说明**:每次扫描后处理的交易对数量 +- **建议**:应该 >= `MAX_OPEN_POSITIONS * 1.5`(至少6-8个) + +--- + +## 🚀 下一步操作 + +1. **重启交易进程**: + ```bash + supervisorctl restart auto_sys_acc1 auto_sys_acc2 auto_sys_acc3 auto_sys_acc4 + ``` + +2. **验证优化**: + ```bash + # 查看日志,确认主流币被排除 + tail -f /www/wwwroot/autosys_new/logs/trading_*.log | grep -E "排除主流币|扫描完成" + ``` + +3. **观察效果**: + - 观察扫描结果是否更专注于山寨币 + - 观察是否增加了交易机会 + - 观察是否减少了错过好机会的情况 + +--- + +## ✅ 完成时间 + +2026-01-25 diff --git a/docs/市场扫描深度分析.md b/docs/市场扫描深度分析.md new file mode 100644 index 0000000..4041946 --- /dev/null +++ b/docs/市场扫描深度分析.md @@ -0,0 +1,253 @@ +# 市场扫描深度分析 + +## 🤔 问题1:过滤掉主流币会更有利吗? + +### 分析维度 + +#### 1. 策略定位分析 + +**山寨币策略的特点**: +- **高盈亏比(4:1)**:追求大赢家,用少数大单覆盖亏损 +- **宽止损(15%)**:容忍山寨币高波动 +- **快速止盈(60%)**:不恋战,快速锁定利润 +- **严格筛选**:只做流动性最好、信号最强的币种 + +**主流币的特点**: +- **波动小**:BTC、ETH 波动率通常 < 2%,不符合山寨币策略的宽止损设计 +- **流动性极好**:价格冲击小,但也不容易有大波动 +- **趋势稳定**:不容易出现暴涨暴跌,不符合"快速止盈"的设计 + +**结论**:✅ **过滤主流币更有利** + +**理由**: +1. **策略不匹配**:主流币波动小,不符合山寨币策略的宽止损+高盈亏比设计 +2. **机会成本**:扫描主流币占用资源,可能错过更好的山寨币机会 +3. **专注性**:专注于山寨币,策略更清晰 + +--- + +#### 2. 实际交易表现分析 + +**主流币 vs 山寨币的交易表现**: + +| 指标 | 主流币(BTC/ETH) | 山寨币 | +|------|------------------|--------| +| **波动率** | 1-3% | 5-20% | +| **盈亏比潜力** | 1.5:1 | 4:1+ | +| **止损触发率** | 低(波动小) | 高(波动大) | +| **止盈触发率** | 低(波动小) | 高(波动大) | +| **适合策略** | 波段/长期持有 | 高盈亏比狙击 | + +**结论**:✅ **过滤主流币更有利** + +**理由**: +- 主流币波动小,很难达到4:1的盈亏比目标 +- 山寨币波动大,更容易出现暴涨,更容易达到4:1的盈亏比目标 + +--- + +#### 3. 资源利用分析 + +**扫描资源分配**: + +**过滤主流币前**: +- 扫描150个交易对 +- 可能包含10-20个主流币 +- 实际山寨币:130-140个 + +**过滤主流币后**: +- 扫描150个交易对(排除主流币) +- 实际山寨币:150个 +- **增加10-20个山寨币的扫描机会** + +**结论**:✅ **过滤主流币更有利** + +**理由**: +- 增加10-20个山寨币的扫描机会 +- 更专注于有潜力的山寨币 +- 提高找到优质机会的概率 + +--- + +### 综合结论:过滤主流币更有利 ✅ + +**理由总结**: +1. **策略匹配**:主流币不符合山寨币策略的宽止损+高盈亏比设计 +2. **机会成本**:扫描主流币占用资源,可能错过更好的山寨币机会 +3. **资源利用**:过滤主流币后,增加10-20个山寨币的扫描机会 +4. **专注性**:专注于山寨币,策略更清晰 + +--- + +## 🤔 问题2:只扫描150个少吗? + +### 分析维度 + +#### 1. 市场覆盖分析 + +**币安USDT永续合约总数**:544个 + +**扫描150个的覆盖率**: +- 覆盖率:150/544 = **27.6%** +- 剩余未扫描:394个(72.4%) + +**问题**: +- 如果按币安默认顺序,前150个可能包含: + - 主流币(10-20个) + - 中等市值币(50-80个) + - 小市值币(50-80个) + +**可能错过的机会**: +- 如果优质山寨币不在前150个中,会错过 +- 如果按市值排序,小市值优质币可能被排除 + +**结论**:⚠️ **可能不够,取决于排序方式** + +--- + +#### 2. 筛选效率分析 + +**当前筛选流程**: +1. 扫描150个交易对 +2. 初步筛选:28个(通过最小涨跌幅和成交量) +3. 详细分析:28个(获取K线和技术指标) +4. 最终选择:5-8个(按信号得分排序) + +**筛选比例**: +- 初步筛选:28/150 = 18.7% +- 最终选择:5-8/150 = 3.3-5.3% + +**分析**: +- 如果扫描150个,最终只选择5-8个,说明筛选很严格 +- 如果增加扫描数量,可能找到更多符合条件的交易对 + +**结论**:⚠️ **可能不够,建议增加到200-250** + +--- + +#### 3. 性能影响分析 + +**扫描150个的性能**: +- API请求:批量获取24小时行情(1次) +- 详细分析:28个交易对(获取K线和技术指标) +- 总耗时:约10-30秒 + +**如果增加到250个**: +- API请求:批量获取24小时行情(1次,数据量增加) +- 初步筛选:可能50-60个 +- 详细分析:50-60个交易对 +- 总耗时:约20-60秒 + +**分析**: +- 性能影响:增加扫描数量会增加扫描时间,但仍在可接受范围内 +- 收益:可能找到更多优质机会 + +**结论**:✅ **可以增加到200-250,性能影响可接受** + +--- + +#### 4. 机会成本分析 + +**扫描150个 vs 250个**: + +| 指标 | 150个 | 250个 | +|------|-------|-------| +| **覆盖率** | 27.6% | 46.0% | +| **初步筛选** | 28个 | 50-60个 | +| **最终选择** | 5-8个 | 8-12个 | +| **扫描时间** | 10-30秒 | 20-60秒 | +| **错过机会** | 可能错过 | 减少错过 | + +**分析**: +- 增加扫描数量,可能找到更多优质机会 +- 扫描时间增加,但仍在可接受范围内(1小时扫描间隔) +- 减少错过好机会的概率 + +**结论**:✅ **建议增加到200-250** + +--- + +### 综合结论:150个可能不够,建议增加到200-250 ✅ + +**理由总结**: +1. **覆盖率不足**:150/544 = 27.6%,可能错过72.4%的机会 +2. **筛选效率**:如果增加扫描数量,可能找到更多符合条件的交易对 +3. **性能影响可接受**:扫描时间增加,但1小时扫描间隔足够 +4. **机会成本**:减少错过好机会的概率 + +--- + +## 🎯 推荐配置 + +### 优化后的配置 + +```python +MAX_SCAN_SYMBOLS = 250 # 从150增加到250(增加覆盖率) +TOP_N_SYMBOLS = 8 # 保持8个(给更多选择余地) +EXCLUDE_MAJOR_COINS = True # 排除主流币(专注于山寨币) +``` + +**理由**: +1. **增加覆盖率**:250/544 = 46.0%,减少错过机会的概率 +2. **保持专注**:排除主流币,专注于山寨币 +3. **给更多选择**:TOP_N_SYMBOLS=8,给更多选择余地 + +--- + +## 📊 预期效果 + +### 优化前 + +- 扫描150个,可能包含主流币 +- 覆盖率:27.6% +- 最终选择:5个 +- 可能错过好机会 + +### 优化后 + +- 扫描250个,排除主流币,专注于山寨币 +- 覆盖率:46.0%(增加18.4%) +- 最终选择:8个 +- 减少错过好机会的概率 + +--- + +## ⚠️ 注意事项 + +### 1. 排序方式 + +**问题**:如果按币安默认顺序,前250个可能不是最优的 + +**建议**: +- 如果可能,按24小时成交量排序 +- 或者按市值排序,但排除主流币 + +### 2. 性能影响 + +**扫描时间**: +- 150个:10-30秒 +- 250个:20-60秒 + +**影响**: +- 扫描时间增加,但1小时扫描间隔足够 +- 性能影响可接受 + +### 3. 筛选严格性 + +**当前筛选**: +- 初步筛选:28/150 = 18.7% +- 最终选择:5-8/150 = 3.3-5.3% + +**如果增加到250个**: +- 初步筛选:可能50-60个(20-24%) +- 最终选择:8-12个(3.2-4.8%) + +**分析**: +- 筛选比例基本一致,说明筛选逻辑合理 +- 增加扫描数量,可能找到更多符合条件的交易对 + +--- + +## ✅ 完成时间 + +2026-01-25 diff --git a/docs/扫描效率优化完成总结.md b/docs/扫描效率优化完成总结.md new file mode 100644 index 0000000..200e320 --- /dev/null +++ b/docs/扫描效率优化完成总结.md @@ -0,0 +1,153 @@ +# 扫描效率优化完成总结 + +## ✅ 已完成的优化 + +### 1. 增加 MAX_SCAN_SYMBOLS + +**优化前**:`MAX_SCAN_SYMBOLS = 150` +**优化后**:`MAX_SCAN_SYMBOLS = 250` + +**效果**: +- 覆盖率:从 27.6% 提升到 **46.0%**(增加 18.4%) +- 减少错过好机会的概率 + +**已更新的文件**: +1. `trading_system/config.py` - 默认配置 +2. `backend/config_manager.py` - 配置管理器 +3. `frontend/src/components/GlobalConfig.jsx` - 前端全局配置 +4. `frontend/src/components/ConfigPanel.jsx` - 前端用户配置 + +--- + +### 2. 优化缓存机制 + +#### 2.1 增加24小时行情数据缓存TTL + +**优化位置**:`trading_system/binance_client.py` + +**优化前**:`TTL: 30秒` +**优化后**:`TTL: 60秒` + +**理由**: +- 24小时行情数据变化较慢,可以缓存更长时间 +- 多个账户可以共用同一个缓存,减少API请求 +- 提升扫描效率 + +#### 2.2 添加技术指标计算结果缓存 + +**优化位置**:`trading_system/market_scanner.py` + +**功能**: +- 缓存技术指标计算结果(RSI、MACD、布林带、ATR、EMA等) +- 基于K线数据的最后更新时间判断缓存是否有效 +- 如果K线数据没有更新,直接使用缓存的技术指标 + +**缓存键**:`indicators:{symbol}:{primary_interval}:{confirm_interval}` + +**缓存TTL**:30秒(与K线缓存一致) + +**效果**: +- 减少重复计算技术指标的开销 +- 多个账户可以共用同一个缓存 +- 提升扫描效率(特别是扫描250个交易对时) + +--- + +## 📊 性能提升 + +### 优化前 + +**扫描150个交易对**: +- 获取24小时行情:1次API请求(缓存30秒) +- 详细分析28个:28次K线API请求(有缓存) +- 计算技术指标:28次计算(无缓存,每次都计算) +- **总耗时**:约10-30秒 + +### 优化后 + +**扫描250个交易对**: +- 获取24小时行情:1次API请求(缓存60秒,多个账户共用) +- 详细分析50-60个:50-60次K线API请求(有缓存,多个账户共用) +- 计算技术指标:50-60次计算(有缓存,多个账户共用) +- **总耗时**:约15-40秒(虽然扫描数量增加,但缓存优化减少了实际计算时间) + +**性能提升**: +- 24小时行情缓存TTL增加,减少API请求 +- 技术指标计算结果缓存,减少重复计算 +- 多个账户可以共用缓存,进一步提升效率 + +--- + +## 🎯 缓存策略 + +### 1. 24小时行情数据缓存 + +- **缓存键**:`ticker_24h:all` +- **TTL**:60秒 +- **共享**:所有账户共用 +- **更新频率**:每60秒更新一次 + +### 2. K线数据缓存 + +- **缓存键**:`klines:{symbol}:{interval}:{limit}` +- **TTL**:根据interval动态设置(1h=60秒,4h=300秒) +- **共享**:所有账户共用 +- **更新频率**:根据interval动态更新 + +### 3. 技术指标计算结果缓存 + +- **缓存键**:`indicators:{symbol}:{primary_interval}:{confirm_interval}` +- **TTL**:30秒 +- **共享**:所有账户共用 +- **更新频率**:当K线数据更新时自动失效 + +--- + +## 📈 预期效果 + +### 1. 扫描覆盖率提升 + +- **优化前**:150/544 = 27.6% +- **优化后**:250/544 = **46.0%**(增加18.4%) +- **效果**:减少错过好机会的概率 + +### 2. 扫描效率提升 + +- **优化前**:每次扫描都需要重新计算技术指标 +- **优化后**:技术指标计算结果缓存,减少重复计算 +- **效果**:虽然扫描数量增加,但实际耗时增加不多 + +### 3. 多账户效率提升 + +- **优化前**:每个账户独立扫描,重复计算 +- **优化后**:多个账户共用缓存,减少重复计算 +- **效果**:多个账户同时扫描时,效率显著提升 + +--- + +## 🚀 下一步操作 + +1. **重启交易进程**: + ```bash + supervisorctl restart auto_sys_acc1 auto_sys_acc2 auto_sys_acc3 auto_sys_acc4 + ``` + +2. **验证优化**: + ```bash + # 查看日志,确认扫描数量增加到250 + tail -f /www/wwwroot/autosys_new/logs/trading_*.log | grep -E "限制扫描数量|排除主流币|扫描完成" + + # 查看缓存使用情况 + tail -f /www/wwwroot/autosys_new/logs/trading_*.log | grep -E "使用缓存|已缓存|从Redis缓存" + ``` + +3. **观察效果**: + - 观察扫描时间是否在可接受范围内(15-40秒) + - 观察是否找到了更多优质机会 + - 观察缓存命中率 + +--- + +## ✅ 完成时间 + +2026-01-25 diff --git a/docs/扫描时间对齐分析.md b/docs/扫描时间对齐分析.md new file mode 100644 index 0000000..bfcd3af --- /dev/null +++ b/docs/扫描时间对齐分析.md @@ -0,0 +1,202 @@ +# 扫描时间对齐分析 + +## 🤔 问题:是否需要对齐扫描时间? + +### 当前情况 + +- **account2**:下单胜率高,单子多 +- **account3/account4**:下单很少,没有止盈 + +**可能原因**: +- 不同账户在不同时间启动,导致扫描时间不同 +- 扫描时间不同,可能错过最佳入场时机 + +--- + +## ⚖️ 对齐时间 vs 不对齐时间 + +### 方案1:对齐扫描时间(所有账户在同一时间扫描) + +#### ✅ 优点 + +1. **机会均等** + - 所有账户在同一时间扫描,机会均等 + - 避免因启动时间不同导致的差异 + +2. **结果一致** + - 扫描结果更一致,便于对比分析 + - 所有账户看到相同的市场状态 + +3. **可预测性** + - 扫描时间可预测(如每小时的整点) + - 便于监控和调试 + +4. **公平性** + - 所有账户在同一时间点看到相同的交易机会 + - 避免"先到先得"的不公平 + +#### ❌ 缺点 + +1. **减少多变性** + - 所有账户在同一时间扫描,可能都扫描到相同的交易对 + - 如果市场在某个时间点出现好机会,所有账户都会同时下单 + +2. **订单竞争** + - 多个账户同时下单同一个币种,可能导致: + - 订单竞争(如果多个账户都想买同一个币种) + - 价格冲击(大量订单同时进入市场) + - 滑点增加 + +3. **市场冲击** + - 如果多个账户同时下单,可能对市场价格造成冲击 + - 特别是在小市值币种上,影响更明显 + +4. **缺乏分散** + - 所有账户在同一时间点操作,缺乏时间分散 + - 如果市场在某个时间点出现异常,所有账户都会受影响 + +--- + +### 方案2:不对齐扫描时间(保持当前逻辑) + +#### ✅ 优点 + +1. **增加多变性** + - 不同账户在不同时间扫描,可能扫描到不同的交易对 + - 增加交易机会的多样性 + +2. **分散订单时间** + - 订单时间分散,减少价格冲击 + - 避免多个账户同时下单导致的滑点 + +3. **风险分散** + - 如果某个账户错过了机会,其他账户可能在不同时间捕捉到 + - 如果市场在某个时间点出现异常,不会所有账户都受影响 + +4. **更接近真实交易** + - 真实交易中,不同交易者也会在不同时间入场 + - 不对齐时间更符合市场实际情况 + +#### ❌ 缺点 + +1. **机会不均等** + - 不同账户在不同时间扫描,机会不均等 + - 某些账户可能因为启动时间差而错过最佳入场时机 + +2. **难以对比分析** + - 因为扫描时间不同,难以对比不同账户的表现 + - 可能误判为配置问题,实际上是扫描时间问题 + +3. **可能错过机会** + - 如果某个账户在信号最强时扫描并下单 + - 其他账户在信号减弱后扫描,可能信号强度不足 + +--- + +## 🎯 推荐方案 + +### 推荐:**不对齐扫描时间**(保持当前逻辑) + +**理由**: + +1. **减少市场冲击** + - 多个账户同时下单可能导致价格冲击和滑点 + - 分散订单时间更有利于执行 + +2. **增加多变性** + - 不同账户在不同时间扫描,可能捕捉到不同的交易机会 + - 增加交易机会的多样性 + +3. **风险分散** + - 如果市场在某个时间点出现异常,不会所有账户都受影响 + - 分散风险更有利于整体稳定性 + +4. **更符合实际情况** + - 真实交易中,不同交易者也会在不同时间入场 + - 不对齐时间更符合市场实际情况 + +--- + +## 🔍 当前问题的真正原因 + +### 可能不是扫描时间问题 + +如果 account3/account4 下单很少,可能的原因: + +1. **配置差异** + - `MIN_SIGNAL_STRENGTH` 设置不同 + - `AUTO_TRADE_ALLOW_4H_NEUTRAL` 设置不同 + - 其他配置项不同 + +2. **账户余额不足** + - 余额不足,无法满足最小仓位要求 + - 已达到最大持仓数或每日限额 + +3. **市场时机** + - 启动时市场状态不佳 + - 扫描到的信号强度不足 + +4. **风险控制限制** + - 已达到每日开仓限额 + - 已达到最大持仓数 + +--- + +## ✅ 建议 + +### 1. 保持不对齐扫描时间 + +**理由**: +- 减少市场冲击 +- 增加多变性 +- 风险分散 + +### 2. 检查配置差异 + +**重点检查**: +- `MIN_SIGNAL_STRENGTH`:是否一致 +- `AUTO_TRADE_ALLOW_4H_NEUTRAL`:是否一致 +- `TOP_N_SYMBOLS`:是否一致 +- 其他关键配置项 + +### 3. 检查账户余额 + +**检查项**: +- 账户余额是否充足 +- 是否满足最小仓位要求 +- 是否已达到最大持仓数或每日限额 + +### 4. 检查市场扫描结果 + +**检查项**: +- 扫描到的交易对数量 +- 信号强度分布 +- 被过滤的原因 + +--- + +## 📊 结论 + +### 不建议对齐扫描时间 + +**理由**: +1. **减少市场冲击**:分散订单时间更有利于执行 +2. **增加多变性**:不同账户在不同时间扫描,可能捕捉到不同的交易机会 +3. **风险分散**:如果市场在某个时间点出现异常,不会所有账户都受影响 +4. **更符合实际情况**:真实交易中,不同交易者也会在不同时间入场 + +### 当前问题的真正原因 + +**更可能是配置差异,而不是扫描时间问题** + +**建议**: +1. 检查 account3/account4 的配置是否与 account2 一致 +2. 检查账户余额是否充足 +3. 检查风险控制限制 +4. 检查市场扫描结果 + +--- + +## ✅ 完成时间 + +2026-01-25 diff --git a/docs/扫描时间差异分析.md b/docs/扫描时间差异分析.md new file mode 100644 index 0000000..f299c7c --- /dev/null +++ b/docs/扫描时间差异分析.md @@ -0,0 +1,210 @@ +# 扫描时间差异分析 + +## 🔍 问题分析 + +### 扫描逻辑 + +根据代码(`trading_system/strategy.py`): +1. **启动后立即执行第一次扫描** +2. **扫描完成后,等待 `SCAN_INTERVAL` 秒(默认3600秒=1小时)** +3. **然后执行下一次扫描** + +### 问题场景 + +如果不同账户在不同时间启动: + +**示例**: +- **account2** 在 10:00 启动 + - 第一次扫描:10:00 + - 下次扫描:11:00 + - 再下次:12:00 + +- **account3** 在 10:30 启动 + - 第一次扫描:10:30 + - 下次扫描:11:30 + - 再下次:12:30 + +- **account4** 在 11:00 启动 + - 第一次扫描:11:00 + - 下次扫描:12:00 + - 再下次:13:00 + +### 影响分析 + +#### 1. 扫描时间不同导致的问题 + +**问题**: +- 不同账户在不同时间扫描市场 +- 可能扫描到不同的交易对(市场在变化) +- 可能扫描到不同的信号强度 +- 可能错过某些交易机会 + +**示例**: +- 10:00 时,BTCUSDT 出现强信号(信号强度8) +- account2 在 10:00 扫描,发现并下单 +- account3 在 10:30 扫描,BTCUSDT 信号可能已经减弱(信号强度5) +- account3 可能因为信号强度不足而跳过 + +#### 2. 为什么 account3/account4 下单少? + +**可能原因**: +1. **扫描时间不同,错过了最佳入场时机** + - account2 在信号最强时扫描并下单 + - account3/account4 在信号减弱后扫描,信号强度不足 + +2. **市场变化导致信号过滤** + - 10:00 时市场状态是 `trending` + - 10:30 时市场状态可能变成 `ranging` 或 `neutral` + - 如果 `AUTO_TRADE_ONLY_TRENDING=True`,会被过滤 + +3. **4H趋势变化** + - 10:00 时 4H 趋势是 `up` + - 10:30 时 4H 趋势可能变成 `neutral` + - 如果 `AUTO_TRADE_ALLOW_4H_NEUTRAL=False`(旧配置),会被过滤 + +#### 3. 为什么没有止盈? + +**可能原因**: +1. **持仓很少** + - 如果下单很少,持仓自然就少 + - 没有持仓,就没有止盈机会 + +2. **止盈价设置过高** + - 如果止盈价设置过高,价格未达到 + - 例如:止盈价60%,但价格只涨了30% + +3. **移动止损过早触发** + - 如果移动止损过早触发,可能在达到止盈前就被平仓 + +4. **手动平仓干扰** + - 如果手动平仓过早,可能导致止盈未触发 + +--- + +## ✅ 解决方案 + +### 方案1:同步扫描时间(推荐) + +**思路**:让所有账户在相同的时间点扫描市场 + +**实现方式**: +1. **对齐到整点**:所有账户在整点(如 10:00、11:00、12:00)扫描 +2. **对齐到固定间隔**:所有账户在固定间隔(如每小时的0分、30分)扫描 + +**修改代码**: +```python +# 在 strategy.py 中,修改等待逻辑 +scan_interval = config.TRADING_CONFIG.get('SCAN_INTERVAL', 3600) + +# 计算到下一个整点的时间 +now = datetime.now() +next_hour = (now.replace(minute=0, second=0, microsecond=0) + timedelta(hours=1)) +wait_seconds = (next_hour - now).total_seconds() + +logger.info(f"等待到下一个整点({next_hour.strftime('%H:%M:%S')})进行扫描,剩余 {wait_seconds:.0f} 秒...") +await asyncio.sleep(wait_seconds) +``` + +**优点**: +- 所有账户在同一时间扫描,机会均等 +- 避免因扫描时间不同导致的差异 + +**缺点**: +- 需要等待到下一个整点,可能延迟第一次扫描 + +### 方案2:缩短扫描间隔 + +**思路**:缩短 `SCAN_INTERVAL`,让扫描更频繁 + +**实现方式**: +- 将 `SCAN_INTERVAL` 从 3600 秒(1小时)改为 1800 秒(30分钟)或更短 + +**优点**: +- 扫描更频繁,减少错过机会的概率 +- 不同账户的扫描时间差异影响更小 + +**缺点**: +- 增加API调用频率 +- 可能增加系统负载 + +### 方案3:保持现状,但优化配置 + +**思路**:保持扫描时间不同,但优化配置以减少差异 + +**实现方式**: +1. **降低信号强度阈值**:`MIN_SIGNAL_STRENGTH` 从 7 降到 5 +2. **允许4H中性趋势**:`AUTO_TRADE_ALLOW_4H_NEUTRAL=True` +3. **允许震荡行情**:`AUTO_TRADE_ONLY_TRENDING=False`(不推荐) + +**优点**: +- 不需要修改代码 +- 可以立即生效 + +**缺点**: +- 仍然存在扫描时间差异 +- 可能降低信号质量 + +--- + +## 🎯 推荐方案 + +### 推荐:方案1(同步扫描时间) + +**理由**: +1. **公平性**:所有账户在同一时间扫描,机会均等 +2. **一致性**:扫描结果更一致,便于对比分析 +3. **可预测性**:扫描时间可预测,便于监控 + +**实现步骤**: +1. 修改 `trading_system/strategy.py`,让扫描时间对齐到整点 +2. 重启所有交易进程 +3. 观察效果 + +--- + +## 📊 当前情况分析 + +### account2 表现好 + +**可能原因**: +1. **启动时间好**:在信号最强时启动并扫描 +2. **市场时机好**:启动时市场状态良好 +3. **信号质量高**:扫描到的信号强度足够 + +### account3/account4 表现差 + +**可能原因**: +1. **启动时间差**:在信号减弱后启动并扫描 +2. **市场时机差**:启动时市场状态不佳 +3. **信号质量低**:扫描到的信号强度不足 + +--- + +## 🔧 立即行动 + +### 1. 检查启动时间 + +```bash +# 查看各账户的启动时间 +grep -E "交易策略开始执行|开始扫描市场" /www/wwwroot/autosys_new/logs/trading_*.log | head -n 10 +``` + +### 2. 检查扫描时间 + +```bash +# 查看各账户的扫描时间 +grep -E "等待.*秒后进行下次扫描|开始扫描市场" /www/wwwroot/autosys_new/logs/trading_*.log | tail -n 20 +``` + +### 3. 检查扫描结果 + +```bash +# 查看各账户的扫描结果 +grep -E "扫描完成|找到.*个符合条件的交易对" /www/wwwroot/autosys_new/logs/trading_*.log | tail -n 20 +``` + +--- + +## ✅ 完成时间 + +2026-01-25 diff --git a/docs/账户交易差异分析.md b/docs/账户交易差异分析.md new file mode 100644 index 0000000..c98a847 --- /dev/null +++ b/docs/账户交易差异分析.md @@ -0,0 +1,222 @@ +# 账户交易差异分析 + +## 📊 问题描述 + +- **account2**:下单胜率高,单子多 +- **account3**:下单很少,没有止盈 +- **account4**:下单很少,没有止盈 + +--- + +## 🔍 可能原因分析 + +### 1. 配置差异 + +**检查项**: +- `MIN_SIGNAL_STRENGTH`:信号强度阈值 +- `AUTO_TRADE_ALLOW_4H_NEUTRAL`:是否允许4H中性趋势 +- `AUTO_TRADE_ONLY_TRENDING`:是否只交易趋势行情 +- `MIN_VOLUME_24H`:最小成交量要求 +- `TOP_N_SYMBOLS`:只做最强N个 +- `MAX_DAILY_ENTRIES`:每日最大开仓次数 +- `MAX_OPEN_POSITIONS`:最大持仓数 + +**检查方法**: +```bash +# 查看account2、account3、account4的配置 +# 在前端配置页面查看,或通过API查询 +``` + +### 2. 账户余额差异 + +**问题**: +- 如果账户余额不足,可能无法开仓 +- 如果余额太小,可能无法满足最小仓位要求 + +**检查方法**: +```bash +# 查看账户余额 +grep -E "账户余额|余额|balance" /www/wwwroot/autosys_new/logs/trading_*.log | tail -n 20 +``` + +### 3. 市场扫描结果差异 + +**问题**: +- 不同账户可能扫描到不同的交易对 +- 信号强度可能不同 + +**检查方法**: +```bash +# 查看扫描结果 +grep -E "扫描完成|找到.*个符合条件的交易对" /www/wwwroot/autosys_new/logs/trading_*.log | tail -n 30 +``` + +### 4. 信号强度差异 + +**问题**: +- 如果 `MIN_SIGNAL_STRENGTH` 设置过高,可能过滤掉大部分信号 +- account3和account4可能信号强度不足 + +**检查方法**: +```bash +# 查看信号强度 +grep -E "技术指标分析|信号强度|should_trade" /www/wwwroot/autosys_new/logs/trading_*.log | tail -n 30 +``` + +### 5. 风险控制限制 + +**问题**: +- `MAX_DAILY_ENTRIES`:可能已达到每日限额 +- `MAX_OPEN_POSITIONS`:可能已达到最大持仓数 +- `MAX_TOTAL_POSITION_PERCENT`:可能已达到总仓位上限 + +**检查方法**: +```bash +# 查看风险控制日志 +grep -E "风险检查|已达到最大|每日限额" /www/wwwroot/autosys_new/logs/trading_*.log | tail -n 20 +``` + +### 6. 止盈未触发的原因 + +**问题**: +- 止盈价设置过高,价格未达到 +- 移动止损过早触发,导致止盈未触发 +- 手动平仓过早,导致止盈未触发 + +**检查方法**: +```bash +# 查看止盈相关日志 +grep -E "止盈|take_profit|触发.*目标" /www/wwwroot/autosys_new/logs/trading_*.log | tail -n 30 +``` + +--- + +## 🔧 排查步骤 + +### 步骤1:检查配置差异 + +1. **前端检查**: + - 登录前端,分别查看 account2、account3、account4 的配置 + - 对比关键配置项是否一致 + +2. **日志检查**: + ```bash + # 查看启动时的配置输出 + grep -A 50 "交易配置(当前策略)" /www/wwwroot/autosys_new/logs/trading_2.log | head -n 60 + 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 + ``` + +### 步骤2:检查市场扫描 + +```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 +``` + +### 步骤3:检查交易信号 + +```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 +``` + +### 步骤4:检查风险控制 + +```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 +``` + +### 步骤5:检查止盈情况 + +```bash +# 查看止盈相关日志 +grep -E "止盈|take_profit|触发.*目标|自动平仓(止盈)" /www/wwwroot/autosys_new/logs/trading_3.log | tail -n 20 +grep -E "止盈|take_profit|触发.*目标|自动平仓(止盈)" /www/wwwroot/autosys_new/logs/trading_4.log | tail -n 20 +``` + +--- + +## ✅ 解决方案 + +### 方案1:统一配置(推荐) + +**如果配置不同**: +1. 在全局配置页面应用"山寨币狙击(高盈亏比)"策略 +2. 确保所有账户使用相同的配置 +3. 重启所有交易进程 + +### 方案2:检查账户余额 + +**如果余额不足**: +1. 检查账户余额是否充足 +2. 确保余额满足最小仓位要求(`MIN_MARGIN_USDT`) + +### 方案3:降低信号强度阈值 + +**如果信号强度不足**: +1. 检查 `MIN_SIGNAL_STRENGTH` 是否过高 +2. 如果 account3/account4 的信号强度都是5,而 `MIN_SIGNAL_STRENGTH=7`,会被过滤 +3. 建议统一设置为5 + +### 方案4:检查止盈逻辑 + +**如果止盈未触发**: +1. 检查止盈价设置是否正确 +2. 检查移动止损是否过早触发 +3. 检查是否有手动平仓干扰 + +--- + +## 🎯 快速检查命令 + +```bash +# 1. 检查配置差异 +echo "=== Account 2 配置 ===" +grep -E "MIN_SIGNAL_STRENGTH|AUTO_TRADE_ALLOW_4H_NEUTRAL|TOP_N_SYMBOLS" /www/wwwroot/autosys_new/logs/trading_2.log | tail -n 5 + +echo "=== Account 3 配置 ===" +grep -E "MIN_SIGNAL_STRENGTH|AUTO_TRADE_ALLOW_4H_NEUTRAL|TOP_N_SYMBOLS" /www/wwwroot/autosys_new/logs/trading_3.log | tail -n 5 + +echo "=== Account 4 配置 ===" +grep -E "MIN_SIGNAL_STRENGTH|AUTO_TRADE_ALLOW_4H_NEUTRAL|TOP_N_SYMBOLS" /www/wwwroot/autosys_new/logs/trading_4.log | tail -n 5 + +# 2. 检查扫描结果 +echo "=== Account 2 扫描 ===" +grep -E "扫描完成|找到.*个符合条件的交易对" /www/wwwroot/autosys_new/logs/trading_2.log | tail -n 5 + +echo "=== Account 3 扫描 ===" +grep -E "扫描完成|找到.*个符合条件的交易对" /www/wwwroot/autosys_new/logs/trading_3.log | tail -n 5 + +echo "=== Account 4 扫描 ===" +grep -E "扫描完成|找到.*个符合条件的交易对" /www/wwwroot/autosys_new/logs/trading_4.log | tail -n 5 + +# 3. 检查交易信号 +echo "=== Account 2 信号 ===" +grep -E "处理交易对|开仓成功" /www/wwwroot/autosys_new/logs/trading_2.log | tail -n 10 + +echo "=== Account 3 信号 ===" +grep -E "处理交易对|开仓成功" /www/wwwroot/autosys_new/logs/trading_3.log | tail -n 10 + +echo "=== Account 4 信号 ===" +grep -E "处理交易对|开仓成功" /www/wwwroot/autosys_new/logs/trading_4.log | tail -n 10 +``` + +--- + +## 📝 建议 + +1. **统一配置**:确保所有账户使用相同的策略配置 +2. **检查余额**:确保账户余额充足 +3. **降低门槛**:如果信号强度不足,降低 `MIN_SIGNAL_STRENGTH` +4. **检查止盈**:确认止盈逻辑正常工作 + +--- + +## ✅ 完成时间 + +2026-01-25