3.2 KiB
Momentum Service V1
Ten dokument definiuje pierwszy osobny mikroserwis dla bloku
Momentum z bot1.tex.
Cel
momentum-service liczy tylko skladniki momentum i
zmiennosci z candles.
Zakres v1:
mom_3smom_10smom_30svol_30s
Poza zakresem v1:
- spread
- depth
- slippage
- gating
- scoring
- zapis decyzji tradingowej
Zasady
Hasurajest jedynym source of truth dla danych wejsciowych.Fastifyjest shell-em mikroserwisu i wystawia wynik przez endpointy.- Serwis nie utrzymuje osobnego trwalego stanu prawdy.
- W v1 wynik jest wystawiany przez HTTP i trzymany tylko jako latest runtime snapshot.
Dlaczego to jest osobny serwis
momentum-service jest dobrym deployment boundary, bo
caly jego processing zalezy tylko od candles i nie potrzebuje danych
DLOB.
To znaczy:
momentumivolatilitysa razem w jednym serwisie- poszczegolne horyzonty
mom_3s,mom_10s,mom_30snie sa osobnymi procesami - granica serwisu jest wyznaczona przez wspolne wejscie i wspolny wynik runtime, a nie przez pojedynczy wzor
Wejscie
Serwis czyta z Hasury:
bot_configpoBOT_IDalboBOT_NAMEget_drift_candles(...)
Minimalne dane z bot_config:
{
"market_name": "SOL-PERP",
"params": {
"loop": {
"decision_interval_ms": 1000,
"candle_bucket_seconds": 1,
"candles_limit": 64
},
"features": {
"mom_fast_s": 3,
"mom_mid_s": 10,
"mom_slow_s": 30,
"vol_window_s": 30
}
}
}Processing
Model liczenia odpowiada definicjom z bot1.tex:
mom_k(t) = 10^4 * (c_t / c_{t-k} - 1)
oraz:
vol_W = stddev(r_i), gdzie r_i = 10^4 * (c_i / c_{i-1} - 1)
Serwis nie uzywa orderbooka ani tabel derived DLOB.
Wyjscie
V1 wystawia wynik przez:
GET /healthzGET /readyzGET /statusGET /result/latestPOST /run
Przykladowy wynik GET /result/latest:
{
"ok": true,
"service": "momentum-service",
"version": "momentum-service-v1",
"bot": {
"id": "uuid",
"name": "sol-observer"
},
"market": {
"name": "SOL-PERP",
"candle_bucket_seconds": 1,
"candles_limit": 64
},
"features": {
"mom_3s": 3.8,
"mom_10s": 6.1,
"mom_30s": -12.5,
"vol_30s": 4.2
},
"snapshot": {
"latest_candle_at": "2026-03-27T22:44:10.000Z",
"candles_count": 64,
"query_latency_ms": 41,
"compute_latency_ms": 1
}
}Runtime
Petla v1:
- laduje
bot_config - pobiera candles
- liczy momentum i volatility
- odswieza
latest result
Domyslnie:
- loop
1000 ms - candles
1s 64swiece
Bledy
Serwis zwraca:
503na/readyz, gdy nie ma swiezego poprawnego wyniku404na nieznane endpointy500naPOST /run, jesli tick zakonczyl sie bledem
Blad Hasury nie zatrzymuje procesu na stale. Serwis pozostaje online,
ale ready przechodzi na false, dopoki kolejny
poprawny tick nie odswiezy wyniku.
Relacja do innych serwisow
momentum-service jest kandydatem na osobny building
block dla:
observer-servicescoring-service- downstream debug UI
W kolejnych wersjach wynik moze byc:
- nadal tylko czytany przez HTTP,
- albo dodatkowo zapisywany do osobnej tabeli w Hasurze.