BTC284,7k zł2,50%
ETH9,01k zł3,92%
XRP4,87 zł8,21%
LTC192 zł3,33%
BCH826 zł1,57%
DOT3,56 zł4,44%

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.

Rozliczenie podatku Forex krok po kroku — statement brokera, kursy NBP, PIT-38 i narzędzia automatyzacji
Najważniejsze w 60 sekund
  • 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.

PlatformaGdzie szukaćFormatUwagi
MT4Terminal → Account History → prawy klik → Save as Detailed ReportHTMLUstaw Custom Period na cały rok. Detailed Report — po eksporcie sprawdź, czy raport zawiera swapy i prowizje
MT5Toolbox → History → Deals → prawy klik → ExportHTML / CSVDeals, nie Positions — w Deals masz surowe transakcje. Jedna „pozycja" może rozpaść się na kilka deali (partial fills)
cTraderHistory → zakres dat → ExportCSV / XLSXSwap i Commission w osobnych kolumnach
Interactive BrokersReports → Statements → Activity Statement → Custom Date RangeHTML / PDF / CSVSekcja Trades + Interest + Dividend Adjustments. Uwaga: Forex P&L w IBKR nie zawsze odpowiada temu, co wchodzi do PIT-38
XTB (xStation)Historia → Filtr dat → EksportujCSV / XLSXJeś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
Statement nie jest święty. Na papierze wygląda jak prawda objawiona. W praktyce raport platformy, raport roczny i dane back-office potrafią się różnić. Korekty nocne, cash adjustments, rebates, dividend adjustments — nie wszystkie pozycje podatkowo istotne siedzą w kolumnie Profit. Pobierz statement drugi raz pod koniec stycznia i porównaj z grudniowym. Jeśli się różnią — ustal przyczynę (korekta brokera, inny zakres lub typ eksportu), zachowaj obie wersje i rozliczaj według stanu rachunku po korekcie, a różnicę umiej wyjaśnić.
Archiwizuj. Zobowiązanie za 2025 r. przedawnia się z końcem 2031 r. — 5 lat liczonych od końca roku, w którym upłynął termin płatności podatku, czyli od końca 2026 r. (art. 70 § 1 Ordynacji podatkowej); to termin podstawowy, zawieszenie biegu (np. art. 70 § 6) przesuwa go dalej. Do tego czasu musisz umieć udowodnić każdą kwotę z zeznania; jeśli z roku 2025 wykazujesz stratę i odliczasz ją w latach późniejszych, dokumenty trzymaj odpowiednio dłużej. Brokerzy zmieniają platformy, zamykają konta, przenoszą klientów — pobieraj statementy co kwartał, nie czekaj do kwietnia.
Eksport Detailed Report z MT4 — okno Account History z zaznaczonym Custom Period i opcją Save as Detailed Report
Eksport Detailed Report z MT4 — okno Account History z zaznaczonym Custom Period i opcją Save as Detailed Report

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
Pułapka roku przejściowego. Otwierasz pozycję w piątek 19 grudnia 2025, zamykasz w poniedziałek 5 stycznia 2026 z zyskiem 500 USD. Przychód powstaje w momencie zamknięcia — 5 stycznia 2026 — i trafia do zeznania za 2026. Wynik pozycji i prowizje od jej otwarcia i zamknięcia rozliczasz w PIT-38 za 2026 — prowizja otwarcia to wydatek związany z nabyciem instrumentu, kosztem staje się z realizacją praw (art. 23 ust. 1 pkt 38a). Swapy naliczone od 19 do 31 grudnia domyślnie idą z wynikiem pozycji do 2026 (art. 23 ust. 1 pkt 38a), każdy przeliczony kursem z dnia poprzedzającego jego naliczenie (art. 11a ust. 2). Ujęcie ich w 2025 jest możliwe tylko po ustaleniu, że umowa i raport brokera traktują swap jako odrębne rozliczenie pieniężne — potwierdzonej interpretacji brak, więc to wariant do weryfikacji, nie zalecenie. Rok otwarcia nie zmienia roku wyniku pozycji.
NFP i otwarcia po weekendzie. Trader widzi „stop loss hit", ale w raporcie ma fill po cenie, której nie widział na ekranie, bo rynek przeskoczył kilka poziomów bez handlu po drodze. Dla rozliczenia to oznacza, że „jedna transakcja" w głowie tradera to kilka wierszy w Excelu z różnymi cenami i osobnymi kosztami.

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
Tabela A kursów średnich NBP — strona nbp.pl z wybranym kursem USD/PLN do rozliczenia podatkowego
Tabela A kursów średnich NBP — strona nbp.pl z wybranym kursem USD/PLN do rozliczenia podatkowego

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ą)
Strefa czasowa serwera. Data zdarzenia liczy się w czasie polskim. Wiele serwerów brokerów pracuje w czasie EET/EEST (UTC+2/+3) — o godzinę do przodu wobec Polski przez cały rok, bo obie strefy przestawiają zegar w tej samej chwili. Zamknięcie pozycji o 00:30 czasu serwera to w Polsce 23:30 poprzedniego dnia. Jaki czas ma twój serwer — sprawdź w specyfikacji brokera, nie zakładaj. Jeśli zaciągniesz daty bezpośrednio ze statementu bez korekty, możesz wziąć zły kurs NBP, a przy przełomie roku — zły rocznik zeznania.

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.

Przeliczanie walut na PLN — schemat doboru kursu NBP
CZczwartek PTpiątek SBsobota NDniedziela PNponiedziałek Transakcja PT Kurs: czwartek Transakcja SB/ND Kurs: piątek Transakcja PN Kurs: piątek

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ę:

  1. Wyniki ujemne zamkniętych pozycji — po kursie z dnia poprzedzającego zamknięcie
  2. Prowizje (otwarcie + zamknięcie) — po kursie z dnia poprzedzającego pobranie
  3. Swapy ujemne — po kursie z dnia poprzedzającego naliczenie
  4. 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.

Swapy dodatnie to przychód, nie zmniejszenie kosztu. Swap dodatni (np. carry na AUD/JPY) powiększa przychód w tym wierszu części C PIT-38, w którym wykazujesz wynik: poz. 22 przy własnych dokumentach, poz. 20 tylko wtedy, gdy jest już w PIT-8C. Swap ujemny powiększa koszt — odpowiednio poz. 23 albo 21. To dwa różne kierunki — nie mieszaj ich w arkuszu i nie ujmuj swapu dwa razy, jeśli broker wliczył go już w wynik pozycji.
Sumy zbiorcze czy każda transakcja osobno? Formularz przyjmuje sumy zbiorcze — łączny przychód i łączny koszt za cały rok. Ale musisz być w stanie te sumy udowodnić. Dlatego statement i arkusz z obliczeniami przechowujesz jako dokumentację.
Spread i slippage nie są osobnym kosztem podatkowym. Poślizg cenowy i spread są częścią ceny wykonania — już siedzą w wyniku transakcji (kolumna Profit w statemencie). Nie wolno ich dopisywać drugi raz do kosztów jak prowizję. Prowizja i swap to osobne pozycje kosztowe. Spread i slippage — nie.

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

IDDokumentZdarzenieData podatkowaKategoriaKwotaWalutaTabela NBPKursPrzychód PLNKoszt PLNUwagi
T-01cash ledgerWpłata10.03.2025transfer własny5 000,00USDNie wchodzi
A-1statementProwizja otwarcia A14.03.2025koszt3,50USD13.03.2025 — 050/A/NBP/20253,856813,503,50 × 3,8568 = 13,4988
B-1statementProwizja otwarcia B18.03.2025koszt2,10USD17.03.2025 — 052/A/NBP/20253,83298,052,10 × 3,8329 = 8,0491
B-2statementWynik zamknięcia B19.03.2025koszt (wynik ujemny)−120,00USD18.03.2025 — 053/A/NBP/20253,8152457,82120 × 3,8152 = 457,824
B-3statementProwizja zamknięcia B19.03.2025koszt2,10USD18.03.2025 — 053/A/NBP/20253,81528,012,10 × 3,8152 = 8,0119
A-2statementSwap A20.03.2025koszt (swap ujemny)−2,40USD19.03.2025 — 054/A/NBP/20253,84739,232,40 × 3,8473 = 9,2335
A-3statementWynik zamknięcia A21.03.2025przychód (wynik dodatni)350,00USD20.03.2025 — 055/A/NBP/20253,86751 353,63350 × 3,8675 = 1 353,625
A-4statementProwizja zamknięcia A21.03.2025koszt3,50USD20.03.2025 — 055/A/NBP/20253,867513,543,50 × 3,8675 = 13,5363
I-01cash ledgerOdsetki od gotówki21.03.2025inna kategoria (art. 30a)1,20USDPoza sumą CFD — osobna kwalifikacja
Razem — wynik z instrumentów pochodnych (art. 30b)1 353,63510,157 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.

Przykład rozliczenia dwóch pozycji CFD — wynik każdej pozycji, prowizje i swap przeliczone po kursach NBP z dnia poprzedzającego, sumy do poz. 22 i 23 PIT-38
Przykład rozliczenia dwóch pozycji CFD — wynik każdej pozycji, prowizje i swap przeliczone po kursach NBP z dnia poprzedzającego, sumy do poz. 22 i 23 PIT-38

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.

API NBP — obsługa błędu 404. Jeśli podasz datę weekendową lub świąteczną, API zwróci 404 (brak tabeli). Twój skrypt musi obsłużyć ten przypadek — cofaj się o jeden dzień, aż trafisz na dzień z tabelą. Pseudokod: 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.

Myfxbook i dziennik transakcji mogą pomóc w kontroli spójności — jeśli sumy w Excelu rozjeżdżają się z tym, co pokazuje tracker, wiesz, że gdzieś jest błąd — w formułach, zakresie dat, kursach albo w danych trackera. Ale Myfxbook nie zastępuje statementu i dokumentów źródłowych. To narzędzie pomocnicze, nie dowodowe.

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–29Razem: 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. 30Straty z lat ubiegłychZ rejestru strat, w granicach limitu; nie więcej niż poz. 28
Poz. 31Podstawa obliczenia podatkuPoz. 28 − poz. 30, zaokrąglone do pełnych złotych
Poz. 32Stawka19%
Poz. 33Podatek od dochodów z art. 30b ust. 1Poz. 31 × 19%
Poz. 34Podatek zapłacony za granicąTylko z dokumentem potwierdzającym pobranie, z limitem proporcjonalnym; inaczej 0
Poz. 35Podatek należnyPoz. 33 − poz. 34, zaokrąglone do pełnych złotych
Numeracja pól zmienia się między rocznikami. Powyższa tabela dotyczy PIT-38 za 2025 r. (wersja 18) według formularza i broszury MF. Przed wypełnieniem zawsze zweryfikuj z aktualną broszurą na podatki.gov.pl — różnica jednego numeru = dane w złym miejscu.
PIT-8C a PIT-38. Jeśli broker polski wystawił PIT-8C, kwoty przepisujesz do PIT-38. PIT-8C to informacja — PIT-38 to zeznanie, a podatek liczysz i płacisz sam. Jeśli handlowałeś u dwóch brokerów (polski + zagraniczny), wykazujesz oba źródła w jednym PIT-38: wiersz 1 z PIT-8C, wiersz 2 z własnych dokumentów — formularz sumuje je w wierszu 4.
Formularz PIT-38 za 2025 — część C z zaznaczonymi polami 20-23 (przychody/koszty z PIT-8C i własnych dokumentów) oraz pola 33-35 (podatek)
Formularz PIT-38 za 2025 — część C z zaznaczonymi polami 20-23 (przychody/koszty z PIT-8C i własnych dokumentów) oraz pola 33-35 (podatek)

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
Dowód złożenia to UPO — Urzędowe Poświadczenie Odbioru, które dostajesz po skutecznej wysyłce elektronicznej. Ekran z wyliczonym podatkiem ani „wysłano" bez UPO nie potwierdza złożenia. Pobierz UPO i zapisz razem z kopią zeznania.
Wpłata podatku — kwota do zapłaty z części G (poz. 51; przy samym wyniku z CFD równa poz. 35) na twój mikrorachunek podatkowy (indywidualny numer z podatki.gov.pl). Termin wpłaty = termin złożenia zeznania. Zachowaj potwierdzenie przelewu — to osobny dowód, niezależny od UPO.
Korekta PIT-38. Znalazłeś błąd po złożeniu albo broker skorygował statement? Składasz korektę — ten sam formularz, zaznaczasz cel „korekta" (art. 81 Ordynacji podatkowej). Jeśli korekta zwiększa podatek — dopłacasz z odsetkami. Jeśli zmniejsza — wniosek o nadpłatę. Przy korekcie złożonej w ciągu 6 miesięcy od terminu złożenia zeznania i zapłacie zaległości w ciągu 7 dni od korekty odsetki wynoszą 50% stawki podstawowej (art. 56a § 1); nie dotyczy to korekty złożonej po zawiadomieniu o zamiarze wszczęcia kontroli (art. 56a § 3). Korekta dokumentu brokera, korekta twojego zeznania i dopłata to trzy osobne czynności — każda ze swoim dowodem.
Brakujący dokument. Broker zamknął platformę, a ty nie masz statementu za część roku? Poproś o wyciąg historyczny na piśmie (back-office ma dane dłużej niż platforma) i zachowaj korespondencję. Jeśli dokumentu nie da się odzyskać, odtwórz zdarzenia z potwierdzeń przelewów i eksportów cząstkowych, opisz metodę w arkuszu — ale nie wpisuj kwot, których nie umiesz udokumentować. Kwota bez dokumentu to kwota, której nie obronisz.

Dokumenty do przechowywania

DokumentTypPrzechowuj (za 2025 r.)
Statement brokera (wszystkie wersje, także po korekcie)Bazowydo końca 2031 r.
PIT-8C (jeśli dotyczy)Bazowydo końca 2031 r.
Arkusz z obliczeniami i rejestr stratRoboczydo końca 2031 r., dłużej przy odliczaniu straty w kolejnych latach
Kursy NBP użyte w obliczeniach (z numerami tabel)Pomocniczydo końca 2031 r.
UPO (Urzędowe Poświadczenie Odbioru) i potwierdzenie przelewuArchiwalnydo końca 2031 r.

FAQ — Rozliczenie Forex krok po kroku

Czy muszę rozliczać każdą transakcję osobno, czy mogę podać sumy?
W PIT-38 wpisujesz kwoty zbiorcze — łączny przychód i łączny koszt za cały rok. Nie dołączasz listy transakcji. Ale musisz być w stanie udowodnić te sumy — dlatego statement i arkusz przechowujesz do końca okresu przedawnienia, czyli za 2025 r. do końca 2031 r.
Czy przychodem jest wartość kontraktu, czy tylko zysk?
Wynik rozliczenia kontraktu. CFD rozlicza różnicę cen — przychód powstaje z realizacji praw z instrumentu pochodnego w momencie tej realizacji (art. 17 ust. 1 pkt 10 i ust. 1b ustawy o PIT). Wynik dodatni pozycji to przychód, wynik ujemny, prowizje i swapy ujemne to koszt. Nominał (lot × cena) nie trafia do zeznania.
Jaki kurs NBP stosuję do transakcji zamkniętej w weekend?
Kurs średni NBP z ostatniego dnia z opublikowaną tabelą przed dniem transakcji. Jeśli broker datuje zamknięcie na sobotę lub niedzielę — kurs z piątku. Jeśli piątek jest dniem świątecznym — z czwartku. Sprawdź datę w czasie polskim, nie serwera.
Jak rozliczyć transakcję otwartą w grudniu 2025 i zamkniętą w styczniu 2026?
Wynik pozycji i prowizje trafiają do zeznania za rok zamknięcia — 2026 (art. 17 ust. 1b, art. 23 ust. 1 pkt 38a). Swapy naliczone w grudniu 2025 domyślnie idą razem z wynikiem pozycji do 2026, każdy przeliczony kursem z dnia poprzedzającego naliczenie (art. 11a ust. 2). Ujęcie ich w 2025 jest możliwe tylko po ustaleniu, że umowa i raport brokera traktują je jako odrębne rozliczenie pieniężne — potwierdzonej interpretacji brak, więc to wariant do weryfikacji, nie zalecenie. Rok otwarcia nie zmienia roku wyniku pozycji.
Czy swapy ujemne zmniejszają mój podatek?
Tak. Swapy ujemne zwiększają koszty uzyskania przychodu, a swapy dodatnie zwiększają przychód. Przy rozliczeniu z własnych dokumentów pokazujesz je w wierszu 2 części C PIT-38 (poz. 22 przychody, poz. 23 koszty); jeśli są już ujęte w PIT-8C — w wierszu 1 (poz. 20/21). Nie ujmuj ich dwa razy.
Mam konto w USD — czy kurs walutowy wpływa na wynik w PLN?
Tak, ale tylko przez kurs z dnia poprzedzającego każde zdarzenie: wynik pozycji przeliczasz po kursie sprzed dnia zamknięcia, prowizję po kursie sprzed dnia jej pobrania, swap po kursie sprzed naliczenia. Nie ma osobnej „różnicy kursowej" między dniem otwarcia a zamknięcia, bo przychodem jest wynik, nie nominał. Wynik dodatni pojedynczej pozycji pozostaje dodatni w PLN. Wynik roczny z wielu zdarzeń może jednak wypaść inaczej niż suma w USD, bo każde zdarzenie ma własny kurs: +350 USD po 3,8152 (053/A/NBP/2025) i −345 USD po 3,8774 (056/A/NBP/2025) to +5 USD netto, ale 1 335,32 − 1 337,70 = −2,38 zł — to skutek art. 11a, nie błąd arkusza.
Mam brokera na Cyprze — czy muszę dołączyć PIT/ZG?
Nie z powodu adresu brokera. PIT/ZG i poz. 34 dotyczą podatku faktycznie zapłaconego za granicą od dochodu uzyskanego za granicą, z metodą odliczenia proporcjonalnego (art. 30b ust. 5a i 5b). Jeśli broker nic nie pobrał, wpisujesz 0; czy składasz sam załącznik, zależy — według broszury MF do PIT-38 — od tego, czy dochód jest „uzyskany za granicą" w rozumieniu ustawy, nie od adresu brokera. Jeśli pobrał — potrzebujesz dokumentu i analizy, którego państwa i której umowy podatkowej to dotyczy.
Czy mogę użyć Myfxbook do rozliczenia zamiast statementu?
Nie. Myfxbook to narzędzie pomocnicze do kontroli spójności — jeśli sumy w Excelu rozjeżdżają się z trackerem, wiesz, że jest rozbieżność do wyjaśnienia — w arkuszu albo w trackerze. Ale Myfxbook nie zastępuje statementu brokera jako dokumentu źródłowego. Przy kontroli urząd chce widzieć raport od instytucji finansowej, nie screenshot z portalu.

Źródła i bibliografia

  1. 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)
  2. 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)
  3. 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)
  4. 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.

Jarosław Wasiński LinkedIn

Redaktor naczelny MyBank.pl • Analityk finansowy i rynkowy

mgr Jarosław Wasiński — niezależny analityk i praktyk z ponad 20-letnim doświadczeniem w sektorze finansowym. Twórca i redaktor naczelny portalu MyBank.pl, dostarczającego rzetelną wiedzę o finansach osobistych, bankowości i inwestycjach od 2004 roku.

  • Bankowość i produkty finansowe: porównania kont osobistych i firmowych, analiza taryf opłat, testy aplikacji mobilnych, recenzje kredytów, lokat i kart kredytowych — z naciskiem na realne koszty i ukryte opłaty.
  • Rynki finansowe i makroekonomia: analiza fundamentalna rynków walutowych (Forex) i makroekonomicznych od 2007 roku, zarządzanie ryzykiem kapitału, struktura rynków OTC.
  • Kryptowaluty: analiza rynku kryptowalut, mechanizmów blockchain i tokenizacji aktywów w kontekście portfela inwestycyjnego.

Autor setek komentarzy rynkowych, analiz porównawczych produktów bankowych i materiałów edukacyjnych. Zwolennik transparentności — każdy ranking i recenzja na MyBank.pl opiera się na jawnej metodologii i zweryfikowanych źródłach (taryfy banków, regulaminy promocji, dane NBP).

Treści mają charakter edukacyjny i informacyjny — nie stanowią porady inwestycyjnej, rekomendacji ani oferty. Decyzje finansowe podejmuj na podstawie własnej analizy i konsultacji z doradcą.