feat: live_executor从DB读配置,前端改完60秒内生效
- reload_live_config()每60秒从live_config表读取 - RISK_PER_TRADE_USD和MAX_POSITIONS实时更新 - 范总在前端改1R金额→保存→下次开仓自动用新值 - 不需要重启进程
This commit is contained in:
parent
b0a463a22c
commit
3b6e7d8af3
@ -52,10 +52,30 @@ DB_CONFIG = {
|
||||
# 策略
|
||||
ENABLED_STRATEGIES = json.loads(os.getenv("LIVE_STRATEGIES", '["v52_8signals"]'))
|
||||
|
||||
# 风险参数
|
||||
RISK_PER_TRADE_USD = float(os.getenv("RISK_PER_TRADE_USD", "2")) # 测试网$2=1R
|
||||
# 风险参数(默认值,会被DB live_config覆盖)
|
||||
RISK_PER_TRADE_USD = float(os.getenv("RISK_PER_TRADE_USD", "2"))
|
||||
MAX_POSITIONS = int(os.getenv("MAX_POSITIONS", "4"))
|
||||
FEE_RATE = 0.0005 # Taker 0.05%
|
||||
_config_cache = {}
|
||||
_config_cache_ts = 0
|
||||
|
||||
def reload_live_config(conn):
|
||||
"""从live_config表读取配置,每60秒刷新一次"""
|
||||
global RISK_PER_TRADE_USD, MAX_POSITIONS, _config_cache, _config_cache_ts
|
||||
now = time.time()
|
||||
if now - _config_cache_ts < 60:
|
||||
return
|
||||
try:
|
||||
cur = conn.cursor()
|
||||
cur.execute("SELECT key, value FROM live_config")
|
||||
for row in cur.fetchall():
|
||||
_config_cache[row[0]] = row[1]
|
||||
RISK_PER_TRADE_USD = float(_config_cache.get("risk_per_trade_usd", "2"))
|
||||
MAX_POSITIONS = int(_config_cache.get("max_positions", "4"))
|
||||
_config_cache_ts = now
|
||||
logger.info(f"📋 配置刷新: 1R=${RISK_PER_TRADE_USD} | 最大持仓={MAX_POSITIONS}")
|
||||
except Exception as e:
|
||||
logger.warning(f"读取live_config失败: {e}")
|
||||
|
||||
# 币种精度(币安要求)
|
||||
SYMBOL_PRECISION = {
|
||||
@ -282,6 +302,9 @@ async def execute_entry(session: aiohttp.ClientSession, signal: dict, db_conn):
|
||||
|
||||
t_signal = signal_ts # 信号时间戳(ms)
|
||||
|
||||
# 刷新配置(每60秒从DB读一次)
|
||||
reload_live_config(db_conn)
|
||||
|
||||
# 0. 信号新鲜度检查(超过2秒弃仓)
|
||||
SIGNAL_MAX_AGE_MS = 2000
|
||||
signal_age_ms = time.time() * 1000 - t_signal
|
||||
|
||||
Loading…
Reference in New Issue
Block a user