diff --git a/backend/api/routes/config.py b/backend/api/routes/config.py index 1b08620..2ce3634 100644 --- a/backend/api/routes/config.py +++ b/backend/api/routes/config.py @@ -825,6 +825,11 @@ async def get_global_configs( for k, meta in ADDITIONAL_STRATEGY_DEFAULTS.items(): if k not in result: result[k] = meta + + # 自动交易过滤(含 AUTO_TRADE_SYMBOL_WHITELIST 等):与账号配置 API 一致,未入库也能在全局页展示 + for k, meta in AUTO_TRADE_FILTER_DEFAULTS.items(): + if k not in result: + result[k] = meta logger.info(f"返回全局配置项数量: {len(result)}") return result diff --git a/frontend/src/components/GlobalConfig.jsx b/frontend/src/components/GlobalConfig.jsx index 195c17f..316e746 100644 --- a/frontend/src/components/GlobalConfig.jsx +++ b/frontend/src/components/GlobalConfig.jsx @@ -39,6 +39,7 @@ const KEY_LABELS = { AUTO_TRADE_ALLOW_RANGING: '允许震荡市自动交易', AUTO_TRADE_ALLOW_UNKNOWN: '允许未判定市场自动交易', AUTO_TRADE_ALLOW_4H_NEUTRAL: '允许 4H 中性时自动交易', + AUTO_TRADE_SYMBOL_WHITELIST: '自动交易白名单(空=不限制)', RANGING_MARKET_SIGNAL_BOOST: '震荡市额外信号门槛', POSITION_SCALE_FACTOR: '仓位放大系数', SYNC_RECOVER_MISSING_POSITIONS: '同步时补建缺失持仓', @@ -110,6 +111,7 @@ const CONFIG_GUIDE_DETAILS = { AUTO_TRADE_ALLOW_RANGING: '当不强制 only_trending 时,是否允许在震荡市自动交易。默认关闭,避免横盘来回扫损。', AUTO_TRADE_ALLOW_UNKNOWN: '当 marketRegime=unknown(K线不足或未判定)时,是否允许自动交易。默认关闭更稳健。', AUTO_TRADE_ALLOW_4H_NEUTRAL: '是否允许4H趋势=neutral时自动交易。关闭可减少震荡扫损;开启会显著增加出单(需配合更严格的信号门槛)。', + AUTO_TRADE_SYMBOL_WHITELIST: '逗号或空格分隔合约,如 SOLUSDT,LINKUSDT。非空则仅这些合约会「自动下单」;其余仍会扫描并可能出现在推荐中。留空表示不启用白名单(与历史行为一致)。', RANGING_MARKET_SIGNAL_BOOST: '震荡市额外提高的最小信号门槛。比如 2 表示在基础 MIN_SIGNAL_STRENGTH 上再 +2,只保留更强的震荡市信号。', LIMIT_ORDER_OFFSET_PCT: '限价入场偏移(%)。BUY 挂在当前价下方,SELL 挂在当前价上方。值越小越贴近当前价,更容易成交;值越大更保守。建议:0.05%-0.20%。', ENTRY_CONFIRM_TIMEOUT_SEC: '下单后等待成交的确认超时(秒)。在纯限价模式下,超时未成交会撤单并跳过。建议:60-180秒。', @@ -631,6 +633,7 @@ const GlobalConfig = () => { AUTO_TRADE_ALLOW_RANGING: { value: false, type: 'boolean', category: 'strategy', description: '当不强制 only_trending 时,是否允许在震荡市自动交易。' }, AUTO_TRADE_ALLOW_UNKNOWN: { value: false, type: 'boolean', category: 'strategy', description: '当市场状态未判定时,是否允许自动交易。' }, AUTO_TRADE_ALLOW_4H_NEUTRAL: { value: false, type: 'boolean', category: 'strategy', description: '是否允许 4H 趋势为中性时自动交易。关闭可减少震荡扫损、提升质量(建议关闭)。' }, + AUTO_TRADE_SYMBOL_WHITELIST: { value: '', type: 'string', category: 'strategy', description: '自动交易白名单:非空则仅名单内合约自动下单;空表示不限制。与 MANUAL_BLOCKED 可同时使用。' }, RANGING_MARKET_SIGNAL_BOOST: { value: 2, type: 'number', category: 'strategy', description: '震荡市额外提高的最小信号门槛。' }, BETA_FILTER_ENABLED: { value: true, type: 'boolean', category: 'strategy', description: '大盘共振过滤:BTC/ETH 下跌时屏蔽多单。' }, BETA_FILTER_THRESHOLD: { value: -0.005, type: 'number', category: 'strategy', description: '大盘共振阈值(比例,如 -0.005 表示 -0.5%)。' }, @@ -947,7 +950,11 @@ const GlobalConfig = () => { type = typeof value === 'boolean' ? 'boolean' : 'number' category = 'strategy' } else if (key.startsWith('AUTO_TRADE_')) { - type = typeof value === 'boolean' ? 'boolean' : 'number' + if (typeof value === 'string') { + type = 'string' + } else { + type = typeof value === 'boolean' ? 'boolean' : 'number' + } category = 'strategy' } else if (key === 'LIMIT_ORDER_OFFSET_PCT') { type = 'number'