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