bsp_monitor: 支持全部20个币对 + 数据源切换至data_provider + Python 3.9兼容

- fetcher.py: 数据源从CCXT改为data_provider HTTP API,新增get_symbols()自动获取所有币对
- main.py: 重构为多币对架构,每个币对独立SymbolState(pivot_monitor/BSP去重/首轮抑制)
- engine.py: format_bsp_detail()支持动态币对名
- ChanPivotMonitor/Classifier: 修复Python 3.9类型注解兼容(X|None → Optional[X])
- 首轮初始化时不推送中枢和BSP,避免启动时20条消息轰炸

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
jackyu66git
2026-05-26 11:55:23 +08:00
co-authored by Claude Opus 4.7
parent b1cbdca707
commit 881c9d5eac
5 changed files with 153 additions and 117 deletions
+5 -4
View File
@@ -8,6 +8,7 @@ shift / contraction / duration。
"""
from collections import deque
from typing import Optional
from ChanPivotClassifier import ChanPivotClassifier
@@ -22,17 +23,17 @@ class ChanPivotMonitor:
def __init__(self, window_size: int = 10):
self._window_size = window_size
self._duration_history: deque[int] = deque(maxlen=window_size)
self._current_zs_id: tuple | None = None
self._current_zs_id: Optional[tuple] = None
self._current_bi_count: int = 0
self._current_is_sure: bool = False
self._current_state: dict | None = None
self._current_state: Optional[dict] = None
self._duration_added_for_zs: set = set() # 已加入窗口的中枢 ID
# ------------------------------------------------------------------
# Public API
# ------------------------------------------------------------------
def update(self, bi_zs_list: list) -> dict | None:
def update(self, bi_zs_list: list) -> Optional[dict]:
"""
主入口:检测当前中枢特征变化。
@@ -96,7 +97,7 @@ class ChanPivotMonitor:
return self._current_state
def get_current(self) -> dict | None:
def get_current(self) -> Optional[dict]:
"""返回当前中枢的最新特征"""
return self._current_state