[13]
GIEŁDA-TRACKER
▓ TIER B · ROK 2026 · STATUS: DZIAŁA · JĘZYKI: TYPESCRIPT
Analiza fundamentalna i techniczna spółek US — lokalnie, z darmowych API
[FIG. 1] MISJA
Moją własną analizę inwestycyjną zabijało 51 punktów rozsianych po 38 źródłach i płatnych terminalach, więc zbudowałem lokalną aplikację, która ściąga dane z darmowych API (SEC EDGAR, Yahoo, Finnhub, FMP, FRED) do SQLite i własnymi silnikami liczy wskaźniki, composite-score, wyceny DCF/mnożniki/DDM oraz sygnał techniczny LONG/SHORT/NEUTRAL. Przepływ jest jednokierunkowy i rozdzielony w czasie: sync pobiera surowe dane, recompute przelicza wszystko do jednej tabeli, a UI renderuje wyłącznie z bazy — brak klucza czy wyczerpany budżet API degraduje się do banera, nigdy do błędu. Silniki liczące pisałem test-first: 206 przypadków z kanonicznymi wartościami (RSI 70.46, DCF iv≈37,85) powstało przed implementacją. Najwięcej nauczyło mnie to, co się wysypało: darmowy tier FMP oddał HTTP 402 na wszystkie moje spółki, a filingi SEC fałszowały etykiety lat — dziś fundamenty idą z EDGAR-a, a parser liczy okres z dat faktu, nie z pól fy/fp.
[FIG. 2] ARCHITEKTURA
najedź na blok, by zobaczyć opis
[FIG. 3] WYZWANIA
[+][CH-01]
Plan zakładał FMP jako główne źródło sprawozdań, cen i wskaźników — a darmowy tier na żywym syncu oddał HTTP 402 „not available under your current subscription” dla wszystkich moich spółek; działał wyłącznie endpoint profilu. Zamiast dokładać płatny plan, rozbiłem źródła per rola: fundamenty z SEC EDGAR (fallback z planu awansowany na ścieżkę główną), ceny EOD z nieoficjalnego API Yahoo, kurs bieżący i newsy z Finnhub, a FMP został zredukowany do profilu spółki. Wskaźniki peersów liczę lokalnie z tych samych danych. Przy okazji brakującą EBITDA zrekonstruowałem z tagów XBRL — operating income plus cztery alternatywne tagi D&A, per okres — i ani jeden wskaźnik z planu nie wypadł z zakresu.
[+][CH-02]
Filingi XBRL zawierają komparatywy z lat poprzednich, ale wszystkie mają rok bieżącego filingu w polach fy/fp — ufając im, metryki za 2023 i 2024 wylądowałyby pod etykietą „FY2025” i po cichu sfałszowały szeregi fundamentalne. JSON wychodził poprawny, więc błąd długo udawał, że go nie ma; złapał go dopiero test na fixture z realnego filingu. Parser liczy dziś okres z długości okna end−start i typu formularza, a okna spoza zakresu (kwartał w filingu rocznym, YTD) odrzuca — nauka, że „poprawny format” i „prawdziwe dane” to dwa różne testy.
[+][CH-03]
Warstwa techniczna kusi wrzuceniem wszystkiego, co ma nazwę: MACD, Ichimoku, Supertrend, SAR. Zrobiłem odwrotnie — przyjąłem 19 wskaźników, a 13 odrzuciłem z pisemnym uzasadnieniem, a kierunek sygnału liczą wyłącznie czynniki z recenzowanych badań (momentum 12-1, 52-tygodniowe maksimum, trend MA200, zarządzanie zmiennością). Sanity-check walk-forward dał trafność 6/8 — i świadomie NIE kalibruję na nim progów, bo osiem obserwacji to nie próba, tylko anegdota. Ta uczciwość statystyczna jest wpisana w produkt.
[FIG. 4] WARSTWA AI
W runtime nie działa żaden model językowy — wszystkie silniki to deterministyczne czyste funkcje TypeScript, i to jest świadoma decyzja: liczby w analizie inwestycyjnej muszą być odtwarzalne co do grosza. AI zbudowało za to samą aplikację: 63 commity w około 14 godzin jednego dnia, w pętli /loop po backlogu, ze spec-first pakietem dziesięciu dokumentów i kanonicznymi formułami spisanymi przed kodem.
[FIG. 5] GALERIA
SCREENY W DRODZE — patrz SHOTS-WANTED