a
This commit is contained in:
parent
f495815af6
commit
ec022b9c82
|
|
@ -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("")
|
||||||
@router.get("/")
|
@router.get("/")
|
||||||
|
|
@ -105,6 +121,10 @@ async def get_all_configs():
|
||||||
for k, meta in SMART_ENTRY_CONFIG_DEFAULTS.items():
|
for k, meta in SMART_ENTRY_CONFIG_DEFAULTS.items():
|
||||||
if k not in result:
|
if k not in result:
|
||||||
result[k] = meta
|
result[k] = meta
|
||||||
|
|
||||||
|
for k, meta in AUTO_TRADE_FILTER_DEFAULTS.items():
|
||||||
|
if k not in result:
|
||||||
|
result[k] = meta
|
||||||
return result
|
return result
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
raise HTTPException(status_code=500, detail=str(e))
|
raise HTTPException(status_code=500, detail=str(e))
|
||||||
|
|
|
||||||
|
|
@ -208,6 +208,12 @@ def _get_trading_config():
|
||||||
'TRAILING_STOP_PROTECT': 0.05, # 保护利润提高到5%(保护5%利润,更合理)
|
'TRAILING_STOP_PROTECT': 0.05, # 保护利润提高到5%(保护5%利润,更合理)
|
||||||
'POSITION_SYNC_INTERVAL': 60, # 持仓状态同步间隔(秒),缩短到1分钟,确保状态及时同步
|
'POSITION_SYNC_INTERVAL': 60, # 持仓状态同步间隔(秒),缩短到1分钟,确保状态及时同步
|
||||||
|
|
||||||
|
# ===== 自动交易过滤(用于提升胜率/控频)=====
|
||||||
|
# 是否仅在 marketRegime=trending 时才自动交易;否则只生成推荐
|
||||||
|
'AUTO_TRADE_ONLY_TRENDING': True,
|
||||||
|
# 是否允许 4H 趋势为 neutral 时自动交易;默认不允许(震荡最易扫损)
|
||||||
|
'AUTO_TRADE_ALLOW_4H_NEUTRAL': False,
|
||||||
|
|
||||||
# ===== 智能入场(方案C)=====
|
# ===== 智能入场(方案C)=====
|
||||||
# 根治方案:默认关闭。关闭后回归“纯限价单模式”(不追价/不市价兜底/未成交撤单跳过)
|
# 根治方案:默认关闭。关闭后回归“纯限价单模式”(不追价/不市价兜底/未成交撤单跳过)
|
||||||
'SMART_ENTRY_ENABLED': False,
|
'SMART_ENTRY_ENABLED': False,
|
||||||
|
|
@ -250,6 +256,10 @@ defaults = {
|
||||||
'ENTRY_CONFIRM_TIMEOUT_SEC': 30,
|
'ENTRY_CONFIRM_TIMEOUT_SEC': 30,
|
||||||
'ENTRY_MAX_DRIFT_PCT_TRENDING': 0.6,
|
'ENTRY_MAX_DRIFT_PCT_TRENDING': 0.6,
|
||||||
'ENTRY_MAX_DRIFT_PCT_RANGING': 0.3,
|
'ENTRY_MAX_DRIFT_PCT_RANGING': 0.3,
|
||||||
|
|
||||||
|
# 自动交易过滤默认值
|
||||||
|
'AUTO_TRADE_ONLY_TRENDING': True,
|
||||||
|
'AUTO_TRADE_ALLOW_4H_NEUTRAL': False,
|
||||||
}
|
}
|
||||||
for key, value in defaults.items():
|
for key, value in defaults.items():
|
||||||
if key not in TRADING_CONFIG:
|
if key not in TRADING_CONFIG:
|
||||||
|
|
|
||||||
|
|
@ -139,9 +139,9 @@ class TradingStrategy:
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.warning(f"自动生成推荐失败 {symbol}: {e}")
|
logger.warning(f"自动生成推荐失败 {symbol}: {e}")
|
||||||
|
|
||||||
# 提升胜率:震荡/未知市场状态不做自动交易(只保留推荐/观察)
|
# 提升胜率:可配置的“仅 trending 自动交易”过滤
|
||||||
# 你当前统计里“止损远多于止盈 + 平均持仓很短”高度符合震荡来回扫损特征。
|
only_trending = bool(config.TRADING_CONFIG.get("AUTO_TRADE_ONLY_TRENDING", True))
|
||||||
if market_regime != 'trending':
|
if only_trending and market_regime != 'trending':
|
||||||
logger.info(f"{symbol} 市场状态={market_regime},跳过自动交易(仅生成推荐)")
|
logger.info(f"{symbol} 市场状态={market_regime},跳过自动交易(仅生成推荐)")
|
||||||
continue
|
continue
|
||||||
|
|
||||||
|
|
@ -417,11 +417,17 @@ class TradingStrategy:
|
||||||
|
|
||||||
# 判断是否应该交易(信号强度 >= 7 才交易,提高胜率)
|
# 判断是否应该交易(信号强度 >= 7 才交易,提高胜率)
|
||||||
min_signal_strength = config.TRADING_CONFIG.get('MIN_SIGNAL_STRENGTH', 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
|
should_trade = signal_strength >= min_signal_strength and direction is not None
|
||||||
|
|
||||||
# 提升胜率:4H趋势中性时不做自动交易(只保留推荐/观察)
|
# 提升胜率: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:
|
if should_trade:
|
||||||
reasons.append("❌ 4H趋势中性(为提升胜率:仅生成推荐,不自动交易)")
|
reasons.append("❌ 4H趋势中性(为提升胜率:仅生成推荐,不自动交易)")
|
||||||
should_trade = False
|
should_trade = False
|
||||||
|
|
@ -432,7 +438,8 @@ class TradingStrategy:
|
||||||
should_trade = False
|
should_trade = False
|
||||||
reasons.append("❌ 禁止逆4H趋势交易")
|
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})")
|
reasons.append(f"信号强度不足({signal_strength}/10,需要≥{min_signal_strength})")
|
||||||
|
|
||||||
return {
|
return {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user