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 — od wyeksportowania historii transakcji, przez przeliczenie 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. Tu nie ma nagrody za pewność siebie — jest tylko kara za zły workflow.
- Statement brokera to rdzeń dowodu, ale nie jedyny dokument — trzymasz też arkusz, historię kursów NBP, potwierdzenie wysyłki 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.
- Kurs NBP to kurs z dnia POPRZEDZAJĄCEGO — nie z dnia transakcji. Tabela A, kurs średni, ostatni dzień roboczy 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.
- 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ć.
1. Pobierz historię transakcji (statement)
Wszystko zaczyna się od danych. Twój broker rejestruje każdą transakcję — otwarcia, zamknięcia, swapy, prowizje, korekty. Z samym statementem też możesz się wyłożyć, jeśli broker ukrył korekty albo źle czytasz kolumny.
Każda platforma eksportuje dane inaczej — inne nazwy kolumn, inne formaty, inne ścieżki w menu.
| Platforma | Ścieżka w menu | Format | Uwagi |
|---|---|---|---|
| MT4 | Terminal → Account History → prawy klik → Save as Detailed Report | HTML | Ustaw Custom Period na cały rok. Detailed Report — standardowy nie zawiera swapów i prowizji |
| MT5 | Toolbox → History → Deals tab → 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 | XTB wystawia PIT-8C, ale zweryfikuj dane ze statementem |
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. Zidentyfikuj transakcje do rozliczenia
Nie wszystko, co widzisz w statemencie, trafia do PIT-38. Rozliczasz wyłącznie pozycje zamknięte w roku podatkowym.
Co wchodzi do rozliczenia
- Zamknięte pozycje — każda transakcja, w której nastąpiło zamknięcie w roku podatkowym
- Swapy — naliczone i pobrane/dodane w roku podatkowym. 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 przychód lub koszt niewidoczny w kolumnie Profit, który większość traderów pomija
Co NIE wchodzi
- Otwarte pozycje na 31 grudnia — floating P/L nie jest przychodem. Dopóki nie zamkniesz, nie ma zdarzenia podatkowego
- Wpłaty i wypłaty — transfery między kontem bankowym a brokerskim to nie przychód ani koszt
- Transakcje na koncie demo
- Bonusy brokera — sprawdź regulamin. W większości bonus staje się przychodem dopiero przy wypłacie. Szara strefa — skonsultuj z doradcą
- 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, który przy dużej zmienności potrafi zmienić wynik netto.
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.
- Przychód zamknięcia — kurs z ostatniego dnia roboczego przed dniem zamknięcia pozycji
- Koszt otwarcia — kurs z ostatniego dnia roboczego przed dniem otwarcia
- Prowizje — kurs z dnia poprzedzającego dzień pobrania
- Swapy — formalnie kurs z dnia poprzedzającego każde naliczenie. W praktyce wielu stosuje kurs z dnia zamknięcia pozycji — uproszczenie, nie oficjalna zasada
Weekendy i święta
- Transakcja w piątek (dowolna godzina) → kurs NBP z czwartku. Dzień poprzedzający piątek to czwartek
- Transakcja w sobotę/niedzielę (datowana przez serwer brokera) → kurs z piątku
- Dzień świąteczny w poniedziałek → kurs z piątku (ostatni dzień roboczy)
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.
Przychód
Przychód (PLN) = Wartość zamknięcia (waluta) × Kurs NBPzamknięcie-1
Koszt uzyskania przychodu
Suma trzech składników, każdy przeliczony na PLN po odpowiednim kursie NBP:
- Wartość otwarcia pozycji — przeliczona po kursie z dnia poprzedzającego otwarcie
- Prowizje (otwarcie + zamknięcie) — przeliczone po kursie z dnia poprzedzającego pobranie
- Swapy ujemne — przeliczone po kursie z dnia poprzedzającego naliczenie
Koszt (PLN) = OtwarciePLN + ProwizjePLN + Swapy ujemnePLN
Dochód (lub strata)
Dochód = PrzychódPLN − KosztPLN
Jeśli wynik jest dodatni — masz dochód do opodatkowania. Jeśli ujemny — masz stratę do przeniesienia.
5. Przykład liczbowy — pełne rozliczenie jednej transakcji
Scenariusz: Trader kupił 0,5 lota EUR/USD po 1,0850 w piątek 14.03.2025. Zamknął pozycję po 1,0920 w piątek 21.03.2025. Prowizja: 3,50 USD za otwarcie + 3,50 USD za zamknięcie = 7 USD. Swap naliczony w czwartek 20.03: −2,40 USD (ujemny).
Krok A: Ustal kursy NBP
- Otwarcie: piątek 14.03.2025 → kurs z dnia poprzedzającego = kurs z czwartku 13.03.2025
- Zamknięcie: piątek 21.03.2025 → kurs z dnia poprzedzającego = kurs z czwartku 20.03.2025
- Prowizja otwarcia (14.03) → kurs z 13.03. Prowizja zamknięcia (21.03) → kurs z 20.03
- Swap (naliczony 20.03) → kurs z 19.03
Kursy NBP (przykładowe):
- USD/PLN 13.03.2025 = 4,0250
- USD/PLN 19.03.2025 = 4,0310
- USD/PLN 20.03.2025 = 4,0150
Krok B: Oblicz wartości pozycji
0,5 lota EUR/USD = 50 000 EUR. Wynik w USD:
- Wartość otwarcia: 50 000 × 1,0850 = 54 250 USD
- Wartość zamknięcia: 50 000 × 1,0920 = 54 600 USD
- Zysk brutto: 350 USD
Krok C: Przelicz na PLN
- Przychód: 54 600 USD × 4,0150 = 219 219,00 PLN
- Koszt otwarcia: 54 250 USD × 4,0250 = 218 356,25 PLN
- Prowizja otwarcia: 3,50 × 4,0250 = 14,09 PLN
- Prowizja zamknięcia: 3,50 × 4,0150 = 14,05 PLN
- Swap ujemny: 2,40 × 4,0310 = 9,67 PLN
Krok D: Wynik
- Przychód: 219 219,00 PLN
- Koszt: 218 356,25 + 14,09 + 14,05 + 9,67 = 218 394,06 PLN
- Dochód: 219 219,00 − 218 394,06 = 824,94 PLN
- Podatek 19%: 824,94 × 0,19 = 157 PLN (zaokrąglony do pełnych złotych)
Zysk brutto to 350 USD. Zysk netto po przeliczeniu, kosztach i podatku: 667,94 PLN. Różnica kursów NBP między dniem otwarcia a zamknięcia wpłynęła na wynik — gdyby złotówka się umocniła, zysk w PLN byłby mniejszy.
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. W Google Sheets — IMPORTDATA lub custom script. W Excelu — Power Query.
while response == 404: date = date - 1 day. Przy 10 000 transakcji rocznie batchuj zapytania — agresywne odpytywanie może zablokować dostęp.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. 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, minimalna struktura to:
Ticket | Instrument | Close Date (PL time) | P&L (waluta) | Commission | Swap | NBP Date (D-1) | NBP Rate | Przychód PLN | Koszt PLN
Test kontroli jakości: porównaj sumę P&L z arkusza do sumy 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 — które pola
Masz obliczone sumy. Formularz jest prosty — problemem nie jest kliknięcie w pola, tylko dojście do liczb.
| Pole PIT-38 (za 2025) | Co wpisać | Skąd wziąć dane |
|---|---|---|
| Poz. 20 (część C, wiersz 1) | Przychody — z PIT-8C (broker polski) | Kwota z PIT-8C, jeśli dotyczy |
| Poz. 21 (część C, wiersz 1) | Koszty — z PIT-8C (broker polski) | Kwota z PIT-8C, jeśli dotyczy |
| Poz. 22 (część C, wiersz 2) | Przychody — z własnych dokumentów (broker zagraniczny) | Suma wartości zamknięcia wszystkich pozycji w PLN + swapy dodatnie |
| Poz. 23 (część C, wiersz 2) | Koszty — z własnych dokumentów (broker zagraniczny) | Suma wartości otwarcia + prowizje + swapy ujemne (PLN) |
| Poz. 26–29 | Agregacja przychodów i kosztów z części C | System oblicza automatycznie |
| Poz. 33 | Podatek od dochodów z art. 30b ust. 1 | 19% od dochodu (jeśli > 0). Zaokrąglone do pełnych złotych |
| Poz. 34 | Podatek zapłacony za granicą | Jeśli broker pobrał podatek u źródła. Dla brokerów FX w UE/UK: zazwyczaj 0 |
| Poz. 35 | Podatek należny | Poz. 33 minus Poz. 34 |
8. Złóż zeznanie
Termin: 30 kwietnia roku następującego po roku podatkowym. Odsetki to najmniejszy problem. Prawdziwym dramatem przy błędach lub braku zapłaty jest to, że urząd skarbowy może wejść na twoje rachunki bankowe i zablokować kapitał w ramach egzekucji. Błąd w PIT-38 może wyzerować twoją płynność na rynku szybciej niż jakikolwiek margin call.
Sposób złożenia
- Twój e-PIT (podatki.gov.pl) — jeśli broker wystawił PIT-8C, część danych może być wstępnie wypełniona. Brakujące (broker zagraniczny) uzupełniasz ręcznie i akceptujesz
- e-Deklaracje — formularz interaktywny, podpis danymi autoryzacyjnymi
- Papierowo — nadal możliwe, ale niepraktyczne
Dokumenty do przechowywania
| Dokument | Typ | Przechowuj |
|---|---|---|
| Statement brokera | Bazowy | 5 lat |
| PIT-8C (jeśli dotyczy) | Bazowy | 5 lat |
| Arkusz z obliczeniami | Roboczy | 5 lat |
| Kursy NBP użyte w obliczeniach | Pomocniczy | 5 lat |
| UPO (potwierdzenie wysyłki) | Archiwalny | 5 lat |
FAQ — Rozliczenie Forex krok po kroku
Czy muszę rozliczać każdą transakcję osobno, czy mogę podać sumy?
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 różnice kursowe wpływają na wynik w PLN?
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 (Dz.U. 2024 poz. 226 z późn. zm.) — art. 11a ust. 1-2 (przeliczanie walut obcych), art. 30b (opodatkowanie instrumentów pochodnych)
- Narodowy Bank Polski — Tabela A kursów średnich walut obcych, archiwum i API: api.nbp.pl
- Ministerstwo Finansów — Twój e-PIT, PIT-38 za 2025 r.: podatki.gov.pl/pit/pit-38-za-2025
- Art. 70 Ordynacji podatkowej (Dz.U. 2023 poz. 2383) — okres przedawnienia zobowiązań podatkowych (5 lat)