feat(config, market_scanner): 调整K线扫描限制以优化信号处理

在配置文件中将K线扫描限制从30根调整至50根,以支持4小时及日线周期的信号计算需求。同时,在市场扫描逻辑中增加了对K线限制的动态调整,确保在特定周期下信号处理的有效性。此改动旨在提升策略的灵活性与准确性,确保在市场波动时能够提供更可靠的交易建议。
This commit is contained in:
薇薇安 2026-02-25 13:54:52 +08:00
parent 09edc4f57d
commit 8bd7bae718
2 changed files with 11 additions and 5 deletions

View File

@ -216,7 +216,7 @@ DEFAULT_TRADING_CONFIG = {
'SCAN_INTERVAL': 900, # 扫描间隔15分钟900秒快速验证模式提高扫描频率以增加交易机会
'SCAN_SYMBOL_ANALYSIS_TIMEOUT_SEC': 12, # 单个交易对「详细分析」超时(秒);已并行拉取主周期/确认周期K线12秒通常够用网络慢可调大18~25
'SCAN_KLINE_FETCH_TIMEOUT_SEC': 8, # K线拉取单独超时超时则返回降级结果仅涨跌幅/成交量),不拖满整分析超时
'SCAN_KLINE_LIMIT': 30, # 扫描用 K 线根数30 根够 RSI/ATR 计算,减少 REST 数据量加快响应
'SCAN_KLINE_LIMIT': 50, # 扫描用 K 线根数(主周期 4h 时 MACD 需≥35、EMA50/市场状态需≥50否则信号恒为 0/unknown
'SCAN_PREFER_WEBSOCKET': True, # 优先使用 WebSocket 方式:如果缓存不完整,等待 WebSocket 推送数据最多1-1.5秒),而不是立即回退 REST API
'SCAN_LIMIT_KLINE_SUBSCRIBE': True, # 限制 K 线订阅:只在缓存完全没有数据时才订阅,避免订阅过多导致负载上升
'SCAN_PREWARM_KLINE_ENABLED': True, # 扫描前预热 K 线:批量预订阅 WS + REST 预取,提高缓存命中率、减少分析超时

View File

@ -368,8 +368,10 @@ class MarketScanner:
cfg = cfg or dict(config.TRADING_CONFIG or {})
primary_interval = cfg.get('PRIMARY_INTERVAL', config.TRADING_CONFIG.get('PRIMARY_INTERVAL', '1h'))
confirm_interval = cfg.get('CONFIRM_INTERVAL', config.TRADING_CONFIG.get('CONFIRM_INTERVAL', '4h'))
kline_limit = int(cfg.get('SCAN_KLINE_LIMIT', 30) or 30)
kline_limit = max(20, min(50, kline_limit))
kline_limit = int(cfg.get('SCAN_KLINE_LIMIT', 50) or 50)
if primary_interval in ('4h', '1d') and kline_limit < 50:
kline_limit = 50
kline_limit = max(20, min(100, kline_limit))
prewarm_concurrent = int(cfg.get('SCAN_PREWARM_CONCURRENT', 5) or 5)
klines_timeout = float(cfg.get('SCAN_KLINE_FETCH_TIMEOUT_SEC', 8) or 8)
@ -466,8 +468,12 @@ class MarketScanner:
klines_timeout = 3.0
elif klines_timeout > 20:
klines_timeout = 20.0
kline_limit = int(cfg.get('SCAN_KLINE_LIMIT', 30) or 30)
kline_limit = max(20, min(50, kline_limit))
kline_limit = int(cfg.get('SCAN_KLINE_LIMIT', 50) or 50)
primary_int = (cfg.get('PRIMARY_INTERVAL') or config.TRADING_CONFIG.get('PRIMARY_INTERVAL') or '1h')
# 主周期 4h/1d 时 MACD 需≥35、EMA50/市场状态需≥50否则趋势信号恒为 0、marketRegime 恒为 unknown
if primary_int in ('4h', '1d') and kline_limit < 50:
kline_limit = 50
kline_limit = max(20, min(100, kline_limit))
# ⚠️ 优化:优先使用共享 Redis 缓存(多账号共用),然后才是 WebSocket 本地缓存
# 这样多个账号扫描相同交易对时,可以共用缓存数据,减少 REST API 调用