a
This commit is contained in:
parent
8337893b0c
commit
15394445b4
|
|
@ -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": {
|
||||
|
|
|
|||
|
|
@ -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), # 默认7(2026-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):
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user