auto_trade_sys/docs/市场扫描优化分析.md
薇薇安 83e628b611 a
2026-01-25 16:32:08 +08:00

4.8 KiB
Raw Permalink Blame History

市场扫描优化分析

🔍 当前情况

扫描流程

  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过滤主流币推荐

实现:在扫描前过滤掉主流币

主流币列表

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优化排序逻辑

当前排序

sorted_results = sorted(
    filtered_results,
    key=lambda x: (
        x.get('signalScore', 0) * 10,  # 信号得分权重更高
        abs(x['changePercent'])  # 其次考虑涨跌幅
    ),
    reverse=True
)

优化建议

  1. 增加成交量权重:成交量越大,流动性越好
  2. 增加波动率权重:波动率越大,机会越大
  3. 排除主流币:在排序前排除主流币

🎯 推荐配置

优化后的配置

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 中添加主流币过滤逻辑:

# 主流币列表(山寨币策略应该排除)
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

TOP_N_SYMBOLS = 8  # 从5增加到8给更多选择余地

3. 优化排序逻辑

增加成交量和波动率权重:

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