scheduler: auto-detect new signals once per day, deduplicate existing
- scheduler tick runs detect after fetch+score (once per UTC day) - ChanSignalDetector skips already-recorded signals - Prevents duplicate signal_features entries on repeated runs
This commit is contained in:
@@ -145,10 +145,26 @@ class ChanSignalDetector:
|
||||
logger.warning("未检测到任何 BSP 信号")
|
||||
return 0
|
||||
|
||||
# Step 2: 写入 signal_features(含市场状态和 forward outcomes)
|
||||
# Step 2: 去重 — 跳过已存在的信号
|
||||
from database import get_connection
|
||||
conn = get_connection()
|
||||
existing = set()
|
||||
for row in conn.execute(
|
||||
"SELECT date, signal_type FROM signal_features"
|
||||
).fetchall():
|
||||
existing.add((row[0], row[1]))
|
||||
conn.close()
|
||||
|
||||
new_signals = [s for s in signals
|
||||
if (str(s["date"]), s["signal_type"]) not in existing]
|
||||
if not new_signals:
|
||||
logger.info("所有信号已存在,跳过")
|
||||
return 0
|
||||
|
||||
# Step 3: 写入 signal_features
|
||||
from expectancy.tracker import SignalTracker
|
||||
tracker = SignalTracker()
|
||||
count = tracker.backfill_signals(signals)
|
||||
count = tracker.backfill_signals(new_signals)
|
||||
|
||||
logger.info(f"信号入库完成: {count}/{len(signals)}")
|
||||
return count
|
||||
|
||||
Reference in New Issue
Block a user