用户配置优先
This commit is contained in:
parent
42eab75e3e
commit
7379dd1f4b
|
|
@ -48,10 +48,13 @@ import logging
|
|||
logger = logging.getLogger(__name__)
|
||||
|
||||
# 平台兜底:策略核心使用全局配置表(global_strategy_config),普通用户账号只允许调整“风险旋钮”
|
||||
# - 风险旋钮:每个账号独立(仓位/频次等)
|
||||
# - 其它策略参数:统一从全局配置表读取,避免每个用户乱改导致策略不可控
|
||||
# 执行策略合并顺序:普通用户(账号)配置优先,未设置时使用全局配置,允许用户简单控制自己的交易并只影响本人执行
|
||||
# - 风险旋钮:每个账号独立(仓位/频次等),账号有则用账号,无则用全局
|
||||
# - 其它策略参数:账号有则用账号,无则用全局(管理员可在全局配置设默认,用户可覆盖)
|
||||
# 注意:不再依赖account_id=1,全局配置存储在独立的global_strategy_config表中
|
||||
|
||||
_MISSING = object() # 用于区分“账号未设置”与“值为 None/0/False”
|
||||
|
||||
RISK_KNOBS_KEYS = {
|
||||
"MIN_MARGIN_USDT",
|
||||
"MIN_POSITION_PERCENT",
|
||||
|
|
@ -729,19 +732,25 @@ class ConfigManager:
|
|||
|
||||
def eff_get(key: str, default: Any):
|
||||
"""
|
||||
策略核心:从全局配置表读取(global_strategy_config)。
|
||||
风险旋钮:从当前账号读取。
|
||||
执行策略合并:账号(用户)配置优先,未设置时使用全局配置,只影响该账号的交易执行。
|
||||
- API key/secret/testnet 仅账号,无全局兜底。
|
||||
- 其余项:先读账号,有则用;无则用全局,再无则用 default。
|
||||
"""
|
||||
# API key/secret/testnet 永远按账号读取(在 get() 内部已处理)
|
||||
if key in RISK_KNOBS_KEYS:
|
||||
value_from_account = False
|
||||
if key in ("BINANCE_API_KEY", "BINANCE_API_SECRET", "USE_TESTNET"):
|
||||
value = self.get(key, default)
|
||||
value_from_account = True
|
||||
else:
|
||||
# 从全局配置表读取
|
||||
try:
|
||||
value = global_config_mgr.get(key, default)
|
||||
except Exception:
|
||||
value = self.get(key, default)
|
||||
|
||||
account_val = self.get(key, _MISSING)
|
||||
if account_val is not _MISSING:
|
||||
value = account_val
|
||||
value_from_account = True
|
||||
else:
|
||||
try:
|
||||
value = global_config_mgr.get(key, default)
|
||||
except Exception:
|
||||
value = default
|
||||
|
||||
# ⚠️ 临时兼容性处理:百分比配置值格式转换
|
||||
# 如果配置值是百分比形式(>1),转换为比例形式(除以100)
|
||||
# 兼容数据库中可能存在的旧数据(百分比形式,如30表示30%)
|
||||
|
|
@ -769,17 +778,13 @@ class ConfigManager:
|
|||
# 静默转换,不输出警告(用户已确认数据库应存储小数形式)
|
||||
if value > 1:
|
||||
value = value / 100.0
|
||||
# 静默更新Redis缓存,避免下次读取时再次触发转换
|
||||
# 静默更新缓存:值来自账号则写回账号,否则写回全局
|
||||
try:
|
||||
if key in RISK_KNOBS_KEYS:
|
||||
# 风险旋钮:更新当前账号的Redis缓存
|
||||
if value_from_account:
|
||||
self._set_to_redis(key, value)
|
||||
# 同时更新本地缓存
|
||||
self._cache[key] = value
|
||||
else:
|
||||
# 全局配置:更新全局配置的Redis缓存
|
||||
global_config_mgr._set_to_redis(key, value)
|
||||
# 同时更新本地缓存
|
||||
global_config_mgr._cache[key] = value
|
||||
except Exception as e:
|
||||
logger.debug(f"更新Redis缓存失败(不影响使用): {key} = {e}")
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user