Skip to content

Przełącznik torCrypto: czyste wyłączanie toru crypto bez fałszywych alarmów (post-mortem crypto off) - #41

Merged
mbeczynski merged 2 commits into
mainfrom
sprzatanie-toru-crypto
Oct 18, 2026
Merged

mbeczynski merged 2 commits into
mainfrom
sprzatanie-toru-crypto

Conversation

@mbeczynski

Copy link
Copy Markdown
Contributor

Po co

Tor crypto zamknięty 18.10 (B-0 = STOP, #40 blokuje nowe wejścia demo). Potok dalej chodzi i kosztuje. Ten PR wprowadza jeden przełącznik torCrypto.enabled w chartcie, który zdejmuje cały potok crypto bez fałszywych alarmów martwego procesu. W tym PR przełącznik zostaje na true: silnik może mieć otwarte pozycje albo niewypełnione zlecenia na Bybit demo.

Co jest wyłączone od razu (bezpieczne, equity tego nie potrzebuje)

  • Post-mortem crypto: postmortemCron.silniki: ["equity"]. To wywołania LLM na zamkniętych pozycjach toru, który nie ma już dokąd przekazać wniosków. Pozycji nie dotyka, bo tylko czyta zamknięte transakcje.

Co NIE jest wyłączone, wbrew wstępnej rekomendacji

  • workers.news zostaje. Equity korzysta z newsów: features-equity liczy news_sent z news.article_analysis dla instrumentów equity, a sygnał i reżim news_shock (signals.py) są wspólne dla obu silników. Trener equity uczy się na historii tej cechy. Wyłączenie skanera zostawiłoby silnik equity z luką w cesze, której model nie widział w treningu. Po torCrypto.enabled: false skaner przestaje pobierać tylko kanały krypto (--silniki equity, ok. 80 z ~190 artykułów na dobę). Kanały equity i makro (Fed, EBC) zostają.
  • Kanałów krypto nie wyłączam już teraz. Brak news_sent obniża pokrycie wag silnika crypto (news_shock ma wagę 0,10–0,14 poza reżimem newsowym) i przy MIN_POKRYCIE = 0,9 może odkładać decyzje, także wyjścia z otwartych pozycji.

Zależności toru equity od crypto i newsów (zbadane)

Element Czy equity potrzebuje?
news (skaner) TAK: cecha news_sent i reżim news_shock. Zostaje
market / history / features crypto nie: equity ma market-equity, history-equity, features-equity; features.py filtruje po --engine, ranking przekrojowy ma engine obowiązkowo
Filtr BTC nie: tylko strategia momentum silnika crypto
dozorca crypto nie: dozorca-equity ma własny puls i RiskKernel filtruje po engine/mode
kapital-equity nie: księgi Alpaki
Kurs USD/EUR (kursCron) nie zależy od workerów crypto (publiczne API bybit.eu, osobny CronJob). Zostaje
Trener equity, w_przod equity nie: osobny tor --engine equity
instrumentyCron, postmortemCron per silnik. Crypto odfiltrowane, equity bez zmian
Kapitał łączny w API ostatni znany kapitał crypto jest przenoszony dalej. Działa

Test test_RENDER_tor_equity_identyczny_w_obu_stanach pilnuje, że przełącznik nie zmienia żadnego Deploymentu equity.

Mechanizm czystego wyłączenia

Dlaczego przełącznik w chartcie, a nie status halted w bazie: status musiałby ktoś ustawić. Proces ustawiający go sam przy SIGTERM robiłby to też przy każdym rolloucie i ewikcji. Pod, który potem nie wstanie, wisiałby z napisem „zatrzymany świadomie”, czyli głośna awaria zamieniona na cichą. Zamiar wyłączenia to konfiguracja wdrożenia, więc czujka bierze go z tego samego miejsca co Deployment. Migracja nie jest potrzebna.

  • trader.workerWlaczony (_helpers.tpl) to jedna odpowiedź na pytanie „czy worker ma Deployment” (enabled + torCrypto). Korzystają z niej workers.yaml, networkpolicy.yaml i zywotnosc-cron.yaml.
  • dozor.py --workery-z-chartu <lista> dla --co zywotnosc i --co workery: wiersz pulsu procesu spoza listy (risk.engine_heartbeat, risk.dozorca_heartbeat, risk.worker_heartbeat) jest wypisywany jako „pomijam … wyłączony w chartcie” i nie daje engine.down. brakujacy_dozorcy nie oczekuje dozorcy toru wyłączonego. Bez flagi zachowanie jest dotychczasowe.
  • Przy torCrypto.enabled: false z trader-zywotnosc znikają też wywołania toru crypto: świeżość, odłożone, decyzje, instrumenty, poślizg, uzgodnienie, cennik spot_eu oraz proba-killswitcha z --zadania.
  • Trener: tor crypto razem z dozorem stanu nauki, dryfem i w_przod crypto chodzi tylko przy włączonym torze. Bez history/features liczyłby się na zamrożonym panelu.
  • probaCron: tylko przy włączonym torze, bo próba ćwiczy wyłącznie silnik crypto.

Warunek przełączenia i jak go sprawdzić

Silnik toru zamkniętego dopisuje teraz do linii podsumowania cyklu stan z bazy (loop.stan_domykania): otwarte pozycje, plany pending i zlecenia new/partial/unknown.

kubectl --context renacode logs deploy/trader-engine --since=1h | grep -E "DOMYKANIE|TOR DOMKNIĘTY"
  • … DOMYKANIE: otwarte pozycje N, plany oczekujące P, zlecenia w locie Z — silnika NIE wyłączać: jeszcze nie.
  • … TOR DOMKNIĘTY: 0 otwartych pozycji, 0 planów, 0 zleceń w locie: można przełączać.

Linia pojawia się dopiero po wdrożeniu obrazu z tego PR. Dziś log silnika nie wypisuje otwartych pozycji, jest w nim tylko wyjścia N w podsumowaniu.

Jedna zmiana values, która wyłącza resztę potoku (osobny commit na main, po linii „TOR DOMKNIĘTY” w kilku kolejnych cyklach):

torCrypto:
  enabled: false

Zdejmuje to trader-market, trader-history, trader-features, trader-engine, trader-dozorca i trader-proba-killswitcha, kanały krypto w trader-news oraz tor crypto w trenerze, instrumentach i czujkach.

Testy

  • Nowy tests/test_chart_tor_crypto.py (17 testów): render helmem w obu stanach, equity identyczne, czujki z listą procesów i bez niej, brakujacy_dozorcy, parser flagi, opis_domykania, stan_domykania na prawdziwej bazie.
  • Kanarki:
    • wylaczony_w_chartcie na sztywno False → 3 testy padają.
    • Helper chartu ignorujący torCrypto → 3 testy renderu padają.
    • Test bazodanowy: zapytanie musi policzyć wstawioną pozycję, więc stałe zero go nie przejdzie.
  • test_postmortem: wymagana lista silników = silniki bez zamkniętego toru.
  • Pełny zestaw jak w CI: timescaledb-ha:pg17 + db/migrate.py, ruff check . czysto, python -B -m pytest tests/ -o faulthandler_timeout=300 daje 3904 passed, 0 skipped.

Wątpliwości / do decyzji

  1. Panel (Overview) po wyłączeniu nadal pokaże silnik crypto z ostatnim pulsem (running, coraz starszy). To kosmetyka, alarmów nie ma.
  2. Po wyłączeniu toru nie ma próby pożarowej kill-switcha. Equity jej nie ma, proba_killswitcha.py ćwiczy crypto. Wariant equity to osobna decyzja.
  3. Aktywny kill-switch crypto (gdyby był w chwili wyłączenia) dalej będzie przypominany przez --co ryzyko. To celowe: stan wymaga człowieka.
  4. Seria H-4 i dryf crypto po przełączeniu przestają przybywać (trener crypto wyłączony). Rejestr hipotez mówił „trener liczy dalej”, ale na danych, które przestały napływać, nie miałoby to sensu.
  5. Komenda news zmieniona z sh -c "exec python …" na argv (żeby dokleić --silniki). Proces ten sam, dlatego Deployment trader-news zrestartuje się przy synchronizacji.

🤖 Generated with Claude Code

https://claude.ai/code/session_017S4D5yYFQmJsfcLx14gnjE

mbeczynski and others added 2 commits October 18, 2026 19:46
…larmow

Tor crypto zamkniety 18.10 (B-0 = STOP). Zamiast zdejmowac Deploymenty
recznie - jeden przelacznik `torCrypto.enabled` w chartcie:

- Deploymenty market/history/features/engine/dozorca maja `torCrypto: true`
  i znikaja razem z torem (`trader.workerWlaczony`, wspolny dla workers.yaml,
  networkpolicy.yaml i czujek),
- skaner wiadomosci ZOSTAJE (equity bierze z niego ceche news_sent),
  traci tylko kanaly krypto (`--silniki` doklejane z `silnikiZTorow`),
- trener, post-mortem, odswiezanie instrumentow, proba kill-switcha
  i czujki toru crypto w trader-zywotnosc - tylko przy wlaczonym torze,
- dozor `--co zywotnosc` i `--co workery` dostaja z chartu liste
  wlaczonych procesow (`--workery-z-chartu`): wiersz pulsu procesu
  wylaczonego w chartcie (zostaje z `running`) nie daje `engine.down`
  ani "MARTWY dozorca"; bez flagi zachowanie bez zmian,
- silnik toru zamknietego dopisuje do linii podsumowania cyklu
  "DOMYKANIE: pozycje/plany/zlecenia" albo "TOR DOMKNIĘTY" - warunek
  przelaczenia `torCrypto.enabled: false`.

W tym commicie tor crypto NADAL chodzi (`torCrypto.enabled: true`), bo
silnik moze miec otwarte pozycje na Bybit demo. Od razu wylaczony jest
tylko post-mortem dla crypto (`postmortemCron.silniki: ["equity"]`).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017S4D5yYFQmJsfcLx14gnjE
…ii cyklu, pusta lista silnikow skanera

- dozor: puls procesu spoza `--workery-z-chartu`, mlodszy niz jeden cykl
  procesu (silnik/dozorca: 5 min), to zepsute mapowanie nazw, nie
  wylaczenie - ostrzezenie `engine.down` (warning, raz na dobe) zamiast
  ciszy; test zgodnosci nazwy pulsu KAZDEGO workera danych z kluczem
  `workers` (regula potwierdzana w zrodle modulu),
- loop: `stan_domykania` w savepoincie i z przechwyconym bledem - log mowi
  "DOMYKANIE: nie wiem (blad: ...)", a blad nie liczy sie do POD_RZAD_MAX
  ani nie psuje transakcji cyklu,
- workers.yaml: pusta lista `silnikiZTorow` po filtrze to `fail` renderu,
  bo `--silniki ""` news_worker czyta jako wszystkie kanaly.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017S4D5yYFQmJsfcLx14gnjE
@mbeczynski
mbeczynski merged commit ef203f8 into main Oct 18, 2026
1 check passed
@mbeczynski
mbeczynski deleted the sprzatanie-toru-crypto branch October 18, 2026 18:11
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant