This commit is contained in:
薇薇安 2026-01-19 23:08:52 +08:00
parent f495815af6
commit ec022b9c82
3 changed files with 42 additions and 5 deletions

View File

@ -82,6 +82,22 @@ SMART_ENTRY_CONFIG_DEFAULTS = {
},
}
# 自动交易过滤项:用于“提升胜率/控频”,避免震荡行情来回扫损导致胜率极低
AUTO_TRADE_FILTER_DEFAULTS = {
"AUTO_TRADE_ONLY_TRENDING": {
"value": True,
"type": "boolean",
"category": "strategy",
"description": "自动交易仅在市场状态=trending时执行ranging/unknown只生成推荐不自动下单。用于显著降低震荡扫损与交易次数。",
},
"AUTO_TRADE_ALLOW_4H_NEUTRAL": {
"value": False,
"type": "boolean",
"category": "strategy",
"description": "是否允许4H趋势=neutral时自动交易。默认关闭中性趋势最容易被扫损若你希望更积极可开启。",
},
}
@router.get("")
@router.get("/")
@ -105,6 +121,10 @@ async def get_all_configs():
for k, meta in SMART_ENTRY_CONFIG_DEFAULTS.items():
if k not in result:
result[k] = meta
for k, meta in AUTO_TRADE_FILTER_DEFAULTS.items():
if k not in result:
result[k] = meta
return result
except Exception as e:
raise HTTPException(status_code=500, detail=str(e))

View File

@ -208,6 +208,12 @@ def _get_trading_config():
'TRAILING_STOP_PROTECT': 0.05, # 保护利润提高到5%保护5%利润,更合理)
'POSITION_SYNC_INTERVAL': 60, # 持仓状态同步间隔缩短到1分钟确保状态及时同步
# ===== 自动交易过滤(用于提升胜率/控频)=====
# 是否仅在 marketRegime=trending 时才自动交易;否则只生成推荐
'AUTO_TRADE_ONLY_TRENDING': True,
# 是否允许 4H 趋势为 neutral 时自动交易;默认不允许(震荡最易扫损)
'AUTO_TRADE_ALLOW_4H_NEUTRAL': False,
# ===== 智能入场方案C=====
# 根治方案:默认关闭。关闭后回归“纯限价单模式”(不追价/不市价兜底/未成交撤单跳过)
'SMART_ENTRY_ENABLED': False,
@ -250,6 +256,10 @@ defaults = {
'ENTRY_CONFIRM_TIMEOUT_SEC': 30,
'ENTRY_MAX_DRIFT_PCT_TRENDING': 0.6,
'ENTRY_MAX_DRIFT_PCT_RANGING': 0.3,
# 自动交易过滤默认值
'AUTO_TRADE_ONLY_TRENDING': True,
'AUTO_TRADE_ALLOW_4H_NEUTRAL': False,
}
for key, value in defaults.items():
if key not in TRADING_CONFIG:

View File

@ -139,9 +139,9 @@ class TradingStrategy:
except Exception as e:
logger.warning(f"自动生成推荐失败 {symbol}: {e}")
# 提升胜率:震荡/未知市场状态不做自动交易(只保留推荐/观察)
# 你当前统计里“止损远多于止盈 + 平均持仓很短”高度符合震荡来回扫损特征。
if market_regime != 'trending':
# 提升胜率:可配置的“仅 trending 自动交易”过滤
only_trending = bool(config.TRADING_CONFIG.get("AUTO_TRADE_ONLY_TRENDING", True))
if only_trending and market_regime != 'trending':
logger.info(f"{symbol} 市场状态={market_regime},跳过自动交易(仅生成推荐)")
continue
@ -417,11 +417,17 @@ class TradingStrategy:
# 判断是否应该交易(信号强度 >= 7 才交易,提高胜率)
min_signal_strength = config.TRADING_CONFIG.get('MIN_SIGNAL_STRENGTH', 7)
# 强度上限归一到 0-10避免出现 12/10 这种误导显示
try:
signal_strength = max(0, min(int(signal_strength), 10))
except Exception:
pass
should_trade = signal_strength >= min_signal_strength and direction is not None
# 提升胜率4H趋势中性时不做自动交易只保留推荐/观察)
# 经验上,中性趋势下“趋势跟踪”信号更容易被来回扫损,导致胜率显著降低与交易次数激增。
if trend_4h == 'neutral':
allow_neutral = bool(config.TRADING_CONFIG.get("AUTO_TRADE_ALLOW_4H_NEUTRAL", False))
if (trend_4h == 'neutral') and (not allow_neutral):
if should_trade:
reasons.append("❌ 4H趋势中性为提升胜率仅生成推荐不自动交易")
should_trade = False
@ -432,7 +438,8 @@ class TradingStrategy:
should_trade = False
reasons.append("❌ 禁止逆4H趋势交易")
if not should_trade and direction:
# 只在“真的强度不足”时追加该原因;避免出现“强度>=阈值但被其它过滤挡住”仍提示强度不足
if direction and (signal_strength < min_signal_strength):
reasons.append(f"信号强度不足({signal_strength}/10需要≥{min_signal_strength})")
return {