Repository navigation
Poprawki pomiaru equity: sesja w symulacji (A-2), IC per sygnał (A-3), bez shortów na akcjach (A-5) - #39
Merged
Conversation
mbeczynski
added a commit
that referenced
this pull request
Oct 18, 2026
…ń, IC w sesji - `portfolio.okno_wykonania` (czysta funkcja) zastępuje regułę w domknięciu: decyzja 15:00 NY przy modelu pesymistycznym nie jest odrzucana - okno wypełnienia to reszta godziny wysyłki do zamknięcia (`do_zamkniecia`, świeca godziny wysyłki w `wycena_wysylki`); świeca przedsesyjna dostaje decyzję w pierwszym cyklu po otwarciu - wyjście tak (wysyłka otwarcie + opóźnienie), wejście nie (`decyzja_przeterminowana` w pętli). - `poza_sesja` liczy zlecenia, nie świece: raz na ciąg świec poza sesją dla pozycji (`poza_sesja_wyjscia`) albo instrumentu (`poza_sesja_wejscia`). - IC per sygnał na rynku z sesją tylko ze świec, z których symulacja może wejść (`swieca_wejscia`); wagi bez zmian. - `sesja.KalendarzSesji` (otwarta + otwarcie dnia), `NYSE_REGULARNA`. Krypto bez zmian: zrzut równoważności przechodzi bez przegenerowania. `test_przebicie_nie_dotyczy_wyjsc` liczy flagę tylko przy `zlecenie_z_limitem`. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017S4D5yYFQmJsfcLx14gnjE
mbeczynski
added a commit
that referenced
this pull request
Oct 18, 2026
…ń, IC w sesji - `portfolio.okno_wykonania` (czysta funkcja) zastępuje regułę w domknięciu: decyzja 15:00 NY przy modelu pesymistycznym nie jest odrzucana - okno wypełnienia to reszta godziny wysyłki do zamknięcia (`do_zamkniecia`, świeca godziny wysyłki w `wycena_wysylki`); świeca przedsesyjna dostaje decyzję w pierwszym cyklu po otwarciu - wyjście tak (wysyłka otwarcie + opóźnienie), wejście nie (`decyzja_przeterminowana` w pętli). - `poza_sesja` liczy zlecenia, nie świece: raz na ciąg świec poza sesją dla pozycji (`poza_sesja_wyjscia`) albo instrumentu (`poza_sesja_wejscia`). - IC per sygnał na rynku z sesją tylko ze świec, z których symulacja może wejść (`swieca_wejscia`); wagi bez zmian. - `sesja.KalendarzSesji` (otwarta + otwarcie dnia), `NYSE_REGULARNA`. Krypto bez zmian: zrzut równoważności przechodzi bez przegenerowania. `test_przebicie_nie_dotyczy_wyjsc` liczy flagę tylko przy `zlecenie_z_limitem`. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017S4D5yYFQmJsfcLx14gnjE
mbeczynski
force-pushed
the
trader/poprawki-pomiaru-equity
branch
from
October 18, 2026 11:55
c0dc2be to
98ac08d
Compare
… shortów na akcjach A-2: symulacja nie składa zleceń, których pętla nie złoży, bo giełda jest zamknięta. `sesja.sesja_historyczna(kind)` - sesja regularna NYSE 9:30-16:00 czasu Nowego Jorku dla `stock`/`etf`, None (rynek ciągły) dla krypto. `simulate_portfolio` sprawdza chwilę decyzji, wysyłki i - w modelu pesymistycznym - godzinę wypełnienia; pominięte zlecenia liczy `PortfolioResult.poza_sesja` (poza wypełnialnością). Przebieg 18.10 miał 890 z 4061 zleceń equity "bez świecy 1h" z decyzji na ostatniej świecy sesji. A-3: tabela IC per sygnał (razem i per reżim) na oknach testowych, średnia i okna z IC > 0 - wyłącznie wydruk, po wyborze wag. Zbieranie par IC wydzielone do `_pary_ic`, wspólne z `_wagi_z_ic` (bez zmiany zachowania). A-5: `krotka_pozycja=False` dla `stock` i `etf` - koszt pożyczki papieru nie był liczony ani w symulacji, ani na Alpaca paper. Ta sama flaga czyta symulacja (`pominiete_shorty`), pętla (`short_niewykonalny`) i trener (`strona_uczenia` -> `strona: dluga`, zmiana struktury -> candidate). Zrzut `trener_rownowaznosc.json` przegenerowany: siedem wariantów krypto sprawdzone wobec zrzutu z 11.10 - JSON bez `poza_sesja` i wydruk bez tabeli IC identyczne. `ic_stock` zastąpiony `ic_perp` (opis w docstringu testu). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017S4D5yYFQmJsfcLx14gnjE
…ń, IC w sesji - `portfolio.okno_wykonania` (czysta funkcja) zastępuje regułę w domknięciu: decyzja 15:00 NY przy modelu pesymistycznym nie jest odrzucana - okno wypełnienia to reszta godziny wysyłki do zamknięcia (`do_zamkniecia`, świeca godziny wysyłki w `wycena_wysylki`); świeca przedsesyjna dostaje decyzję w pierwszym cyklu po otwarciu - wyjście tak (wysyłka otwarcie + opóźnienie), wejście nie (`decyzja_przeterminowana` w pętli). - `poza_sesja` liczy zlecenia, nie świece: raz na ciąg świec poza sesją dla pozycji (`poza_sesja_wyjscia`) albo instrumentu (`poza_sesja_wejscia`). - IC per sygnał na rynku z sesją tylko ze świec, z których symulacja może wejść (`swieca_wejscia`); wagi bez zmian. - `sesja.KalendarzSesji` (otwarta + otwarcie dnia), `NYSE_REGULARNA`. Krypto bez zmian: zrzut równoważności przechodzi bez przegenerowania. `test_przebicie_nie_dotyczy_wyjsc` liczy flagę tylko przy `zlecenie_z_limitem`. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017S4D5yYFQmJsfcLx14gnjE
`sesja_regularna_nyse` i `KalendarzSesji` używają `STREFA_US` i `otwarcie_sesji_us` z #38 - tej samej funkcji, której pętla używa w `StanSesji.swieca_przed_otwarciem`. Usunięte zdublowane `NYSE`, `OTWARCIE_NYSE` i `otwarcie_nyse`. Świeca przedsesyjna w symulacji opisana jako `swieca_przed_sesja` (wejścia nie, wyjścia tak) - jak w pętli. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017S4D5yYFQmJsfcLx14gnjE
mbeczynski
force-pushed
the
trader/poprawki-pomiaru-equity
branch
from
October 18, 2026 12:03
98ac08d to
ae0a659
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Poprawki pomiaru w torze equity, wskazane przez niezależną analizę przebiegu trenera z 18.10. Każdą sprawdziłem w kodzie przed zmianą. Krypto nie zmienia wyniku (dowód niżej).
A-2: brak decyzji poza sesją giełdy (tzw. widma)
Wada. Symulacja decydowała na każdej świecy panelu equity, także na świecach przed- i posesyjnych Alpaki oraz na ostatniej świecy sesji. Decyzja z tej świecy zapada o 16:00 czasu Nowego Jorku, a zlecenie wychodzi o 16:20. Pętla takiej decyzji nie podejmuje (BRAMKA 1 w
loop.py,/v2/clock). W symulacji takie zlecenie liczyło się jako niewypełnione z braku świecy 1h:brak_swiec_1h: 890z 4061 zleceń. Niewypełnione wyjście trzymało pozycję przez lukę otwarcia, której produkcja nie ma.Poprawka.
sesja.sesja_historyczna(kind)stosuje tę samą regułę co pętla: rynek ciągły decyduje zawsze, a rynek z sesją tylko przy otwartej sesji. Zegara giełdy w historii nie ma (ref.session_calendarjest pusta), dlatego używam kalendarza sesji regularnej NYSE (9:30–16:00 America/New_York, pon.–pt.) dlastock/etf. Dla krypto wynik toNone.portfolio.okno_wykonania(czysta funkcja, reguły jak wloop.py):decyzja_przeterminowana);poza_sesja_wejscia/poza_sesja_wyjscialiczą zlecenia: jedno na ciąg świec poza sesją dla instrumentu albo pozycji, nie każdą świecę. Do wypełnialności nie wchodzą.PODSUMOWANIE_JSONma kluczpoza_sesja.Czego kalendarz nie zna: świąt (w święto nie ma świec, więc i tak nie ma decyzji) i sesji skróconych do 13:00 (ok. 3 dni w roku, po 13:00 symulacja może tam jeszcze decydować). Strefa
America/New_Yorkjest w przypiętym obraziepython:3.12-slim@sha256:2f17…(sprawdzonedocker run).A-3: IC per sygnał w logu trenera
Po walk-forwardzie trener wypisuje tabelę: sygnał × (razem, reżimy). Każda komórka to średnia IC z okien testowych oraz liczba okien z IC > 0 na liczbę okien z IC. To czysta diagnostyka: liczy się z
cache_tepo wyborze wag i nie trafia do żadnej decyzji ani zapisu. Zbieranie par wydzieliłem do_pary_ic, wspólnego z_wagi_z_ic, bez zmiany zachowania. Podaję średnią po oknach zamiast jednej korelacji po panelu, bo etykiety sąsiednich świec nachodzą na siebie o H-1 świec.A-5: bez nogi krótkiej na akcjach
Wada. Dla
CENNIK["stock"]byłokrotka_pozycja=True, a kosztu pożyczki papieru nie liczyła ani symulacja, ani Alpaca paper. Wynik shortów był więc fikcją w obu miejscach.Poprawka (korekta pomiaru). Ustawiłem
krotka_pozycja=Falsedlastockietf. Trener liczy SPY w torze--kind stock, a pętla czyta rodzaj zref.instrument(SPY =etf). Przy różnych flagach produkcja grałaby shorty SPY, których symulacja nie zna. To samo pole czytają:pominiete_shorty),enter_shortdajeholdz powodemshort_niewykonalny(loop.py),strona_uczenia("stock") == "dluga"(H-6), czyli progi i IC liczone ze strony długiej,evaluate_limits: brakmax_leverageprzestaje blokowaćstock(reguła dotyczy tylko instrumentów z nogą krótką).Skutek dla modelu.
paramstoru equity dostają kluczstrona: "dluga".zmiana_strukturyzgłasza+strona, więc nowa wersja zostajecandidatei jest nową konfiguracją w N deflacji (N+1). Silnik equity na demo chodzi z--model-status candidate, więc po pierwszym przebiegu trenera po wdrożeniu zacznie grać tę wersję. Otwarte shorty (jeśli są) zamykają się normalnie, bo flaga blokuje tylko wejścia.Jak cofnąć: revert tego commita. Flagi wracają na
True,paramstracąstrona, to znów zmiana struktury, więc kolejna wersja będziecandidate. Powrót do shortów na stałe wymaga zmierzonej stawki pożyczki naliczanej wsimulate_portfolio.Testy
python -B -m pytest: 3674 passed, 148 skipped (przed zmianą 3623/148).ruff checkczysty.tests/test_sesja_w_symulacji.py(granice sesji EDT/EST, weekend; brak decyzji wejścia i wyjścia poza sesją przy świecach 1h o każdej godzinie; kanarek bez kalendarza; kryptospot/spot_eu/perpidentyczne co do transakcji, krzywej i liczników) oraztests/test_ic_sygnalow.py.test_runda_w_zwrocie.py, gdzie test pilnującykrotka_pozycja=Trueodwróciłem świadomie i dodałem test braku shortów w symulacji nastock. Wtest_trener_cde.pyH-6 obejmuje terazstock→dluga.Truepada 9 testów (sesja, A-5, H-6).trener_rownowaznosc.jsonprzegenerowałem. Przed zapisem sprawdziłem 7 wariantów krypto wobec zrzutu z 11.10: JSON bezpoza_sesja(także wprzesuniecia) przechodzi_bliskie, a wydruk bez tabeli IC jest identyczny linia po linii. Wariantic_stockzastąpiłemic_perp, bo panel syntetyczny 24/7 daje na akcjach jedną decyzję w sesji dziennie, czyli 0 okien.Ryzyka / czego to nie robi
proby_wynikow) i wagi IC equity nadal liczą się ze wszystkich świec panelu, łącznie z przed- i posesyjnymi, na których produkcja nie decyduje. To osobna korekta (rozkład, z którego idzie p88), poza zakresem tego PR.🤖 Generated with Claude Code
https://claude.ai/code/session_017S4D5yYFQmJsfcLx14gnjE