From a571a221e5989a42221bd4916c38e70151f61a0a Mon Sep 17 00:00:00 2001 From: root Date: Sun, 1 Mar 2026 23:35:45 +0000 Subject: [PATCH] feat: gradient liquidation scoring - no threshold, ratio-based MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Removed USD threshold gates. Now any liquidation data triggers scoring: - ratio ≥ 2.0 → +5 (extreme imbalance) - ratio ≥ 1.5 → +3 - ratio ≥ 1.2 → +1 - ratio 0.8~1.2 → 0 (balanced) - Inverse for SHORT direction --- backend/signal_engine.py | 31 ++++++++++++++++++++----------- signal-engine.log | 20 ++++++++++++++++++++ 2 files changed, 40 insertions(+), 11 deletions(-) diff --git a/backend/signal_engine.py b/backend/signal_engine.py index b96afef..48dd735 100644 --- a/backend/signal_engine.py +++ b/backend/signal_engine.py @@ -521,20 +521,29 @@ class SymbolState: if liq_data: liq_long_usd = liq_data.get("long_usd", 0) liq_short_usd = liq_data.get("short_usd", 0) - thresholds = {"BTCUSDT": 500000, "ETHUSDT": 200000, "XRPUSDT": 100000, "SOLUSDT": 100000} - threshold = thresholds.get(self.symbol, 100000) total = liq_long_usd + liq_short_usd - if total >= threshold: - if liq_short_usd > 0 and liq_long_usd > 0: + if total > 0: + # ratio = 空头清算 / 多头清算 + # ratio高 = 空头爆仓多 = 有利于做多 + if liq_long_usd > 0: ratio = liq_short_usd / liq_long_usd - elif liq_short_usd > 0: - ratio = float("inf") else: - ratio = 0 - if ratio >= 2.0 and direction == "LONG": - liq_score = 5 - elif ratio <= 0.5 and direction == "SHORT": - liq_score = 5 + ratio = float("inf") if liq_short_usd > 0 else 1.0 + + # 梯度评分:ratio越极端分越高 + def liq_ratio_to_score(r: float) -> int: + if r >= 2.0: return 5 + if r >= 1.5: return 3 + if r >= 1.2: return 1 + return 0 + + if direction == "LONG": + # 做多:空头爆仓多(ratio高)有利 + liq_score = liq_ratio_to_score(ratio) + else: + # 做空:多头爆仓多(ratio低=1/ratio高)有利 + inv_ratio = (1.0 / ratio) if ratio > 0 else float("inf") + liq_score = liq_ratio_to_score(inv_ratio) # 5) 辅助层(5分) coinbase_premium = to_float(self.market_indicators.get("coinbase_premium")) diff --git a/signal-engine.log b/signal-engine.log index 607f6e5..a6da8f7 100644 --- a/signal-engine.log +++ b/signal-engine.log @@ -20,3 +20,23 @@ 2026-03-01 23:14:20,717 [INFO] signal-engine: [SOLUSDT] 🚨 信号[v51_baseline]: LONG score=92 price=83.2 2026-03-01 23:14:20,717 [INFO] signal-engine: [SOLUSDT] 🚨 信号[v52_8signals]: LONG score=97 price=83.2 2026-03-01 23:14:52,024 [INFO] signal-engine: 冷启动保护期结束,模拟盘开仓已启用 +2026-03-01 23:23:48,162 [INFO] signal-engine: 已加载策略配置: v51_baseline, v52_8signals +2026-03-01 23:23:51,129 [INFO] signal-engine: [BTCUSDT] 冷启动完成: 加载454,017条历史数据 (窗口=4h) +2026-03-01 23:23:54,321 [INFO] signal-engine: [ETHUSDT] 冷启动完成: 加载489,974条历史数据 (窗口=4h) +2026-03-01 23:23:54,744 [INFO] signal-engine: [XRPUSDT] 冷启动完成: 加载65,115条历史数据 (窗口=4h) +2026-03-01 23:23:55,256 [INFO] signal-engine: [SOLUSDT] 冷启动完成: 加载72,235条历史数据 (窗口=4h) +2026-03-01 23:23:55,257 [INFO] signal-engine: === Signal Engine (PG) 启动完成 === +2026-03-01 23:23:55,497 [INFO] signal-engine: [BTCUSDT] 🚨 信号[v51_baseline]: LONG score=95 price=65616.4 +2026-03-01 23:23:55,497 [INFO] signal-engine: [BTCUSDT] 🚨 信号[v52_8signals]: LONG score=95 price=65616.4 +2026-03-01 23:23:55,960 [INFO] signal-engine: [SOLUSDT] 🚨 信号[v51_baseline]: LONG score=92 price=83.4 +2026-03-01 23:23:55,961 [INFO] signal-engine: [SOLUSDT] 🚨 信号[v52_8signals]: LONG score=92 price=83.4 +2026-03-01 23:24:27,328 [INFO] signal-engine: 冷启动保护期结束,模拟盘开仓已启用 +2026-03-01 23:32:18,630 [INFO] signal-engine: [XRPUSDT] 🚨 信号[v51_baseline]: SHORT score=82 price=1.4 +2026-03-01 23:32:18,630 [INFO] signal-engine: [XRPUSDT] 🚨 信号[v52_8signals]: SHORT score=82 price=1.4 +2026-03-01 23:32:18,652 [INFO] signal-engine: [XRPUSDT] 📝 模拟开仓: SHORT @ 1.35 score=82 tier=standard strategy=v52_8signals TP1=1.34 TP2=1.33 SL=1.36 +2026-03-01 23:34:08,143 [INFO] signal-engine: [BTCUSDT] 🚨 信号[v51_baseline]: LONG score=85 price=65781.9 +2026-03-01 23:34:08,144 [INFO] signal-engine: [BTCUSDT] 🚨 信号[v52_8signals]: LONG score=85 price=65781.9 +2026-03-01 23:34:08,165 [INFO] signal-engine: [BTCUSDT] 📝 模拟开仓: LONG @ 65781.85 score=85 tier=heavy strategy=v52_8signals TP1=66122.21 TP2=66547.66 SL=65271.31 +2026-03-01 23:34:08,664 [INFO] signal-engine: [SOLUSDT] 🚨 信号[v51_baseline]: LONG score=87 price=83.5 +2026-03-01 23:34:08,664 [INFO] signal-engine: [SOLUSDT] 🚨 信号[v52_8signals]: LONG score=87 price=83.5 +2026-03-01 23:34:08,686 [INFO] signal-engine: [SOLUSDT] 📝 模拟开仓: LONG @ 83.54 score=87 tier=heavy strategy=v52_8signals TP1=84.10 TP2=84.80 SL=82.70