misc: binance momentum, telegram, frontend updates

This commit is contained in:
jackyu66git
2026-06-03 09:39:54 +08:00
parent b2ff322ef3
commit 23f3c61c9f
20 changed files with 928 additions and 86 deletions
+46 -2
View File
@@ -212,9 +212,12 @@ type Dashboard struct {
// Surge detector
surgeDetector *SurgeDetector
// Binance momentum detector
binanceMomentumDetector *BinanceMomentumDetector
}
func NewDashboard(store *PriceStore, database *db.DB, addr string, cfg *Config, momentumTracker *MomentumTracker, trendDetector *TrendDetector, cumulativeTracker *CumulativeTracker, trendFilter *TrendFilter, surgeDetector *SurgeDetector) *Dashboard {
func NewDashboard(store *PriceStore, database *db.DB, addr string, cfg *Config, momentumTracker *MomentumTracker, trendDetector *TrendDetector, cumulativeTracker *CumulativeTracker, trendFilter *TrendFilter, surgeDetector *SurgeDetector, binanceMomentumDetector *BinanceMomentumDetector) *Dashboard {
d := &Dashboard{
hub: NewSSEHub(),
history: newPriceHistory(),
@@ -228,7 +231,8 @@ func NewDashboard(store *PriceStore, database *db.DB, addr string, cfg *Config,
trendDetector: trendDetector,
cumulativeTracker: cumulativeTracker,
trendFilter: trendFilter,
surgeDetector: surgeDetector,
surgeDetector: surgeDetector,
binanceMomentumDetector: binanceMomentumDetector,
}
// Wire trend event persistence to SQLite
@@ -286,6 +290,8 @@ func (d *Dashboard) Run() {
mux.HandleFunc("GET /api/trend-signals", d.handleTrendSignals)
mux.HandleFunc("GET /api/surge-events", d.handleSurgeEvents)
mux.HandleFunc("GET /events", d.handleSSE)
mux.HandleFunc("GET /binance", d.handleBinanceIndex)
mux.HandleFunc("GET /api/binance-alerts", d.handleBinanceAlerts)
server := &http.Server{
Addr: d.addr,
@@ -435,6 +441,14 @@ func (d *Dashboard) broadcastLoop() {
d.hub.Broadcast("surge", surgeSnap)
}
}
// 9. Binance momentum snapshot (1-minute change for all coins)
if d.binanceMomentumDetector != nil && d.cfg.BinanceMomentumEnabled {
bmSnap := d.binanceMomentumDetector.Snapshot()
if len(bmSnap) > 0 {
d.hub.Broadcast("binance_momentum", bmSnap)
}
}
}
}
@@ -648,6 +662,36 @@ func (d *Dashboard) handleSSE(w http.ResponseWriter, r *http.Request) {
}
}
// handleBinanceIndex serves the Binance momentum monitor page.
func (d *Dashboard) handleBinanceIndex(w http.ResponseWriter, r *http.Request) {
var data []byte
var err error
data, err = os.ReadFile("frontend/dist/binance.html")
if err != nil {
data, err = staticFS.ReadFile("frontend/dist/binance.html")
}
if err != nil {
http.Error(w, "Not found", 404)
return
}
w.Header().Set("Content-Type", "text/html; charset=utf-8")
w.Write(data)
}
// handleBinanceAlerts returns recent Binance momentum alerts.
func (d *Dashboard) handleBinanceAlerts(w http.ResponseWriter, r *http.Request) {
if d.binanceMomentumDetector == nil {
writeJSON(w, map[string]interface{}{"alerts": []interface{}{}})
return
}
alerts := d.binanceMomentumDetector.RecentAlerts(50)
if alerts == nil {
alerts = []BinanceAlert{}
}
writeJSON(w, map[string]interface{}{"alerts": alerts})
}
func writeJSON(w http.ResponseWriter, v interface{}) {
w.Header().Set("Content-Type", "application/json")
json.NewEncoder(w).Encode(v)