This commit is contained in:
薇薇安 2026-01-28 21:53:41 +08:00
parent 8337893b0c
commit 15394445b4
4 changed files with 57 additions and 11 deletions

View File

@ -151,6 +151,16 @@ AUTO_TRADE_FILTER_DEFAULTS = {
},
}
# 风险/策略预设(用于一键切换“稳健 / 快速验证”等模式)
PROFILE_CONFIG_DEFAULTS = {
"TRADING_PROFILE": {
"value": "conservative",
"type": "string",
"category": "strategy",
"description": "交易预设conservative(稳健,低频+高门槛) / fast(快速验证,高频+宽松过滤)。仅作为默认值,具体参数仍可单独调整。",
},
}
# 核心策略参数(仅管理员可见/在全局策略账号中修改)
CORE_STRATEGY_CONFIG_DEFAULTS = {
@ -242,6 +252,11 @@ async def get_all_configs(
if k not in result:
result[k] = meta
# 交易预设profile用于前端一键切换“稳健 / 快速验证”
for k, meta in PROFILE_CONFIG_DEFAULTS.items():
if k not in result:
result[k] = meta
for k, meta in RISK_KNOBS_DEFAULTS.items():
if k not in result:
result[k] = meta
@ -315,6 +330,11 @@ async def get_global_configs(
if k not in result:
result[k] = meta
# 全局交易预设profile用于控制一组参数的默认值
for k, meta in PROFILE_CONFIG_DEFAULTS.items():
if k not in result:
result[k] = meta
# 固定风险百分比配置
FIXED_RISK_CONFIG_DEFAULTS = {
"USE_FIXED_RISK_SIZING": {

View File

@ -775,6 +775,18 @@ class ConfigManager:
return value
# 交易预设:控制一组参数的“默认性格”
profile = str(eff_get('TRADING_PROFILE', 'conservative') or 'conservative').lower()
is_fast = profile in ('fast', 'fast_test', 'aggressive')
max_daily_default = 30 if is_fast else 8
scan_interval_default = 900 if is_fast else 1800
min_signal_default = 7 if is_fast else 9
cooldown_default = 900 if is_fast else 1800
allow_neutral_default = True if is_fast else False
short_filter_default = False if is_fast else True
max_trend_move_default = 0.08 if is_fast else 0.05
return {
# 仓位控制
'MAX_POSITION_PERCENT': eff_get('MAX_POSITION_PERCENT', 0.08), # 单笔最大保证金占比
@ -785,7 +797,7 @@ class ConfigManager:
# 用户风险旋钮:自动交易开关/频次控制
'AUTO_TRADE_ENABLED': eff_get('AUTO_TRADE_ENABLED', True),
'MAX_OPEN_POSITIONS': eff_get('MAX_OPEN_POSITIONS', 3),
'MAX_DAILY_ENTRIES': eff_get('MAX_DAILY_ENTRIES', 8),
'MAX_DAILY_ENTRIES': eff_get('MAX_DAILY_ENTRIES', max_daily_default),
# 涨跌幅阈值
'MIN_CHANGE_PERCENT': eff_get('MIN_CHANGE_PERCENT', 2.0),
@ -809,7 +821,7 @@ class ConfigManager:
'FIXED_RISK_PERCENT': eff_get('FIXED_RISK_PERCENT', 0.02), # 每笔单子承受的风险2%
# 市场扫描30分钟主周期
'SCAN_INTERVAL': eff_get('SCAN_INTERVAL', 1800), # 30分钟增加交易机会
'SCAN_INTERVAL': eff_get('SCAN_INTERVAL', scan_interval_default), # 30分钟增加交易机会
'TOP_N_SYMBOLS': eff_get('TOP_N_SYMBOLS', 8), # 每次扫描后处理的交易对数量增加到8给更多选择余地
'MAX_SCAN_SYMBOLS': eff_get('MAX_SCAN_SYMBOLS', 250), # 扫描的最大交易对数量增加到250提升覆盖率到46%
'EXCLUDE_MAJOR_COINS': eff_get('EXCLUDE_MAJOR_COINS', True), # 是否排除主流币BTC、ETH、BNB等专注于山寨币
@ -823,7 +835,7 @@ class ConfigManager:
'MIN_VOLATILITY': eff_get('MIN_VOLATILITY', 0.02),
# 高胜率策略参数
'MIN_SIGNAL_STRENGTH': eff_get('MIN_SIGNAL_STRENGTH', 7), # 默认72026-01-27优化提高门槛减少垃圾信号提升胜率
'MIN_SIGNAL_STRENGTH': eff_get('MIN_SIGNAL_STRENGTH', min_signal_default), # 默认值随 profile 调整
'LEVERAGE': eff_get('LEVERAGE', 10),
'USE_DYNAMIC_LEVERAGE': eff_get('USE_DYNAMIC_LEVERAGE', True),
'MAX_LEVERAGE': eff_get('MAX_LEVERAGE', 15), # 降低到15更保守配合更大的保证金
@ -839,25 +851,39 @@ class ConfigManager:
# 说明:这两个 key 需要出现在 TRADING_CONFIG 中,否则 trading_system 在每次 reload_from_redis 后会丢失它们,
# 导致始终按默认值拦截自动交易(用户在配置页怎么开都没用)。
'AUTO_TRADE_ONLY_TRENDING': eff_get('AUTO_TRADE_ONLY_TRENDING', True),
'AUTO_TRADE_ALLOW_4H_NEUTRAL': eff_get('AUTO_TRADE_ALLOW_4H_NEUTRAL', False),
'AUTO_TRADE_ALLOW_4H_NEUTRAL': eff_get('AUTO_TRADE_ALLOW_4H_NEUTRAL', allow_neutral_default),
# 智能入场/限价偏移(部分逻辑会直接读取 TRADING_CONFIG
'LIMIT_ORDER_OFFSET_PCT': eff_get('LIMIT_ORDER_OFFSET_PCT', 0.5),
'SMART_ENTRY_ENABLED': eff_get('SMART_ENTRY_ENABLED', False),
'SMART_ENTRY_STRONG_SIGNAL': eff_get('SMART_ENTRY_STRONG_SIGNAL', 8),
'ENTRY_SYMBOL_COOLDOWN_SEC': eff_get('ENTRY_SYMBOL_COOLDOWN_SEC', 120),
'SMART_ENTRY_STRONG_SIGNAL': eff_get('SMART_ENTRY_STRONG_SIGNAL', min_signal_default),
'ENTRY_SYMBOL_COOLDOWN_SEC': eff_get('ENTRY_SYMBOL_COOLDOWN_SEC', cooldown_default),
'ENTRY_TIMEOUT_SEC': eff_get('ENTRY_TIMEOUT_SEC', 180),
'ENTRY_STEP_WAIT_SEC': eff_get('ENTRY_STEP_WAIT_SEC', 15),
'ENTRY_CHASE_MAX_STEPS': eff_get('ENTRY_CHASE_MAX_STEPS', 4),
'ENTRY_MARKET_FALLBACK_AFTER_SEC': eff_get('ENTRY_MARKET_FALLBACK_AFTER_SEC', 45),
'ENTRY_CONFIRM_TIMEOUT_SEC': eff_get('ENTRY_CONFIRM_TIMEOUT_SEC', 30),
'ENTRY_MAX_DRIFT_PCT_TRENDING': eff_get('ENTRY_MAX_DRIFT_PCT_TRENDING', 0.6),
'ENTRY_MAX_DRIFT_PCT_TRENDING': eff_get('ENTRY_MAX_DRIFT_PCT_TRENDING', 0.006),
'ENTRY_MAX_DRIFT_PCT_RANGING': eff_get('ENTRY_MAX_DRIFT_PCT_RANGING', 0.3),
# 动态过滤优化
'BETA_FILTER_ENABLED': eff_get('BETA_FILTER_ENABLED', True), # 大盘共振过滤BTC/ETH下跌时屏蔽多单
'BETA_FILTER_THRESHOLD': eff_get('BETA_FILTER_THRESHOLD', -0.005), # -0.5%2026-01-27优化更敏感地过滤大盘风险15分钟内跌幅超过0.5%即屏蔽多单)
# 趋势尾部入场过滤 & 15m 短周期方向过滤开关(由 profile 控制默认值)
'ENTRY_SHORT_INTERVAL': eff_get('ENTRY_SHORT_INTERVAL', '15m'),
'ENTRY_SHORT_TREND_FILTER_ENABLED': eff_get('ENTRY_SHORT_TREND_FILTER_ENABLED', short_filter_default),
'ENTRY_SHORT_TREND_MIN_PCT': eff_get('ENTRY_SHORT_TREND_MIN_PCT', 0.003),
'ENTRY_SHORT_CONFIRM_CANDLES': eff_get('ENTRY_SHORT_CONFIRM_CANDLES', 3),
'USE_TREND_ENTRY_FILTER': eff_get('USE_TREND_ENTRY_FILTER', True),
'MAX_TREND_MOVE_BEFORE_ENTRY': eff_get('MAX_TREND_MOVE_BEFORE_ENTRY', max_trend_move_default),
'TREND_STATE_TTL_SEC': eff_get('TREND_STATE_TTL_SEC', 3600),
'RECO_USE_TREND_ENTRY_FILTER': eff_get('RECO_USE_TREND_ENTRY_FILTER', True),
'RECO_MAX_TREND_MOVE_BEFORE_ENTRY': eff_get('RECO_MAX_TREND_MOVE_BEFORE_ENTRY', 0.04),
# 当前交易预设(让 trading_system 能知道是哪种模式)
'TRADING_PROFILE': profile,
}
def _sync_to_redis(self):

View File

@ -222,7 +222,7 @@ def _get_trading_config():
# 入场短周期用于快速方向确认例如15m不要太小以免噪音太大
'ENTRY_SHORT_INTERVAL': '15m',
# 是否开启“短周期方向过滤”避免在15m明显上涨时做空、明显下跌时做多快速验证模式关闭以增加交易机会
'ENTRY_SHORT_TREND_FILTER_ENABLED': False,
'ENTRY_SHORT_TREND_FILTER_ENABLED': True,
# 短周期方向过滤使用的最小趋势幅度例如0.003=0.3%),变化太小视为震荡不过滤
'ENTRY_SHORT_TREND_MIN_PCT': 0.003,
# 检查最近多少根短周期K线来评估方向例如3根15m约等于45分钟
@ -259,7 +259,7 @@ def _get_trading_config():
# 是否仅在 marketRegime=trending 时才自动交易;否则只生成推荐
'AUTO_TRADE_ONLY_TRENDING': True,
# 是否允许 4H 趋势为 neutral 时自动交易;快速验证模式:允许中性趋势以增加交易机会
'AUTO_TRADE_ALLOW_4H_NEUTRAL': True,
'AUTO_TRADE_ALLOW_4H_NEUTRAL': False,
# ===== 趋势入场过滤(防止追在半山腰)=====
# 是否启用基于趋势状态的入场过滤:
@ -268,7 +268,7 @@ def _get_trading_config():
'USE_TREND_ENTRY_FILTER': True,
# 在信号方向上允许的最大累计趋势幅度(相对于信号价),超过则认为“时机太晚”,不再入场
# 例如0.08 表示价格沿趋势方向已经走了 8% 以上还没上车,则跳过本轮机会(快速验证模式:放宽阈值以增加交易机会)
'MAX_TREND_MOVE_BEFORE_ENTRY': 0.08,
'MAX_TREND_MOVE_BEFORE_ENTRY': 0.05,
# 趋势状态缓存的 TTL用于控制一轮趋势的“有效期”
'TREND_STATE_TTL_SEC': 3600,

View File

@ -498,7 +498,7 @@ class TradingStrategy:
reasons.append("❌ 4H趋势中性为提升胜率仅生成推荐不自动交易")
should_trade = False
# 如果信号方向与4H趋势相反直接拒绝交易
# 如果信号方向与4H趋势相反直接拒绝交易(所有模式)
if direction and trend_4h:
if (direction == 'BUY' and trend_4h == 'down') or (direction == 'SELL' and trend_4h == 'up'):
should_trade = False