From cdbb660c1d1cf1722ea650376e51675d75f7715e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=96=87=E8=96=87=E5=AE=89?= Date: Fri, 23 Jan 2026 09:36:39 +0800 Subject: [PATCH] a --- backend/api/routes/config.py | 20 ++++++++++++++++++++ backend/config_manager.py | 4 ++++ frontend/src/components/GlobalConfig.jsx | 1 + 3 files changed, 25 insertions(+) diff --git a/backend/api/routes/config.py b/backend/api/routes/config.py index 5f01af3..2db9ee6 100644 --- a/backend/api/routes/config.py +++ b/backend/api/routes/config.py @@ -211,6 +211,26 @@ async def get_all_configs( if k not in result: result[k] = meta + # 固定风险百分比配置(策略核心,仅管理员可见) + FIXED_RISK_CONFIG_DEFAULTS = { + "USE_FIXED_RISK_SIZING": { + "value": True, + "type": "boolean", + "category": "risk", + "description": "使用固定风险百分比计算仓位(凯利公式)。启用后,每笔单子承受的风险固定为 FIXED_RISK_PERCENT,避免大额亏损。", + }, + "FIXED_RISK_PERCENT": { + "value": 0.02, # 2% + "type": "number", + "category": "risk", + "description": "每笔单子承受的风险百分比(相对于总资金)。例如 0.02 表示 2%。启用固定风险后,每笔亏损限制在该百分比内。", + }, + } + + for k, meta in FIXED_RISK_CONFIG_DEFAULTS.items(): + if k not in result: + result[k] = meta + # 普通用户:只展示风险旋钮 + 账号密钥(尽量傻瓜化,避免改坏策略) # 管理员:若当前不是“全局策略账号”,同样只展示风险旋钮,避免误以为这里改策略能生效 is_admin = (user.get("role") or "user") == "admin" diff --git a/backend/config_manager.py b/backend/config_manager.py index 2c96c15..480a3bf 100644 --- a/backend/config_manager.py +++ b/backend/config_manager.py @@ -551,6 +551,10 @@ class ConfigManager: 'ATR_MULTIPLIER_MIN': eff_get('ATR_MULTIPLIER_MIN', 1.5), # 动态ATR倍数最小值 'ATR_MULTIPLIER_MAX': eff_get('ATR_MULTIPLIER_MAX', 2.5), # 动态ATR倍数最大值 + # 固定风险百分比仓位计算(凯利公式) + 'USE_FIXED_RISK_SIZING': eff_get('USE_FIXED_RISK_SIZING', True), # 使用固定风险百分比计算仓位 + 'FIXED_RISK_PERCENT': eff_get('FIXED_RISK_PERCENT', 0.02), # 每笔单子承受的风险(2%) + # 市场扫描(1小时主周期) 'SCAN_INTERVAL': eff_get('SCAN_INTERVAL', 3600), # 1小时 'TOP_N_SYMBOLS': eff_get('TOP_N_SYMBOLS', 10), # 每次扫描后处理的交易对数量 diff --git a/frontend/src/components/GlobalConfig.jsx b/frontend/src/components/GlobalConfig.jsx index 9d33657..815a26c 100644 --- a/frontend/src/components/GlobalConfig.jsx +++ b/frontend/src/components/GlobalConfig.jsx @@ -13,6 +13,7 @@ const ConfigItem = ({ label, config, onUpdate, disabled }) => { 'LIMIT_ORDER_OFFSET_PCT', 'ENTRY_MAX_DRIFT_PCT_TRENDING', 'ENTRY_MAX_DRIFT_PCT_RANGING', + 'FIXED_RISK_PERCENT', // 固定风险百分比,已经是小数形式(0.02 = 2%) ]) const isPctLike = PCT_LIKE_KEYS.has(label) const isRatioPercentKey = isPercentKey && !isPctLike