From 1dea3df84a21b33551bd4ac4e8fda4d500741e39 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=96=87=E8=96=87=E5=AE=89?= Date: Tue, 24 Feb 2026 15:53:54 +0800 Subject: [PATCH] =?UTF-8?q?feat(config):=20=E6=B7=BB=E5=8A=A0=E8=AF=A6?= =?UTF-8?q?=E7=BB=86=E9=85=8D=E7=BD=AE=E9=A1=B9=E8=AF=B4=E6=98=8E=E4=BB=A5?= =?UTF-8?q?=E4=BC=98=E5=8C=96=E7=AD=96=E7=95=A5=E5=88=86=E6=9E=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 在 `GlobalConfig` 组件中新增配置项详细说明,提供各项参数的建议与使用说明,便于用户理解和优化交易策略。此改动提升了用户体验,帮助用户更好地进行策略配置与调整。 --- frontend/src/components/GlobalConfig.jsx | 109 +++++++++++++++++++++-- 1 file changed, 103 insertions(+), 6 deletions(-) diff --git a/frontend/src/components/GlobalConfig.jsx b/frontend/src/components/GlobalConfig.jsx index 5f16f43..7570149 100644 --- a/frontend/src/components/GlobalConfig.jsx +++ b/frontend/src/components/GlobalConfig.jsx @@ -37,6 +37,66 @@ const KEY_LABELS = { SYSTEM_ORDER_ID_PREFIX: '系统单 clientOrderId 前缀', } +// 配置项详细说明(用于导出的策略配置分析,含建议与参数说明) +const CONFIG_GUIDE_DETAILS = { + SCAN_INTERVAL: '扫描间隔(秒)。系统每隔多长时间扫描一次市场寻找交易机会。值越小扫描越频繁,能更快捕捉波动,但更容易产生噪音与过度交易。建议:低频波段1800秒(30分钟)或更长;稳健/保守可3600秒(1小时);高频不建议长期使用。', + MIN_CHANGE_PERCENT: '最小涨跌幅阈值(%)。只有24小时涨跌幅达到此值的交易对才会被考虑交易。值越小捕捉机会越多,但可能包含噪音和假信号。值越大只捕捉大幅波动,信号质量更高但机会更少。建议:保守策略2.0-3.0%,平衡策略1.5-2.0%,激进策略1.0-1.5%。', + MIN_SIGNAL_STRENGTH: '最小信号强度(0-10)。技术指标综合评分,只有达到此强度的信号才会执行交易。值越小机会越多但噪音更大;值越大更偏"精选高质量"。建议:低频波段建议≥8;一般保守5-7;平衡4-5;高频3-4(不推荐长期)。', + TOP_N_SYMBOLS: '每次扫描后处理的交易对数量。从符合条件的交易对中选择涨跌幅最大的前N个进行详细分析。值越大机会越多,但计算量增加,API请求增多。建议:保守策略8-10个,平衡策略12-15个,激进策略15-20个。', + MAX_SCAN_SYMBOLS: '扫描的最大交易对数量(0表示扫描所有)。限制每次扫描时处理的交易对总数,减少API请求和计算量。值越小扫描越快,但可能错过一些机会。值越大覆盖更全面。建议:保守策略100-200个,平衡策略200-300个,激进策略300-500个。', + MIN_VOLATILITY: '最小波动率(小数形式,如0.02表示2%)。过滤掉波动率低于此值的交易对,确保只交易有足够波动的币种。建议:0.015-0.025(1.5%-2.5%)。', + MIN_VOLUME_24H: '最小24小时成交量(USDT)。过滤掉24小时交易量低于此值的交易对,确保只交易流动性好的币种,避免滑点和流动性风险。建议:≥500万USDT,主流币种可设置1000万以上。', + KLINE_INTERVAL: 'K线数据周期。获取K线数据的基础周期,影响技术指标的计算粒度。建议:5m-1h,通常与PRIMARY_INTERVAL保持一致。', + PRIMARY_INTERVAL: '主周期。策略分析的主要时间周期,用于计算技术指标(RSI、MACD、布林带等)。建议:保守策略4h-1d,平衡策略1h-4h,激进策略15m-1h。', + CONFIRM_INTERVAL: '确认周期。用于确认交易信号的更长时间周期,增加信号的可靠性。建议:保守策略1d,平衡策略4h-1d,激进策略1h-4h。', + ENTRY_INTERVAL: '入场周期。用于精确入场的短时间周期,优化入场点。建议:保守策略1h,平衡策略15m-30m,激进策略5m-15m。', + MAX_POSITION_PERCENT: '单笔最大保证金占用(账户余额的百分比,如0.02表示2%)。值越小越保守,适合回归波段交易、降低单笔波动对账户的伤害。注意:币安合约有最小名义价值要求(通常≥5 USDT)。', + MAX_TOTAL_POSITION_PERCENT: '总保证金上限(账户余额的百分比,如0.20表示20%)。所有持仓占用的保证金之和不能超过该上限,防止过度分散和风险集中。', + MIN_POSITION_PERCENT: '单笔最小保证金占用(账户余额的百分比)。0表示不限制。用于避免过小仓位。', + STOP_LOSS_PERCENT: '止损百分比(如0.08表示8%,相对于保证金)。当亏损达到此百分比时自动平仓止损。建议:保守策略10-15%,平衡策略8-10%,激进策略5-8%。盈亏比建议至少1:1.5。', + TAKE_PROFIT_PERCENT: '止盈百分比(如0.15表示15%,相对于保证金)。建议:保守策略20-30%,平衡策略15-20%,激进策略10-15%。应大于止损,盈亏比至少1:1.5。', + MIN_STOP_LOSS_PRICE_PCT: '最小止损价格变动百分比。用于防止止损过紧。建议:1.5%-3%。', + MIN_TAKE_PROFIT_PRICE_PCT: '最小止盈价格变动百分比。用于防止止盈过紧。建议:2%-4%。', + LEVERAGE: '交易杠杆倍数。杠杆越高,相同仓位下需要的保证金越少,但风险越大。建议:保守策略5-10倍,平衡策略10倍,激进策略10-15倍。高杠杆会增加爆仓风险。', + USE_TRAILING_STOP: '是否启用移动止损。启用后,当盈利达到激活阈值时,止损会自动跟踪价格,保护利润。适合趋势行情。建议:平衡和激进策略启用,保守策略可关闭。', + SMART_ENTRY_ENABLED: '智能入场开关。开启时会进行"限价回调 + 追价 +(趋势强时)市价兜底";关闭时回归"纯限价单模式",更适合低频波段与控频。', + AUTO_TRADE_ONLY_TRENDING: '自动交易仅在市场状态=trending时执行(ranging/unknown只生成推荐,不自动下单)。能显著降低震荡扫损,但也会减少出单。', + AUTO_TRADE_ALLOW_4H_NEUTRAL: '是否允许4H趋势=neutral时自动交易。关闭可减少震荡扫损;开启会显著增加出单(需配合更严格的信号门槛)。', + LIMIT_ORDER_OFFSET_PCT: '限价入场偏移(%)。BUY 挂在当前价下方,SELL 挂在当前价上方。值越小越贴近当前价,更容易成交;值越大更保守。建议:0.05%-0.20%。', + ENTRY_CONFIRM_TIMEOUT_SEC: '下单后等待成交的确认超时(秒)。在纯限价模式下,超时未成交会撤单并跳过。建议:60-180秒。', + ENTRY_CHASE_MAX_STEPS: '智能入场最大追价步数。步数越多越不容易错过,但也更接近追价;建议 2-4 步。', + ENTRY_STEP_WAIT_SEC: '智能入场每一步等待成交时间(秒)。建议 15-25 秒。', + ENTRY_MARKET_FALLBACK_AFTER_SEC: '趋势强时市价兜底延迟(秒)。建议 45-90 秒。', + ENTRY_MAX_DRIFT_PCT_TRENDING: '趋势强时最大追价偏离(%)。例如 0.3 表示 0.3%。越小越保守;建议 0.2%-0.6%。', + ENTRY_MAX_DRIFT_PCT_RANGING: '震荡/弱趋势最大追价偏离(%)。建议 0.1%-0.3%。', + TRAILING_STOP_ACTIVATION: '移动止损激活阈值(如0.01表示1%)。当盈利达到此百分比时,移动止损开始跟踪价格。建议:1-2%。', + TRAILING_STOP_PROTECT: '移动止损保护利润(如0.01表示1%)。当价格从最高点回撤达到此百分比时触发止损。建议:1-2%。', + BETA_FILTER_ENABLED: '大盘共振过滤:当BTC/ETH短周期下跌时屏蔽多单,避免逆势开多。建议在大盘明显下跌时保持开启。', + BETA_FILTER_THRESHOLD: '大盘共振阈值(比例,如-0.005表示-0.5%)。当BTC/ETH 15m或1h涨跌幅低于此值时触发过滤,屏蔽多单。', + MARKET_SCHEME: '市场方案:bull(多头市)/bear(熊市)/normal(正常)/conservative(保守)。用于根据当前市场环境调整策略参数。', + USE_ATR_STOP_LOSS: '是否使用ATR动态止损(优先于固定百分比)。ATR根据波动率计算止损距离,更适应不同市场。', + ATR_STOP_LOSS_MULTIPLIER: 'ATR止损倍数。建议 2.0-3.0。放宽止损可以给波动留出空间,提高胜率。', + ATR_TAKE_PROFIT_MULTIPLIER: 'ATR止盈倍数。建议 1.0-2.0。对应盈亏比 1:1 到 2:1。', + USE_FIXED_RISK_SIZING: '使用固定风险百分比计算仓位(凯利公式)。启用后,每笔单子承受的风险固定为 FIXED_RISK_PERCENT,避免大额亏损。', + FIXED_RISK_PERCENT: '每笔单子承受的风险百分比(相对于总资金)。例如 0.02 表示 2%。', + AUTO_TRADE_ENABLED: '自动交易总开关。关闭后仅生成推荐,不会自动下单,适合先观察/体验。', + MAX_OPEN_POSITIONS: '同时持仓数量上限(防止仓位过多/难管理)。建议 1-5。', + MAX_DAILY_ENTRIES: '每日最多开仓次数(防止高频下单/过度交易)。建议 3-15。', + BINANCE_API_KEY: '币安API密钥。用于访问币安账户的凭证,需要启用"合约交易"权限。请妥善保管,不要泄露。', + BINANCE_API_SECRET: '币安API密钥Secret。与API Key配对使用,用于签名验证。请妥善保管,不要泄露。', + USE_TESTNET: '是否使用币安测试网。true表示模拟交易(无真实资金),false表示真实交易。', + MIN_MARGIN_USDT: '最小单笔保证金(USDT)。低于此值不下单,用于满足币安合约最小名义价值要求。', + MIN_VOLUME_24H_STRICT: '严格成交量过滤(USD)。24H Volume 低于此值的交易对直接剔除,比 MIN_VOLUME_24H 更严格。', + SCAN_EXTRA_SYMBOLS_FOR_SUPPLEMENT: '智能补单额外候选数。当 TOP_N 中部分因冷却等被跳过时,仍会尝试这批额外候选,避免无单可下。', + EXCLUDE_MAJOR_COINS: '是否排除主流币(BTC、ETH、BNB等)。开启后专注于山寨币策略。', + TAKE_PROFIT_1_PERCENT: '分步止盈第一目标(保证金百分比,如0.15=15%)。第一目标触发后了结50%仓位,剩余追求第二目标。', + TRADING_PROFILE: '交易预设:conservative(稳健)/fast(快速验证)。conservative 偏向低频+高门槛;fast 偏向高频+宽松过滤。', + ATR_PERIOD: 'ATR 计算周期(K线数量)。默认 14,影响 ATR 动态止损的敏感度。', + SYMBOL_LOSS_COOLDOWN_ENABLED: '连续亏损冷却开关。开启后,同一交易对连续亏损达到阈值则禁止交易一段时间,避免连续亏损。', + SYMBOL_MAX_CONSECUTIVE_LOSSES: '最大允许连续亏损次数。超过后触发该交易对的冷却。', + SYMBOL_LOSS_COOLDOWN_SEC: '连续亏损后的冷却时间(秒),默认 3600(1小时)。', +} + const ConfigItem = ({ label, config, onUpdate, disabled }) => { const isPercentKey = label.includes('PERCENT') || label.includes('PCT') const PCT_LIKE_KEYS = new Set([ @@ -202,6 +262,7 @@ const GlobalConfig = () => { const [recommendationsStatus, setRecommendationsStatus] = useState(null) const [servicesSummary, setServicesSummary] = useState(null) const [marketOverview, setMarketOverview] = useState(null) + const [showMarketJson, setShowMarketJson] = useState(false) const [systemBusy, setSystemBusy] = useState(false) // 预设方案相关 @@ -967,9 +1028,18 @@ const GlobalConfig = () => { } } + // 构建配置说明(用于策略分析,优先用详细说明,无则用后端 description) + const config_guide = {} + entries.forEach((e) => { + const detail = CONFIG_GUIDE_DETAILS[e.key] || e.description + if (detail) config_guide[e.key] = detail + }) + const snapshot = { fetched_at: now.toISOString(), - note: 'display_value 对 PERCENT/PCT 做了百分比换算;敏感字段可选择脱敏/明文。', + export_purpose: '策略配置全量导出,用于离线分析与调参。来源:getGlobalConfigs(管理员)或 getConfigs(普通用户),包含数据库配置及后端默认值。', + note: 'configs 为全部配置项;display_value 对 PERCENT/PCT 做了百分比换算;敏感字段(API Key/Secret)可选择脱敏或明文。config_guide 提供各配置的详细说明与建议,便于策略分析。', + config_count: entries.length, preset_detected: detectedPreset, system_status: systemStatus ? { running: !!systemStatus.running, @@ -978,6 +1048,7 @@ const GlobalConfig = () => { state: systemStatus.state || null, } : null, configs: entries, + config_guide, } return JSON.stringify(snapshot, null, 2) @@ -1169,11 +1240,18 @@ const GlobalConfig = () => { {/* 市场行情概览(供确认策略方案是否匹配市场) */} {isAdmin && (
-
+

市场行情概览

- +
+ + {marketOverview && ( + + )} +
{marketOverview ? (
@@ -1226,6 +1304,25 @@ const GlobalConfig = () => { ) : (
加载中或拉取失败,请点击刷新
)} + {showMarketJson && marketOverview && ( +
+
+ +
+
+                {JSON.stringify(marketOverview, null, 2)}
+              
+
+ )}
)} @@ -1628,7 +1725,7 @@ const GlobalConfig = () => {

当前整体配置快照

- 默认脱敏 BINANCE_API_KEY/SECRET。你可以选择明文后重新生成再复制/下载。 + 导出全量策略配置(与配置页数据源一致)。config_guide 含各配置项说明与建议,便于策略分析。默认脱敏 API Key/Secret,可勾选明文后重新生成。