Rozliczenie Forex krok po kroku — statement, kursy NBP, PIT-38 i narzędzia
Wiesz już, co trzeba rozliczyć. Teraz trzeba to policzyć i wysłać bez błędu. Zyski z CFD podlegają 19%, broker zagraniczny nie wystawi ci PIT-8C. Ten artykuł to instrukcja operacyjna dla polskiego rezydenta podatkowego, który handluje prywatnie na własnym rachunku, za rok 2025 (zeznanie składane w 2026 r.) — od wyeksportowania historii transakcji, przez przeliczenie wyniku każdej pozycji na PLN po kursie NBP, po wpisanie właściwych liczb we właściwe pola PIT-38. Odpal arkusz i licz.
- Statement brokera to rdzeń dowodu, ale nie jedyny dokument — trzymasz też arkusz, historię kursów NBP, Urzędowe Poświadczenie Odbioru PIT-38 i wszystko, co pozwala obronić metodologię. Z samym statementem też możesz się wyłożyć, jeśli broker ukrył korekty albo źle czytasz kolumny.
- Przychodem z CFD jest wynik rozliczenia kontraktu, nie jego nominał — kontrakt na różnicę rozlicza różnicę (art. 17 ust. 1 pkt 10 i ust. 1b ustawy o PIT). Wartości 50 000 EUR × kurs nie wpisujesz nigdzie.
- Kurs NBP to kurs z dnia POPRZEDZAJĄCEGO — nie z dnia transakcji. Tabela A, kurs średni, ostatni dzień z opublikowaną tabelą przed datą zdarzenia. Jeden zły dzień kursu przy większej skali rozwali sumy i obronę metodologii.
- Rozliczasz tylko zamknięte pozycje — otwarta pozycja na 31 grudnia nie generuje przychodu ani kosztu. Liczy się moment zamknięcia, nie otwarcia. Wpłaty i wypłaty to transfery własne — nie wchodzą.
- Swapy i prowizje to koszt uzyskania przychodu — zmniejszają twój dochód. Swapy dodatnie to przychód. Nie ignoruj ani jednych, ani drugich.
- Sam formularz PIT-38 jest prosty. Problemem nie jest kliknięcie w pola, tylko dojście do liczb, których potem nie będziesz się wstydził bronić. Termin za 2025 r.: 30 kwietnia 2026 r. — złożenie i zapłata.
0. Zanim policzysz: rok, rezydencja, model
Trzy ustalenia, bez których dalsze kroki mogą prowadzić do złego formularza albo złego kraju:
- Rok podatkowy. Rozliczasz pozycje zamknięte w 2025 r. na formularzu PIT-38 za 2025 r. (wersja 18). Numery pól i wersja formularza w tym artykule dotyczą tego rocznika — dla innego roku otwórz właściwy formularz.
- Rezydencja. Rozliczasz się w Polsce od całości dochodów, jeśli masz tu ośrodek interesów życiowych albo przebywasz w Polsce dłużej niż 183 dni w roku (art. 3 ust. 1 i 1a ustawy o PIT). Obywatelstwo, język platformy i kraj brokera nie mają tu znaczenia. Jeśli w 2025 r. zmieniałeś kraj zamieszkania albo możesz być rezydentem dwóch państw, ten artykuł nie rozstrzyga twojej sytuacji — potrzebna jest analiza właściwej umowy podatkowej.
- Model. Instrukcja dotyczy osoby fizycznej inwestującej prywatnie na własnym rachunku w CFD i inne instrumenty pochodne. Wynagrodzenie od firmy prop, handel w ramach działalności gospodarczej i rzeczywista wymiana walut mają inne ścieżki — prop trading i nietypowe modele. Jeśli na rachunku masz też dywidendy, odsetki od gotówki albo kryptowaluty, odłóż je na bok — wracamy do nich w kroku 2.
1. Pobierz historię transakcji (statement)
Wszystko zaczyna się od danych. Twój broker rejestruje każdą transakcję — otwarcia, zamknięcia, swapy, prowizje, korekty. Jeśli masz kilka rachunków albo w trakcie roku przeniesiono cię do innego podmiotu tej samej marki, potrzebujesz statementu z każdego z nich.
Każda platforma eksportuje dane inaczej — inne nazwy kolumn, inne formaty, inne ścieżki w menu. Nazwy pozycji menu poniżej zależą od wersji platformy i brokera — traktuj je jako wskazówkę, gdzie szukać, nie jako instrukcję klik po kliku.
| Platforma | Gdzie szukać | Format | Uwagi |
|---|---|---|---|
| MT4 | Terminal → Account History → prawy klik → Save as Detailed Report | HTML | Ustaw Custom Period na cały rok. Detailed Report — po eksporcie sprawdź, czy raport zawiera swapy i prowizje |
| MT5 | Toolbox → History → Deals → prawy klik → Export | HTML / CSV | Deals, nie Positions — w Deals masz surowe transakcje. Jedna „pozycja" może rozpaść się na kilka deali (partial fills) |
| cTrader | History → zakres dat → Export | CSV / XLSX | Swap i Commission w osobnych kolumnach |
| Interactive Brokers | Reports → Statements → Activity Statement → Custom Date Range | HTML / PDF / CSV | Sekcja Trades + Interest + Dividend Adjustments. Uwaga: Forex P&L w IBKR nie zawsze odpowiada temu, co wchodzi do PIT-38 |
| XTB (xStation) | Historia → Filtr dat → Eksportuj | CSV / XLSX | Jeśli za dany rok dostałeś od brokera PIT-8C, i tak zweryfikuj kwoty ze statementem — informacja może nie obejmować wszystkiego, co masz na rachunku |
Model wykonania a jakość statementu
Broker B-Book/market maker i broker agency/STP mogą dawać inne raporty operacyjne, inne korekty i inną przejrzystość danych. Przy brokerze A-Book z egzekucją rynkową i dużych paczkach lotów dostajesz partial fills — rynek realizuje pozycję w kilkunastu małych kawałkach po różnych cenach. Platforma wypluje z tego kilkanaście wierszy dla jednej transakcji. Ręcznie da się to zrobić, ale przy partial fills i korektach ryzyko błędu rośnie szybciej niż cierpliwość — tu liczy się skrypt lub dedykowane narzędzie.
2. Oczyść ewidencję i zidentyfikuj transakcje do rozliczenia
Nie wszystko, co widzisz w statemencie, trafia do PIT-38. Rozliczasz wyłącznie pozycje zamknięte w roku podatkowym — i tylko raz każdą.
Najpierw oczyść dane
- Transfery własne — wpłaty z konta bankowego, wypłaty, przelewy między subkontami u tego samego brokera. To przepływ twoich pieniędzy, nie zdarzenie podatkowe. Oznacz je w arkuszu i wyłącz z sum. Podatku nie liczy się metodą „wypłaty minus wpłaty"
- Duplikaty — ten sam ticket w dwóch eksportach (np. statement roczny i eksport kwartalny), partial fills zaksięgowane osobno i zbiorczo. Każde zdarzenie ma wejść raz
- Rok i strefa czasowa — data zamknięcia w czasie serwera może wypadać w innym dniu niż w czasie polskim; przy przełomie roku decyduje to o roczniku zeznania. Szczegóły w kroku 3
Co wchodzi do rozliczenia
- Zamknięte pozycje — każda transakcja, w której nastąpiło zamknięcie (rozliczenie kontraktu) w roku podatkowym; wynik dodatni to przychód, wynik ujemny to koszt (krok 4)
- Swapy — domyślnie idą razem z wynikiem pozycji w roku realizacji praw z kontraktu (art. 17 ust. 1b, art. 23 ust. 1 pkt 38a), każdy przeliczony kursem z dnia poprzedzającego naliczenie (art. 11a ust. 2) — to wariant bezpieczny. Ujęcie w roku naliczenia, gdy pozycja przechodzi przez 31 grudnia, jest możliwe tylko po ustaleniu, że umowa i raport brokera traktują swap jako odrębne rozliczenie pieniężne; potwierdzonej interpretacji KIS brak, więc to wariant do weryfikacji, nie zalecenie. Swapy ujemne to koszt. Swapy dodatnie to przychód
- Prowizje — za otwarcie i zamknięcie pozycji. Koszt uzyskania przychodu
- Dividend adjustments (CFD na akcje) — broker pobiera lub uznaje konto ekwiwalentem dywidendy. To korekta pieniężna kontraktu, przychód lub koszt niewidoczny w kolumnie Profit
Co NIE wchodzi albo wchodzi osobno
- Otwarte pozycje na 31 grudnia — floating P/L nie jest przychodem. Dopóki nie zamkniesz, sam wynik pozycji nie tworzy zdarzenia podatkowego; swapy naliczone przed 31 grudnia — patrz wyżej (domyślnie rok realizacji praw)
- Wpłaty i wypłaty — transfery między kontem bankowym a brokerskim to nie przychód ani koszt
- Transakcje na koncie demo
- Odsetki od wolnej gotówki i dywidendy z akcji — to inna kategoria niż wynik z CFD (ryczałt z art. 30a, bez kosztów, osobna część G PIT-38); nie sumuj ich z wynikiem pozycji ani nie kompensuj nimi straty na CFD
- Bonusy brokera — to odrębne świadczenie, nie wynik z kontraktu. Ustal z regulaminu, czy i kiedy jest postawiony do twojej dyspozycji, i nie wliczaj go w wynik CFD bez osobnej kwalifikacji
- Cashbacki/rebaty od brokera — jeśli broker zwraca część prowizji, to może być przychód wymagający osobnej kwalifikacji podatkowej (nie z art. 30b). Temat wymaga osobnego rozdziału i dokumentów źródłowych — nie mieszaj z wynikiem z CFD bez konsultacji
3. Przelicz na PLN — kursy NBP
Tu zaczynają się błędy, bo trader myśli rynkiem, a skarbówka wymaga kalendarza i dokumentu. Zarabiasz w twardej walucie, ale PIT-38 składasz w złotówkach — przeliczonych po kursie z konkretnego dnia, którego nie wybierasz.
Zasada przeliczania
Art. 11a ust. 1 ustawy o PIT: przychody w walutach obcych przelicza się na PLN według kursu średniego NBP z ostatniego dnia roboczego poprzedzającego dzień uzyskania przychodu. Koszty analogicznie — art. 11a ust. 2, kurs z dnia poprzedzającego poniesienie kosztu. „Dzień roboczy" to w praktyce ostatni dzień, dla którego NBP opublikował Tabelę A przed dniem zdarzenia.
- Wynik zamkniętej pozycji (dodatni lub ujemny) — kurs z ostatniego dnia z tabelą przed dniem zamknięcia. Data otwarcia nie ma znaczenia dla kursu wyniku
- Prowizje — kurs z dnia poprzedzającego dzień pobrania (prowizja za otwarcie — przed dniem otwarcia, za zamknięcie — przed dniem zamknięcia)
- Swapy — kurs z dnia poprzedzającego każde naliczenie (art. 11a ust. 2), także wtedy, gdy rok potrącenia jest — domyślnie — rokiem realizacji praw z kontraktu. Jeden kurs z dnia zamknięcia pozycji dla wszystkich swapów to uproszczenie bez podstawy w art. 11a; przy pozycjach trzymanych kilka dni różnica jest groszowa, ale metodologii wtedy nie obronisz
Weekendy i święta
- Transakcja w piątek (dowolna godzina) → kurs NBP z czwartku, jeśli w czwartek była tabela. Gdy czwartek jest świętem (np. 1 maja 2025), bierzesz tabelę ze środy
- Transakcja w sobotę/niedzielę (datowana przez serwer brokera) → kurs z piątku
- Dzień świąteczny w poniedziałek → kurs z piątku (ostatni dzień z tabelą)
Multi-currency account
Jeśli konto jest w EUR, a instrument notowany w USD (np. US30 w USD), przeliczenie do PLN może wymagać dwóch kroków — wynik w USD przeliczony na EUR według brokera, potem EUR na PLN po kursie NBP. Wiele narzędzi pomija ten krok i generuje błąd. Broker może raportować wynik per instrument w walucie instrumentu, a dopiero potem przeliczać go do waluty konta. Musisz ustalić, na jakim etapie bierzesz dane do PIT — jeśli weźmiesz już przeliczone na walutę konta, nie doliczaj konwersji drugi raz.
4. Oblicz przychód, koszt i dochód
Masz statement. Masz kursy NBP. Teraz liczymy — i zaczynamy od rzeczy, która decyduje o kwocie podatku: co jest przychodem z CFD.
Wynik, nie nominał
CFD to kontrakt na różnicę. Kupując 0,5 lota EUR/USD, nie nabywasz 50 000 EUR — rozliczasz z brokerem różnicę między ceną zamknięcia a otwarcia. Ustawa o PIT nazywa to przychodem z realizacji praw wynikających z pochodnych instrumentów finansowych (art. 17 ust. 1 pkt 10), a datą przychodu jest moment realizacji tych praw (art. 17 ust. 1b) — czyli rozliczenie pozycji. Dochód to różnica między sumą tych przychodów a kosztami z art. 23 ust. 1 pkt 38a — wydatkami związanymi z instrumentem, potrącalnymi w momencie realizacji praw (art. 30b ust. 2 pkt 3). Nominał kontraktu (50 000 EUR razy cena) nie jest w tej konstrukcji ani przychodem, ani wydatkiem — nie ma go w rachunku.
To rozstrzygnięcie nie jest ozdobą. Gdybyś nominał wstawił jako przychód (po kursie z dnia zamknięcia) i jako koszt (po kursie z dnia otwarcia), do wyniku doszłaby fikcyjna „różnica kursowa" na kwocie, której nigdy nie miałeś — w przykładzie z kroku 5 zmieniłaby podatek z pozycji A z 250 zł (1 353,63 − 13,50 − 13,54 − 9,23 = 1 317,36 zł → 1 317 zł × 19 % = 250 zł) na 361 zł. Interpretacji indywidualnej rozstrzygającej to wprost dla CFD nie cytujemy, bo porównywalnej nie znaleźliśmy; wniosek wynika z brzmienia przepisów. Jeśli twój broker prezentuje w raporcie nominały, a nie wyniki — przelicz na wyniki, a w razie wątpliwości wystąp o interpretację indywidualną (opłata 40 zł od stanu faktycznego, art. 14f Ordynacji podatkowej).
Przychód
Przychód (PLN) = Σ [wynik dodatni pozycji (waluta) × Kurs NBPdzień przed zamknięciem] + Σ [swap dodatni × Kurs NBPdzień przed naliczeniem] + Σ [dodatnia korekta pieniężna kontraktu (np. dividend adjustment) × Kurs NBPdzień przed uznaniem]
Koszt uzyskania przychodu
Suma czterech składników, każdy przeliczony na PLN po kursie z dnia poprzedzającego jego datę:
- Wyniki ujemne zamkniętych pozycji — po kursie z dnia poprzedzającego zamknięcie
- Prowizje (otwarcie + zamknięcie) — po kursie z dnia poprzedzającego pobranie
- Swapy ujemne — po kursie z dnia poprzedzającego naliczenie
- Ujemne korekty pieniężne kontraktu (np. dividend adjustments przy CFD na akcje) — po kursie z dnia poprzedzającego pobranie
Koszt (PLN) = Wyniki ujemnePLN + ProwizjePLN + Swapy ujemnePLN + Korekty ujemnePLN
Dochód (lub strata)
Dochód = PrzychódPLN − KosztPLN
Jeśli wynik jest dodatni — masz dochód do opodatkowania (od którego możesz jeszcze odjąć straty z lat ubiegłych, krok 7). Jeśli ujemny — masz stratę do przeniesienia na kolejne lata, wykazaną w tym zeznaniu.
5. Przykład liczbowy — od statementu do PIT-38
Przykład ilustracyjny — rok podatkowy 2025. Założenia: polski rezydent, rachunek prywatny w USD u brokera zagranicznego bez PIT-8C; broker raportuje wynik pozycji netto bez prowizji i swapów (te są w osobnych kolumnach); daty w czasie polskim. Kursy to rzeczywiste kursy średnie NBP z Tabeli A dla podanych dat (numery tabel w tabeli roboczej). Kwoty i tickety są fikcyjne.
- Wpłata 5 000 USD na rachunek — poniedziałek 10.03.2025
- Pozycja A (zyskowna): kupno 0,5 lota EUR/USD po 1,0850 w piątek 14.03.2025, zamknięcie po 1,0920 w piątek 21.03.2025 — wynik +350 USD. Prowizja 3,50 USD za otwarcie i 3,50 USD za zamknięcie. Swap naliczony w czwartek 20.03: −2,40 USD
- Pozycja B (stratna): kupno 0,3 lota EUR/USD we wtorek 18.03.2025, zamknięcie na stop lossie w środę 19.03.2025 — wynik −120 USD. Prowizja 2,10 USD za otwarcie i 2,10 USD za zamknięcie, bez swapu
- Odsetki od wolnej gotówki uznane przez brokera 21.03.2025: 1,20 USD — inna kategoria, do rozdzielenia
Krok A: Ustal kursy NBP
- Wynik i prowizja zamknięcia pozycji A (piątek 21.03) → tabela z czwartku 20.03.2025
- Prowizja otwarcia pozycji A (piątek 14.03) → tabela z czwartku 13.03.2025
- Swap pozycji A (naliczony czwartek 20.03) → tabela ze środy 19.03.2025
- Prowizja otwarcia pozycji B (wtorek 18.03) → tabela z poniedziałku 17.03.2025
- Wynik i prowizja zamknięcia pozycji B (środa 19.03) → tabela z wtorku 18.03.2025
Krok B: Tabela robocza
| ID | Dokument | Zdarzenie | Data podatkowa | Kategoria | Kwota | Waluta | Tabela NBP | Kurs | Przychód PLN | Koszt PLN | Uwagi |
|---|---|---|---|---|---|---|---|---|---|---|---|
| T-01 | cash ledger | Wpłata | 10.03.2025 | transfer własny | 5 000,00 | USD | — | — | — | — | Nie wchodzi |
| A-1 | statement | Prowizja otwarcia A | 14.03.2025 | koszt | 3,50 | USD | 13.03.2025 — 050/A/NBP/2025 | 3,8568 | — | 13,50 | 3,50 × 3,8568 = 13,4988 |
| B-1 | statement | Prowizja otwarcia B | 18.03.2025 | koszt | 2,10 | USD | 17.03.2025 — 052/A/NBP/2025 | 3,8329 | — | 8,05 | 2,10 × 3,8329 = 8,0491 |
| B-2 | statement | Wynik zamknięcia B | 19.03.2025 | koszt (wynik ujemny) | −120,00 | USD | 18.03.2025 — 053/A/NBP/2025 | 3,8152 | — | 457,82 | 120 × 3,8152 = 457,824 |
| B-3 | statement | Prowizja zamknięcia B | 19.03.2025 | koszt | 2,10 | USD | 18.03.2025 — 053/A/NBP/2025 | 3,8152 | — | 8,01 | 2,10 × 3,8152 = 8,0119 |
| A-2 | statement | Swap A | 20.03.2025 | koszt (swap ujemny) | −2,40 | USD | 19.03.2025 — 054/A/NBP/2025 | 3,8473 | — | 9,23 | 2,40 × 3,8473 = 9,2335 |
| A-3 | statement | Wynik zamknięcia A | 21.03.2025 | przychód (wynik dodatni) | 350,00 | USD | 20.03.2025 — 055/A/NBP/2025 | 3,8675 | 1 353,63 | — | 350 × 3,8675 = 1 353,625 |
| A-4 | statement | Prowizja zamknięcia A | 21.03.2025 | koszt | 3,50 | USD | 20.03.2025 — 055/A/NBP/2025 | 3,8675 | — | 13,54 | 3,50 × 3,8675 = 13,5363 |
| I-01 | cash ledger | Odsetki od gotówki | 21.03.2025 | inna kategoria (art. 30a) | 1,20 | USD | — | — | — | — | Poza sumą CFD — osobna kwalifikacja |
| Razem — wynik z instrumentów pochodnych (art. 30b) | 1 353,63 | 510,15 | 7 zdarzeń, każde raz | ||||||||
Krok C: Wynik i podatek
- Przychód (poz. 22): 1 353,63 PLN
- Koszt (poz. 23): 13,50 + 8,05 + 457,82 + 8,01 + 9,23 + 13,54 = 510,15 PLN
- Dochód (poz. 28): 1 353,63 − 510,15 = 843,48 PLN
- Podstawa (poz. 31): 843,48 zaokrąglone do pełnych złotych = 843 PLN (bez strat z lat ubiegłych)
- Podatek (poz. 33): 843 × 19% = 160,17 PLN; podatek należny (poz. 35): 160 PLN (zaokrąglenie do pełnych złotych). Podatek zapłacony za granicą (poz. 34): 0 — nikt nic nie pobrał
Wariant: strata z 2024 r.
Jeśli w PIT-38 za 2024 r. wykazałeś stratę z tego samego źródła, np. 400 PLN, i odliczasz ją w całości jednorazowo (art. 9 ust. 3 pkt 2 — mechanizm i limity: straty i tarcza podatkowa), to poz. 30 = 400,00, poz. 31 = 843,48 − 400,00 = 443,48 → 443 PLN, poz. 33 = 443 × 19% = 84,17 → poz. 35 = 84 PLN. Rejestr strat (rok, kwota, ile już odliczono) prowadzisz osobno — poz. 30 nie może przekroczyć poz. 28.
Kontrola
- Wynik w USD ze statementu: +350 − 120 − 3,50 − 3,50 − 2,10 − 2,10 − 2,40 = +216,40 USD (bez odsetek). Arkusz zawiera dokładnie te siedem zdarzeń — spina się
- Prowizje ujęte raz (broker raportuje wynik pozycji bez prowizji — to założenie trzeba sprawdzić w swoim statemencie; jeśli Profit już zawiera prowizję, nie dopisujesz jej drugi raz)
- Kursy zgodne z datami: każde zdarzenie ma własną tabelę, bez kursu z dnia transakcji i bez jednego kursu na cały rok
- Zaokrąglenia: kwoty w PLN do groszy na etapie zdarzeń, podstawa i podatek należny do pełnych złotych na etapie formularza
- Wpłata 5 000 USD i odsetki 1,20 USD nie weszły do poz. 22/23
Zwróć uwagę: kurs z dnia otwarcia pozycji nie wpłynął na wynik pozycji — ma znaczenie tylko dla prowizji pobranej w dniu otwarcia. Nie ma tu „różnicy kursowej na nominale", bo nominału nie ma w rachunku.
6. Narzędzia i automatyzacja
Przy 200 transakcjach ręczna robota jest jeszcze do przeżycia. Przy 2 000 bez automatyzacji robisz sobie krzywdę.
Arkusze kalkulacyjne (Excel / Google Sheets)
Importujesz CSV ze statementu, dodajesz kolumny z kursami NBP i formułami przeliczeniowymi. API NBP pozwala pobrać kurs programistycznie:
https://api.nbp.pl/api/exchangerates/rates/a/usd/2025-03-13/?format=json
Odpowiedź JSON zawiera pole rates[0].mid — twój kurs średni (dla tej daty 3,8568) — oraz rates[0].no — numer tabeli, który zapisujesz w arkuszu. W Google Sheets — IMPORTDATA lub custom script. W Excelu — Power Query.
while response == 404: date = date - 1 day. Przy tysiącach transakcji rocznie pobierz raz cały zakres dat jednym zapytaniem zamiast odpytywać dzień po dniu.Dedykowane narzędzia
Na rynku są kalkulatory, które importują statement i przeliczają automatycznie. Zanim zaufasz wynikowi, ręcznie przelicz 5 transakcji: jedną zyskowną, jedną stratną, jedną z weekendem, jedną ze swapem i jedną z prowizją w innym dniu niż zamknięcie. Sprawdź zwłaszcza, czy narzędzie bierze kurs z dnia poprzedzającego, a nie z dnia transakcji, i czy nie wstawia nominału jako przychodu. Jeśli wyniki się zgadzają — reszta prawdopodobnie też. Jeśli nie — szukaj błędu.
Minimalne kolumny arkusza (kalkulator PIT-38 Forex)
Jeśli budujesz własny arkusz, użyj układu z tabeli roboczej w kroku 5:
ID | Dokument | Zdarzenie | Data podatkowa (czas PL) | Kategoria | Kwota | Waluta | Data i nr tabeli NBP | Kurs | Przychód PLN | Koszt PLN | Uwagi
Test kontroli jakości: porównaj sumę kwot walutowych z arkusza (bez transferów własnych i kategorii odłożonych) z sumą realized P&L ze statementu po uwzględnieniu prowizji, swapów, interest i adjustmentów. Jeśli się nie spina — nie przechodzisz dalej.
Najniebezpieczniejszy moment
Nie przychodzi wtedy, gdy liczysz ręcznie. Przychodzi wtedy, gdy automat policzył wszystko i czujesz ulgę. Jedno źle rozpoznane pole daty, jedna pomylona strefa czasowa, jeden swap wrzucony do złej kolumny — i masz pięknie sformatowaną bzdurę. Automat nie robi błędów mniej. Robi je szybciej i na większą skalę.
7. Wypełnij PIT-38 — straty z lat ubiegłych, podatek zagraniczny, pola
Masz obliczone sumy. Zanim je przepiszesz, dwa ustalenia, które zmieniają kwotę do zapłaty albo liczbę załączników.
Straty z lat ubiegłych → poz. 30
Jeśli w latach 2020–2024 wykazałeś w PIT-38 stratę z odpłatnego zbycia pochodnych instrumentów finansowych lub z realizacji praw z nich wynikających (to samo źródło co twój wynik z CFD), możesz ją odliczyć od dochodu z poz. 28 — w poz. 30, nie więcej niż wynosi poz. 28. Ile wolno odliczyć w tym roku, zależy od roku powstania straty, wybranej metody (do 50% straty rocznie albo jednorazowo do 5 000 000 zł w jednym z pięciu lat) i tego, ile już odliczyłeś wcześniej — rejestr strat i limity. Straty z innych źródeł (etat, działalność, kryptowaluty, dywidendy) tu nie wchodzą.
Podatek zagraniczny i PIT/ZG → poz. 34 i 72
Poz. 34 wypełniasz tylko wtedy, gdy od twojego dochodu z instrumentów pochodnych faktycznie pobrano podatek za granicą i masz na to dokument. Odliczenie jest proporcjonalne — nie więcej niż część polskiego podatku przypadająca na dochód zagraniczny (art. 30b ust. 5a i 5b). Wtedy składasz też załącznik PIT/ZG, osobno dla każdego państwa, i wpisujesz liczbę załączników w poz. 72. Sam fakt, że broker ma siedzibę na Cyprze, w Wielkiej Brytanii czy w Australii, nie tworzy ani zagranicznego podatku, ani obowiązku PIT/ZG — adres brokera nie jest państwem źródła dochodu. Jeśli nic nie pobrano, poz. 34 = 0. Czy przy zerowym podatku zagranicznym składasz mimo to PIT/ZG, broszura MF do PIT-38 wiąże z tym, czy dochód jest „uzyskany za granicą" i objęty metodą odliczenia — nie z kwotą pobranego podatku i nie z adresem brokera. Czy w twoim przypadku dochód z CFD u zagranicznego brokera jest w rozumieniu ustawy „uzyskany za granicą", zależy od konstrukcji kontraktu i umowy podatkowej z danym państwem — ustal to z dokumentem brokera w ręku, w razie wątpliwości z doradcą.
Pola części C i D
| Pole PIT-38 (za 2025, wersja 18) | Co wpisać | Skąd wziąć dane |
|---|---|---|
| Poz. 20 (część C, wiersz 1) | Przychody — z PIT-8C (broker polski) | Poz. 35 informacji PIT-8C, jeśli dotyczy |
| Poz. 21 (część C, wiersz 1) | Koszty — z PIT-8C (broker polski) | Poz. 36 PIT-8C plus koszty związane z tymi przychodami, których broker nie wykazał, a masz na nie dokumenty |
| Poz. 22 (część C, wiersz 2) | Przychody — z własnych dokumentów (broker zagraniczny, brak PIT-8C) | Suma dodatnich wyników zamkniętych pozycji w PLN + swapy dodatnie + dodatnie korekty pieniężne kontraktu (np. dividend adjustments) |
| Poz. 23 (część C, wiersz 2) | Koszty — z własnych dokumentów (broker zagraniczny, brak PIT-8C) | Suma ujemnych wyników + prowizje + swapy ujemne + ujemne korekty pieniężne kontraktu (PLN) |
| Poz. 26–29 | Razem: przychody, koszty, dochód (28) albo strata (29) | Formularz elektroniczny liczy sam; na papierze: 26 = 20 + 22, 27 = 21 + 23, 28 = 26 − 27 (gdy dodatnie), 29 = 27 − 26 (gdy ujemne) |
| Poz. 30 | Straty z lat ubiegłych | Z rejestru strat, w granicach limitu; nie więcej niż poz. 28 |
| Poz. 31 | Podstawa obliczenia podatku | Poz. 28 − poz. 30, zaokrąglone do pełnych złotych |
| Poz. 32 | Stawka | 19% |
| Poz. 33 | Podatek od dochodów z art. 30b ust. 1 | Poz. 31 × 19% |
| Poz. 34 | Podatek zapłacony za granicą | Tylko z dokumentem potwierdzającym pobranie, z limitem proporcjonalnym; inaczej 0 |
| Poz. 35 | Podatek należny | Poz. 33 − poz. 34, zaokrąglone do pełnych złotych |
8. Złóż zeznanie i zapłać
Termin: od 15 lutego do 30 kwietnia 2026 r. za rok 2025 — ten sam dzień dla złożenia zeznania i zapłaty podatku (art. 45 ust. 1 ustawy o PIT). Po terminie naliczane są odsetki za zwłokę, a niezłożone lub nieskorygowane zeznanie może skończyć się postępowaniem — dlatego kontrola sum z kroku 5 i osobne potwierdzenie złożenia i zapłaty.
Sposób złożenia
- Twój e-PIT (podatki.gov.pl) — od 15 lutego 2026 r. urząd udostępnia PIT-38 przygotowany wyłącznie z informacji PIT-8C. Danych od brokera zagranicznego tam nie ma — wiersz 2 (poz. 22/23) i poz. 30 uzupełniasz sam. Uwaga na mechanizm z broszury MF: jeśli do 30 kwietnia nie zaakceptujesz, nie odrzucisz ani nie złożysz PIT-38 inaczej, udostępnione zeznanie zostanie automatycznie zaakceptowane w tej formie. Przy przychodach spoza PIT-8C masz obowiązek złożyć zeznanie samodzielnie — auto-akceptacja wersji „z PIT-8C" oznaczałaby złożenie niekompletnego zeznania i konieczność korekty
- Formularz elektroniczny PIT-38 — przez e-Deklaracje na podatki.gov.pl albo e-Urząd Skarbowy (zakładka „Deklaracje"); formularz liczy podatek za ciebie, ale kwoty do poz. 22/23 i 30 wpisujesz z arkusza
- Papierowo — w urzędzie albo pocztą (liczy się data stempla); nadal możliwe, ale niepraktyczne
Dokumenty do przechowywania
| Dokument | Typ | Przechowuj (za 2025 r.) |
|---|---|---|
| Statement brokera (wszystkie wersje, także po korekcie) | Bazowy | do końca 2031 r. |
| PIT-8C (jeśli dotyczy) | Bazowy | do końca 2031 r. |
| Arkusz z obliczeniami i rejestr strat | Roboczy | do końca 2031 r., dłużej przy odliczaniu straty w kolejnych latach |
| Kursy NBP użyte w obliczeniach (z numerami tabel) | Pomocniczy | do końca 2031 r. |
| UPO (Urzędowe Poświadczenie Odbioru) i potwierdzenie przelewu | Archiwalny | do końca 2031 r. |
FAQ — Rozliczenie Forex krok po kroku
Czy muszę rozliczać każdą transakcję osobno, czy mogę podać sumy?
Czy przychodem jest wartość kontraktu, czy tylko zysk?
Jaki kurs NBP stosuję do transakcji zamkniętej w weekend?
Jak rozliczyć transakcję otwartą w grudniu 2025 i zamkniętą w styczniu 2026?
Czy swapy ujemne zmniejszają mój podatek?
Mam konto w USD — czy kurs walutowy wpływa na wynik w PLN?
Mam brokera na Cyprze — czy muszę dołączyć PIT/ZG?
Czy mogę użyć Myfxbook do rozliczenia zamiast statementu?
Źródła i bibliografia
- Ustawa z dnia 26 lipca 1991 r. o podatku dochodowym od osób fizycznych (t.j. Dz.U. 2026 poz. 592) — art. 3 ust. 1–1a (rezydencja), art. 9 ust. 3 (straty), art. 11a ust. 1–2 (przeliczanie walut obcych), art. 17 ust. 1 pkt 10 i ust. 1b (przychód z realizacji praw z pochodnych instrumentów finansowych), art. 23 ust. 1 pkt 38a (koszty), art. 30b ust. 1, 2 pkt 3, 5a–5b (opodatkowanie, dochód, podatek zagraniczny), art. 45 ust. 1 (termin)
- Narodowy Bank Polski — Tabela A kursów średnich walut obcych, archiwum i API: api.nbp.pl (tabele 050, 052, 053, 054 i 055/A/NBP/2025 użyte w przykładzie)
- Ministerstwo Finansów — formularz PIT-38(18) za 2025 r.: gov.pl/web/finanse/pit-38; broszura informacyjna do zeznania PIT-38 za rok podatkowy 2025: podatki.gov.pl (PDF)
- Ustawa z dnia 29 sierpnia 1997 r. — Ordynacja podatkowa (t.j. Dz.U. 2026 poz. 622) — art. 14f (opłata za interpretację), art. 56a (obniżone odsetki), art. 70 § 1 (przedawnienie zobowiązania podatkowego), art. 81 (korekta deklaracji)
Twój postęp w kursie
Oznacz lekcję po zapoznaniu się z materiałem. Samo otwarcie lub przewinięcie strony nie oznacza ukończenia; oznaczenie nie jest wynikiem egzaminu.