BTC284,6k zł2,48%
ETH9,01k zł3,86%
XRP4,87 zł8,20%
LTC192 zł3,31%
BCH825 zł1,61%
DOT3,56 zł4,54%

Dziennik transakcji Forex — R-multiple, expectancy, SQN i MAE/MFE

Dziennik transakcji pozwala odtworzyć decyzje i ocenić wyniki na podstawie zapisanych danych. Warto uwzględniać w nim nie tylko zysk lub stratę, lecz także powód wejścia, początkowe ryzyko, koszty, przebieg pozycji i zgodność z planem. W tej lekcji pokazujemy, jakie informacje zbierać, jak sprawdzać je z raportem brokera i jak obliczać najważniejsze miary wyników. Wyjaśniamy między innymi R-multiple, czyli wynik wyrażony w jednostkach początkowego ryzyka, oraz expectancy, czyli średni wynik transakcji w analizowanej próbie. Przykładowy dziennik z obliczeniami pomoże uporządkować własny zapis i zaplanować jego regularny przegląd. Zwracamy też uwagę na definicje, liczebność próby i ograniczenia wniosków, aby same wskaźniki nie zastępowały analizy.

Dziennik transakcji Forex i metryki skuteczności — R-multiple, expectancy, profit factor, Sharpe, Sortino, MAE/MFE w analizie systemu transakcyjnego
Najważniejsze w 60 sekund
  • Bez dziennika handlujesz przekonaniem, nie systemem. 29 pól per transakcja to minimum operacyjne — setup, klasa A/B/C, entry planowane vs realne, SL planowane vs realne fill, slippage, spread, swap, prowizja, R-multiple netto, klasyfikacja błędu, mental state, godziny snu, wolumen, wartość pipa przy otwarciu, wersja setupu i link do dowodu
  • R-multiple netto = realny PnL netto z brokera / planowane ryzyko — spread i slippage zapisujesz osobno jako execution drag, nie odejmujesz ich drugi raz. Jedna jednostka między różnymi setupami pozwala porównywać scalp na M5 z swingiem na D1
  • Expectancy netto powyżej +0,3R dla setupów A+ to robocze założenie scenariusza [PRÓG ILUSTRACYJNY — NIE NORMA RYNKOWA], nie norma rynku: 0 do +0,15R znaczy „zbieraj dane", poniżej 0R — kandydat do wyłączenia. Sam próg niczego nie rozstrzyga: decyduje szerokość przedziału ufności względem progu, a kryteria decyzji „utrzymać / zmienić / wyłączyć" stoją w artykule 15.10
  • Sortino liczysz z downside deviation po całej populacji (√(Σ min(R − MAR, 0)² / n), MAR = 0) — nie z odchylenia samych strat; ta druga wersja zawyża wynik — na rozkładzie z sekcji 3 około trzykrotnie, a o ile w twojej próbie, zależy od tego, jak częste są w niej straty. MAE/MFE pokazuje, czy SL jest zbyt szeroki i czy zostawiasz pieniądze na stole. Rytm zapisu: codziennie 5 min po sesji, tygodniowo 30 min, miesięcznie 60 min pełnych metryk; kwartalny audyt strategii prowadzi artykuł 15.10

1. Dlaczego bez dziennika nie masz systemu, masz przekonanie

Handel bez logowania parametrów rynkowych to drogie hobby. Masz nie system, lecz serię losowych kliknięć obarczoną błędem przeżywalności. W ramach wymogów ostrzegania o ryzyku dla CFD dostawcy publikują odsetek rachunków detalicznych tracących pieniądze — każdy swój własny, przeliczany nie rzadziej niż co trzy miesiące. Liczba z ostrzeżenia jednego brokera nie jest bieżącą statystyką całego rynku i nie ma sensu jej tu uśredniać. To są twoi statystyczni współtowarzysze. Brak diagnozy sprawia, że większość z nich powtarza te same błędy przez całą aktywność; doświadczenie bez pomiaru jest tylko powtarzalnym błędem.

Trzy iluzje, które niszczą tradera bez dziennika

Iluzja 1: pamięć selektywna. Mózg zapisuje silnie emocjonalnie nacechowane wydarzenia (duża wygrana, dramatyczna strata) i tłumi neutralne. Po miesiącu masz w głowie 3 transakcje z 50 — zwykle dwie wygrane i jedną stratną. Pamięć podsuwa te trzy transakcje jako reprezentatywne dla całości — nie są. Dziennik wyłącza tę iluzję — czarno na białym widzisz, że twoja „dobra strategia poniedziałkowa" miała w trzech miesiącach 8 wygranych i 11 stratnych.

Iluzja 2: ocena post hoc. Po stratnej transakcji mózg konstruuje narrację „wiedziałem, że to był słaby setup". Po wygranej: „czytałem rynek". Obie narracje są tworzone po wyniku, nie na podstawie tego, co rzeczywiście wiedziałeś przed wejściem. Dziennik wymusza zapis intencji przed kliknięciem (planowane entry, planowane SL, klasa setupu) — porównanie planu z realizacją obnaża, ile twoich „dobrych decyzji" było faktycznie planowanych, a ile dorobionych retroaktywnie.

Iluzja 3: agregat zamiast rozkładu. Trader patrzy na saldo rachunku. „W marcu zarobiłem 4%" — i koniec analizy. Ale 4% może być wynikiem 60 transakcji z WR 55% i expectancy +0,3R (zdrowy system), albo 12 transakcji z WR 75% i jednym mocnym trade'em na +6R, który zamaskował fakt, że pozostałe 11 to było kasyno (niezdrowy system, który zaraz cię zniszczy). Saldo nie odróżnia tych dwóch przypadków. Dziennik z metrykami — odróżnia.

Definicja systemu transakcyjnego (taka, której detal nie używa)

System transakcyjny to powtarzalny proces, którego wyniki da się zmierzyć w jednolitych jednostkach. Trzy słowa kluczowe:

  • Powtarzalny — taki sam zestaw warunków produkuje porównywalne decyzje. Nie „czujem, że to było mocne", tylko „spełnione warunki A, B, C, więc wszedłem"
  • Zmierzony — każda transakcja ma 29 pól w dzienniku, dla każdego setupu liczysz expectancy, dla każdego miesiąca liczysz profit factor
  • Jednolite jednostki — R-multiple jest walutą porównań. „Wygrałem 200 PLN" nic nie mówi (na jakim ryzyku?), „wygrałem +1,8R" mówi wszystko

Bez tych trzech składników masz nie system, lecz serię pojedynczych decyzji bez wspólnego mianownika. Możesz mieć w niej szczęście (wtedy myślisz, że jesteś dobry) lub pecha (wtedy myślisz, że rynek jest manipulowany). Ani jedno, ani drugie nie jest prawdą — po prostu nie masz danych do oceny.

Przykład ilustracyjny (liczby syntetyczne, nie zapis rachunku): trader po margin callu, który „wiedział, gdzie popełnił błąd". Rachunek 18 000 PLN zjechany do 4 200 PLN, czyli −76,7%. Diagnoza własna: „zbyt długo trzymałem stratne pozycje". Pytanie zwrotne: ile razy powiększałeś stratną pozycję poza planowany SL i o ile R? Odpowiedzi nie ma, bo nie ma dziennika. Punkt wyjścia: rekonstrukcja ostatnich 30 transakcji z brokerskiego raportu CSV. Po dwóch dniach pracy wychodzi obraz, którego pamięć nie podała: 22 transakcje stratne, 8 wygranych, WR 26,7%, średnia strata −2,8R, średni zysk +0,9R. Suma: 8 × 0,9 − 22 × 2,8 = −54,4R, czyli −1,81R na transakcję — przy średnim ryzyku rzędu 1,4% kapitału na transakcję daje to dokładnie ten rząd strat, który widać na saldzie. Prawdziwa diagnoza nie brzmi „za długo trzymałem": SL był stawiany tam, gdzie było wygodnie, a nie tam, gdzie hipoteza się obala, i jedenaście razy doszło do dolewania do stratnej pozycji. Bez dziennika zostałyby z tego trzy zapamiętane dolewki, które „się odbiły".

Zapis przed wejściem — utrudnione kłamanie po wyniku

Drugi, niedoceniany aspekt dziennika: tarcie operacyjne. Zapis planu (entry, SL, sizing, klasy setupu) przed kliknięciem ma jedną funkcję — utrudnić ci kłamanie po wyniku. Jeżeli pozycja była poza setupem, dziennik ma to pokazać, nie pozwolić ci napisać „rynek wyglądał mocno". Excel nie racjonalizuje za ciebie: jeśli z palca przesunąłeś Stop Loss, wiersz 42 będzie miał kategorię 3, niezależnie od tego, jak dobry powód wymyśliłeś po fakcie. To nie jest kwestia psychologii, to tarcie operacyjne, które zmusza do refleksji, zanim zrobisz głupotę.

2. Co zapisywać — 29 pól dziennika transakcji

Dziennik amatorski ma 5–8 pól: data, para, kierunek, entry, SL, TP, wynik, komentarz. To jest minimum brokerskiego raportu, niewystarczające do diagnozy. Profesjonalny dziennik ma 29 pól, podzielonych na 7 grup. Każde pole odpowiada na konkretne pytanie analityczne.

Grupa A: identyfikacja transakcji (4 pola)

Pola podstawowe — co i kiedy się stało.

  1. ID transakcji — unikalny numer (T-2026-04-001), pozwala referencjować w notatkach i analizach
  2. Data i godzina otwarcia — z dokładnością do minuty, w jednej strefie czasowej (zalecam UTC + lokalna)
  3. Para walutowa — EUR/USD, GBP/JPY etc.
  4. Kieruneklong / short

Grupa B: kontekst strategiczny (4 pola)

Co planowałeś, w jakim setupie, z jaką klasyfikacją.

  1. Setup z playbooka — nazwa konkretnego setupu (np. „LON-breakout-A", „NY-mean-revert-B"). Bez tego nie da się policzyć expectancy per setup
  2. Klasa setupu — A+, A, B, C. Każda inny sizing. Bez klasy nie wiesz, czy zarabiasz na A+ a tracisz na B, czy odwrotnie
  3. Reżim rynkowy — trending / ranging / high vol / low vol — diagnozowany na D1 lub H4 przed wejściem
  4. Sesja — Asian / LON / NY / overlap LON-NY. Pomaga wykryć, w której sesji masz edge a w której tracisz

Grupa C: parametry zlecenia — plan vs realność (6 pól)

Tu się rodzi większość brutalnych prawd o tradingu detalu.

  1. Entry planowane — cena, na której chciałeś wejść (z analizy)
  2. Entry realne — cena, na której rzeczywiście wszedłeś (slippage może być 1–5 pipsów na M15)
  3. SL planowane — cena, gdzie hipoteza się obala (z reguł strategii)
  4. SL realne (fill) — cena, na której SL został zrealizowany (slippage na SL bywa 2–10× większy niż na entry)
  5. TP planowane — cena lub wielokrotność R
  6. TP realne (fill) — cena, na której TP został zrealizowany lub pozycja zamknięta ręcznie

Grupa D: koszty (4 pola)

Koszty zjadają część expectancy brutto — ile dokładnie, wie wyłącznie twój dziennik, bo zależy to od pary, brokera i szerokości stopa. Bez ich pomiaru nie wiesz, czy strategia ma edge netto.

  1. Spread (pipsy) — w momencie wejścia, nie reklamowany przez brokera
  2. Slippage entry (pipsy)kierunek × (entry realne − entry planowane) / rozmiar pipsa; dodatnia wartość znaczy gorsze wejście, niż zaplanowałeś
  3. Slippage exit (pipsy)kierunek × (wyjście planowane − wyjście realne) / rozmiar pipsa. Znak jest tu odwrotny niż przy wejściu: dla longa gorsze wejście to cena wyższa od planu, ale gorsze wyjście to cena niższa od planu. Bez tego odwrócenia dobrze wykonane wyjście dostaje ujemny poślizg, a złe — dodatni
  4. Swap i prowizja — w walucie rachunku, dla pozycji trzymanej przez noc lub na ECN

Grupa E: wynik i metryki (3 pola)

  1. Wynik brutto — w pipsach i w walucie rachunku, bez kosztów
  2. Wynik netto — po odjęciu prowizji i swapu; spread i poślizg są już w cenach filli, więc nie odejmujesz ich drugi raz
  3. R-multiple netto — wynik_netto / planowane_ryzyko (definicja w sekcji 3)

Grupa F: ocena jakości decyzji (4 pola)

Ta grupa jest najczęściej pomijana — i najważniejsza. Dwie transakcje mogą mieć identyczny wynik, ale różną jakość decyzji.

  1. Klasyfikacja błędu — kategoryczna lista: 0 = brak błędu, 1 = za szeroki SL, 2 = za wąski SL, 3 = przesunięty SL przeciw planowi, 4 = early exit, 5 = late exit, 6 = wejście poza setupem (FOMO), 7 = oversized (większy lot niż plan), 8 = revenge trade, 9 = inny błąd decyzyjny, 10 = błąd infrastrukturalny (brak hard SL na serwerze, awaria platformy lub łącza — jedyna kategoria, której naprawa nie polega na zmianie zachowania)
  2. Mental state (1–5) — 1 = źle (zmęczony, zły, rozproszony), 5 = świetnie (skupiony, wypoczęty, jasna głowa). Ocena przed wejściem, nie po wyniku
  3. Godziny snu poprzedniej nocy — liczba. Pozwala policzyć korelację Spearmana między snem a R-multiple na własnej próbie. To hipoteza do sprawdzenia u siebie, nie prawo rynku: publicznej statystyki tej korelacji dla detalu nie ma, więc żadna gotowa wartość nie jest tu punktem wyjścia [BRAK DANYCH DO WERYFIKACJI: korelacja sen – wynik w dziennikach detalu]
  4. Decisional quality (1–5) — wystawiana na koniec dnia, oddzielnie od wyniku. Pytanie: czy ta transakcja była podjęta zgodnie z planem? 5 = idealnie, 1 = improwizacja

Grupa G: wolumen, wersja i dowód (4 pola)

Cztery pola, bez których dziennik nie domyka się ani rachunkowo, ani dowodowo. Bez wolumenu i wartości pipa nie odtworzysz planowanego ryzyka z samych cen. Bez wersji nie wiesz, którą wersję reguł właściwie mierzysz. Bez linku do dowodu nie masz czym rozstrzygnąć rozbieżności z raportem brokera.

  1. Wolumen (lot) — wielkość pozycji po zaokrągleniu do kroku brokera. Razem z odległością SL i wartością pipa daje planowane ryzyko w walucie rachunku; bez niego pole 21 jest nieodtwarzalne
  2. Wartość pipa w chwili otwarcia — w walucie rachunku i na 1 lota standardowego, zapisana jako liczba przy transakcji, a nie jako globalna stała arkusza (kurs zmienia się w ciągu roku, patrz nota w sekcji 3)
  3. Wersja setupu / playbooka — identyfikator i numer wersji karty, np. „LON-breakout-A+ v1.2". Wyniki sprzed zmiany reguł i po zmianie to dwie różne próby, nie jedna dłuższa
  4. Link do dowodu (evidence_link) — zrzut wykresu, numer zlecenia u brokera albo ścieżka do pliku raportu. Pole, które odróżnia ewidencję od wersji zdarzeń

Tabela — wszystkie 29 pól, typy danych, źródło

#PoleTypŹródło
1ID transakcjitekstgenerowane automatycznie
2Data i godzinadatetimebroker / platforma
3Paratekstbroker
4Kieruneklong/shortbroker
5Setup z playbookateksttrader (przed wejściem)
6Klasa A+/A/B/Ckategoriatrader (przed wejściem)
7Reżim rynkowykategoriatrader (przed wejściem)
8Sesjakategoriaauto (z czasu)
9Entry planowaneliczbatrader (przed wejściem)
10Entry realneliczbabroker
11SL planowaneliczbatrader (przed wejściem)
12SL realne (fill)liczbabroker
13TP planowaneliczbatrader (przed wejściem)
14TP realne (fill)liczbabroker
15Spread (pipsy)liczbabroker / log
16Slippage entry (pipsy)liczbaauto: kierunek × (10 − 9) / rozmiar pipsa
17Slippage exit (pipsy)liczbaauto: kierunek × (11 − 12) lub kierunek × (13 − 14), dzielone przez rozmiar pipsa — kolejność odwrotna niż w polu 16
18Swap + prowizjaliczbabroker
19PnL brutto z filliliczbabroker (z fillów rzeczywistych)
20PnL netto z brokeraliczbabroker: PnL po prowizji/swapie; spread i slippage zawarte w fillach
21R_nettoliczbaauto: PnL_netto_broker / planned_risk
22Klasyfikacja błędukategoria 0–10trader (po zamknięciu)
23Mental state 1–5liczbatrader (przed)
24Godziny snuliczbatrader (rano)
25Decisional quality 1–5liczbatrader (koniec dnia)
26Wolumen (lot)liczbabroker
27Wartość pipa przy otwarciuliczbaauto (kurs z dnia transakcji); na 1 lota standardowego
28Wersja setupu / playbookateksttrader (przed wejściem)
29Link do dowodutekst / URLtrader (po zamknięciu)

Wprowadzenie 29 pól zajmuje 60–90 sekund per transakcja, jeśli masz szablon. Bez tych danych każda kolejna analiza jest zgadywaniem. Jeżeli nie masz 90 sekund na opisanie transakcji, nie powinieneś mieć 30 sekund na jej otwarcie.

Mini-specyfikacja CSV / Google Sheets

Format maszynowy do zaimplementowania w arkuszu lub bazie. Lewa kolumna — nazwa techniczna, prawa — źródło uzupełniania:

Nazwa kolumnyTypŹródło
trade_idtekstauto / formuła
open_time_utc / close_time_utcdatetime UTCbroker (CSV/MT export)
pairtekstbroker
directionlong / shortbroker
setup / setup_class (A+/A/B/C)tekst / kategoriatrader, przed wejściem
regime / sessionkategoriatrader / auto
planned_entry / actual_entryliczbatrader / broker
planned_sl / actual_exitliczbatrader / broker
planned_tp / actual_tpliczbatrader / broker
spread_pipsliczbabroker / log
slippage_entry_pips / slippage_exit_pipsauto: wejście kierunek × (actual_entry − planned_entry) / pip_size; wyjście kierunek × (planned_exit − actual_exit) / pip_sizeformuła; kierunek +1 dla long, −1 dla short — dodatni poślizg ma zawsze znaczyć gorsze wykonanie. Stąd odwrócona kolejność odejmowania przy wyjściu: gorsze wejście to cena mniej korzystna od planu, a gorsze wyjście to cena, po której zamknąłeś, gorsza od planowanej. Różnicę cen dzielisz przez rozmiar pipsa danej pary (pip_size = 0,0001, dla par z JPY 0,01), inaczej kolumna nie jest w pipsach, tylko w jednostkach ceny
swap_pln / commission_plnliczbabroker
broker_gross_pnl_pln / broker_net_pnl_plnliczbabroker: PnL z fillów / po prowizji i swapie
planned_gross_pnl_pln / planned_risk_plnliczbaauto: planned_gross_pnl_pln = kierunek × (cena wyjścia z planu − entry_plan) / pip_size × lots × pip_value_at_open; planned_risk_pln = |entry_plan − SL_plan| / pip_size × lots × pip_value_at_open. Obie różnice cen dzielisz przez pip_size dokładnie tak samo jak w polach poślizgu — bez tego dzielenia mnożysz jednostki ceny zamiast pipsów i mianownik wychodzi o cztery rzędy wielkości za mały. pip_value_at_open jest wartością pipa na 1 lota standardowego, a wolumen wchodzi osobno przez lots
r_netliczba (R)auto: broker_net_pnl_pln / planned_risk_pln
execution_drag_Rliczba (R)auto: (planned_gross_pnl_same_exit_type − broker_net_pnl_pln) / planned_risk_pln — „same exit type" znaczy: SL z planu przy wyjściu na stopie, TP z planu przy wyjściu na celu (definicja w sekcji 3)
mae_r / mfe_rliczba (R)trader / Edgewonk / cTrader / skrypt
error_code0–10trader, po zamknięciu (10 = infrastruktura)
mental_state 1–5liczbatrader, przed wejściem
sleep_hoursliczbatrader, rano
decision_quality 1–5liczbatrader, koniec dnia
lots / pip_value_at_openliczbabroker / auto (kurs z dnia transakcji) — pip_value_at_open zapisujesz jako wartość pipa na 1 lota standardowego (100 000 jednostek waluty bazowej) w walucie rachunku, nigdy na wolumen transakcji; przeskalowanie na pozycję robi mnożnik lots. W przykładzie z sekcji 3 liczba 22 PLN/pip jest już przeskalowana do 0,5 lota i dlatego rachunek w prozie nie mnoży przez lots drugi raz — w kolumnie arkusza stoi 44
strategy_versionteksttrader, przed wejściem
evidence_linktekst / URLtrader, po zamknięciu

Pól logicznych jest 29, kolumn technicznych w arkuszu więcej — część pól występuje w parze „plan / realizacja" (wejście, stop, cel, poślizg) i zajmuje dwie kolumny. Liczba kolumn w twoim arkuszu ma wynikać z tej tabeli, a nie odwrotnie.

Skala error_code ma jedenaście wartości i jest jedna w całym artykule: 0 = brak błędu, 1–9 = błędy decyzyjne z listy pola 22, 10 = błąd infrastrukturalny (brak hard SL na serwerze, awaria platformy, awaria łącza). Dziesiątki nie wolno mieszać z kategoriami decyzyjnymi, bo jej naprawa nie polega na zmianie zachowania, tylko na zmianie konfiguracji. Pozycja otwarta bez stopa po stronie brokera może w razie awarii wyprodukować zdarzenie, którego nie zrekonstruujesz z logów — a wtedy dziennik też go nie wyjaśni.

Gotowy szablon do zbudowania w 20 minut. Zamiast budowy arkusza od zera — dodatek F prowadzi przez gotową strukturę kolumn technicznych, formuły dla r_net, slippage_entry_pips i execution_drag_R (w wariantach Excel PL i EN) oraz dashboard metryk, ze startowym plikiem CSV generowanym lokalnie w przeglądarce. Trzy rzeczy sprawdź po jego otwarciu, bo arkusz jest starszy niż ta sekcja: czy ma kolumny lots, pip_value_at_open, strategy_version i evidence_link (jeśli nie — dopisz je), czy formuła execution_drag_R odnosi się do planowanej ceny wyjścia tego samego typu, a nie zawsze do TP, oraz czy formuły planned_risk_pln i planned_gross_pnl_pln dzielą różnicę cen przez rozmiar pipsa i biorą wartość pipa na lota standardowego. W razie rozbieżności obowiązuje definicja z tego artykułu.
Szablon dziennika transakcji Forex z 29 polami — identyfikacja, kontekst strategiczny, parametry zlecenia plan vs realność, koszty, wynik, ocena jakości decyzji
Szablon dziennika transakcji Forex z 29 polami — identyfikacja, kontekst strategiczny, parametry zlecenia plan vs realność, koszty, wynik, ocena jakości decyzji

Warstwa zleceń i filli — jedna decyzja, wiele wykonań

Tabela transakcji odpowiada na pytanie „jaka była decyzja". Historia zleceń i filli odpowiada na pytanie „jak została wykonana". To dwie osobne tabele połączone kluczem trade_id i mieszanie ich jest najczęstszym powodem, dla którego dziennik przestaje zgadzać się z rachunkiem:

  • orders — jedno zlecenie: order_id, trade_id, typ (market / limit / stop / modyfikacja SL / modyfikacja TP), cena zlecona, czas, status (wykonane / odrzucone / anulowane). Odrzucenia i przesunięcia stopa zapisujesz tutaj, nie w tabeli transakcji
  • fills — jedno wykonanie: fill_id, order_id, trade_id, cena fillu, wolumen fillu, prowizja fillu, czas. Częściowe wyjście to kilka wierszy z tym samym trade_id

Cztery reguły łączenia, bez których liczby przestają być porównywalne:

  • R0 liczysz raz, z planu sprzed pierwszego wejścia, i nie zmieniasz go po częściowym zamknięciu ani po przesunięciu stopa. Wyjście połowy pozycji na +1R nie tworzy nowego mianownika dla reszty
  • PnL i koszty sumujesz po fillach, dopiero suma dzieli się przez R0. Nie uśredniasz R poszczególnych transz — bo transze mają różny wolumen
  • Jedna decyzja to jedna transakcja w statystyce. Win rate liczony po transzach jest zawyżony, bo pierwsza transza z reguły wychodzi na plusie; to najprostszy znany sposób narysowania sobie ładniejszego dziennika bez zmiany wyniku
  • Przy MAE/MFE powiedz, co mierzysz — ścieżkę ceny od pierwszego fillu czy wynik całej, malejącej ekspozycji. To dwie różne liczby i nie mogą stać w jednej kolumnie

Import, uzgodnienie z raportem brokera, deduplikacja i korekty

Dziennik, którego nikt nie porównał z raportem wykonawcy, jest wersją zdarzeń, nie ewidencją. Procedura minimalna, raz w tygodniu:

  1. Import — eksport historii z platformy do CSV za zamknięty okres, zawsze ten sam zakres i ta sama strefa czasowa (najprościej: tydzień kalendarzowy, czas serwera brokera, zapisany w nazwie pliku)
  2. Deduplikacja — klucz trade_id z numeru pozycji u brokera. Przy dwóch eksportach o zachodzących zakresach wygrywa wiersz z późniejszym czasem zamknięcia, a nie z później pobranego pliku. Sam trade_id nie wystarczy tam, gdzie są korekty i częściowe wykonania: kolejny fill i poprawka tej samej decyzji mają ten sam trade_id, więc nadpisywanie po nim gubi jedno z nich. Te deduplikujesz po identyfikatorach zdarzeń (order_id, fill_id) w warstwie orders/fills opisanej niżej
  3. Uzgodnienie — liczba transakcji, suma PnL netto oraz suma prowizji i swapów muszą zgodzić się z raportem brokera co do grosza. Różnica jest pozycją do wyjaśnienia, nie do zaokrąglenia
  4. Korekty — poprawiony wiersz zapisujesz jako nową wersję, z datą i powodem; starej wartości nie kasujesz. Bez tego nie odróżnisz błędu zapisu od błędu wykonania, a to są dwie różne diagnozy

Test gotowości: dlaczego raporty dwóch platform pokazują różne liczby dla tych samych transakcji? Sześć powodów, wszystkie sprawdzalne w danych:

  • Inna strefa czasowa serwera — transakcja zamknięta o 23:30 wpada raz w poniedziałek, raz we wtorek. Suma tygodnia się różni, suma roku nie
  • Inne ujęcie prowizji i swapu — jedna platforma wlicza je do PnL pozycji, druga księguje osobno na rachunku
  • Netting kontra hedging — dwie przeciwstawne pozycje na tej samej parze to u jednego brokera jedna pozycja netto, u drugiego dwie transakcje
  • Częściowe zamknięcia — jedna platforma pokazuje jedną transakcję z kilkoma fillami, druga rozbija ją na kilka transakcji. Zmienia to liczbę transakcji, a przez nią win rate i średnie R
  • Korekty po fakcie — anulowanie transakcji z błędnej ceny, poprawka swapu, przeksięgowanie. Raport pobrany dzień wcześniej ich nie zna
  • Zaokrąglenia i przewalutowanie — przeliczenie na walutę rachunku po kursie z chwili zamknięcia kontra po kursie dziennym

Jeżeli po przejściu tej listy różnica zostaje, dziennik nie jest gotowy do liczenia metryk. Metryki policzone na nieuzgodnionych danych nie mówią nic o strategii — mówią o jakości importu.

Granica: dziennik tradingowy nie jest ewidencją podatkową i jej nie zastępuje. Wynik netto po podatku liczy dział 14 — dziennik dostarcza do niego dokumentów (raport brokera, numery zleceń, evidence_link), a nie kalkulacji podatku. Do samego r_net podatek nie wchodzi ani w liczniku, ani w mianowniku: nie jest kosztem transakcji.

Pole „decisional quality" jako odgrodzenie od wyniku. Brett Steenbarger (psycholog desków proptradingowych) podkreśla[3], że największym błędem analizy dziennika jest ocenianie decyzji przez pryzmat wyniku. Świetna decyzja może dać stratę (rynek wykonał ruch o niskim prawdopodobieństwie), słaba decyzja może dać zysk (szczęście). Bez oddzielnego pola „decisional quality" tracisz tę informację — i wzmacniasz złe nawyki, bo „zarobiłem, więc dobrze zrobiłem". Pole 25 wymusza ocenę procesu, nie tylko rezultatu. Po roku zbierania danych możesz policzyć korelację między decisional quality a wynikiem — i znaleźć systematyczne odchylenia (np. 2 = rozluźniona dyscyplina, ale akurat fartowny miesiąc).

3. R-multiple — fundamentalna metryka, której detal nie liczy

R-multiple to jedyna metryka pozwalająca porównywać transakcje o różnym profilu ryzyka w jednej skali. Bez R-multiple zysk +200 PLN na scalpie M5 i zysk +200 PLN na swing trade'cie D1 wyglądają identycznie — choć pierwszy mógł być zrobiony przy ryzyku 50 PLN (zysk +4R), a drugi przy ryzyku 600 PLN (zysk +0,33R, czyli operacyjnie marny). R-multiple wprowadził Van K. Tharp[1] — i jest to fundament każdej poważnej analizy systemu transakcyjnego.

Formuła R-multiple

R-multiple — wzór netto z uwzględnieniem kosztów transakcyjnych
R-multiple netto — wzór: realny wynik netto z raportu brokera podzielony przez planowane ryzyko R_netto = realny_wynik_netto_z_brokera / planowane_ryzyko licznik (realny PnL netto) PnL z filli − prowizja − swap ryzyko w pipsach × lot × wartość_pipa mianownik (planowane ryzyko) = np. realny PnL netto = 1228 PLN +1228 PLN 660 PLN np. ryzyko = 660 PLN = +1,86R netto, z realnych filli brokera

Najbezpieczniejsza definicja operacyjna:

R_netto = realny_wynik_netto_z_brokera / planowane_ryzyko

Gdzie realny wynik netto to PnL po faktycznych fillach, prowizji, swapie i wszystkich kosztach widocznych w raporcie brokera (slippage i spread są już zawarte w fillach — broker liczy zysk od cen rzeczywistych transakcji, nie planowanych). Slippage i spread zapisujesz osobno jako pola diagnostyczne, ale nie odejmujesz ich drugi raz, jeśli są już zawarte w realnym PnL.

Mianownik — planowane ryzyko, nie realne. Jeśli SL został zrealizowany z poślizgiem 10 pipsów ponad planowane 30, nie zwiększa to mianownika: strata wynosi wtedy 40 / 30 = −1,33R plus prowizja, a nie −1R. Wynik gorszy niż −1R jest normalny i po to właśnie jest ta konwencja — pokazuje, ile faktycznie kosztowały sytuacje, w których egzekucja zawiodła. Mianownik ustalasz przed wysłaniem zlecenia i nie zmieniasz go po przesunięciu stopa, po częściowym wyjściu ani po poznaniu wyniku.

Execution drag — diagnostyka egzekucji obok wyniku

Spread, slippage i prowizje są kosztami operacyjnymi, ale w księgowości wyniku siedzą już w realnym PnL. Aby diagnozować jakość egzekucji, liczysz osobno:

execution_drag_R = [kierunek × (cena_wyjścia_planowana_tego_samego_typu − cena_wejścia_planowana) / pip_size × lot × wartość_pipa − realny_wynik_netto] / planowane_ryzyko

Całą wagę niesie tu zwrot „planowana cena wyjścia tego samego typu". Transakcja wyszła na stopie — porównujesz z planowanym SL. Wyszła na celu — z planowanym TP. Zamknąłeś ją ręcznie albo na czasie — planowanej ceny wyjścia nie ma, więc drag jest sumą poślizgu wejścia, prowizji i swapu w R. Porównywanie każdej transakcji z planowanym TP jest kuszące, bo TP zawsze jest zapisane, ale daje absurd: czysta strata na stopie, zamknięta co do pipsa tam, gdzie miała być, pokazywałaby wtedy około 3R „kosztu egzekucji" przy zerowym poślizgu. Execution drag mierzy jakość wykonania, a nie odległość wyniku od planu idealnego. Kierunek (+1 long, −1 short) i wolumen muszą być we wzorze — bez kierunku short z dobrym wykonaniem dostanie ujemny drag. Spread nie wchodzi osobno, bo jest już w cenach filli.

Reguła operacyjna: nie mieszaj księgowości wyniku z diagnostyką egzekucji. Jeśli liczysz r_net z realnego PnL brokera, koszty są już w wyniku — analizujesz je osobno przez execution drag. Jeśli liczysz r_net z planowanych cen, musisz odjąć koszty ręcznie. Jedno albo drugie, nigdy obie metody naraz.

Przykład pełnej kalkulacji

Trade na EUR/USD, lot 0,5 (50 000 EUR), USD/PLN ≈ 4,40. Wartość pipa dla 1 lota standardowego EUR/USD = 10 USD ≈ 44 PLN; dla 0,5 lota ≈ 22 PLN/pip.

  • Entry planowane: 1,0850
  • Entry realne: 1,0852 (slippage 2 pipsy)
  • SL planowane: 1,0820 (30 pipsów ryzyka)
  • TP planowane: 1,0910 (60 pipsów = 2R)
  • Wyjście realne: 1,0908 (slippage 2 pipsy na TP)
  • Spread w momencie wejścia: 0,8 pipsa
  • Prowizja ECN: 4 PLN per RT
  • Swap: 0 (pozycja zamknięta tego samego dnia)

Liczenie R_netto (z realnych filli brokerskich):

  • PnL z faktycznych filli: 1,0908 − 1,0852 = 56 pipsów; w PLN: 56 × 22 = 1232 PLN (slippage entry i exit są już w tej liczbie, bo broker liczy od cen rzeczywistych)
  • Prowizja ECN: 4 PLN. Swap: 0
  • Realny wynik netto: 1232 − 4 = 1228 PLN
  • Planowane ryzyko: |1,0850 − 1,0820| = 30 pipsów; 30 × 22 = 660 PLN
  • R_netto = 1228 / 660 ≈ +1,86R

Liczenie execution drag (diagnostyka osobno):

  • Planowany wynik brutto (idealne fille, zero kosztów): (1,0910 − 1,0850) × 22 = 60 × 22 = 1320 PLN
  • Realny wynik netto: 1228 PLN
  • Różnica: 1320 − 1228 = 92 PLN
  • execution_drag_R = 92 / 660 ≈ 0,14R — transakcja wyszła na celu, więc planowaną ceną wyjścia jest TP; koszty egzekucji zjadły 14% planowanego ryzyka

Ta sama transakcja zamknięta na stopie ma drag liczony od planowanego SL: przy fillu dokładnie na SL i prowizji 4 PLN daje to 4 / 660 ≈ 0,01R — a nie 3R, które wychodziły przy porównywaniu z TP. Ekstrapolacja jest osobnym założeniem i trzeba je nazwać: „po 100 transakcjach drag ≈ 14R, czyli przy 1% ryzyka na transakcję około 14% kapitału rocznie" obowiązuje wyłącznie wtedy, gdy wszystkie sto wychodzi na celu z takim samym poślizgiem. W realnym dzienniku liczysz średni drag po wszystkich zamkniętych transakcjach, osobno dla wyjść na stopie i na celu — to dwa różne rozkłady i uśrednianie ich razem zaciera diagnozę. Koszty nie są zaokrągleniem; są diagnostyką, na której decydujesz o brokerze, parze i timeframie. Trzymaj r_net jako księgowość wyniku, execution_drag_R jako narzędzie poprawy egzekucji — nigdy nie mieszaj obu w jednej formule.

Wartość pipa w PLN nie jest stała. Dla rachunku denominowanego w PLN wartość pipa zmienia się z kursem USD/PLN, EUR/PLN, JPY/PLN. Przy USD/PLN 4,40 wartość pipa EUR/USD na 1 lota standardowego ≈ 44 PLN; przy USD/PLN 3,90 ≈ 39 PLN. Różnica 11% — jeśli używasz stałej wartości na cały rok, twój R-multiple jest systematycznie obciążony błędem. Dwa rozwiązania: (a) odświeżaj wartość pipa w arkuszu raz w tygodniu z aktualnego fixingu NBP, (b) prowadź dziennik z wartością pipa w momencie transakcji jako oddzielne pole, nie globalną stałą.

Dlaczego R-multiple, a nie procenty albo PLN

JednostkaCo pokazujeOgraniczenie
PLNBezwzględny zysk/strataNie uwzględnia ryzyka — +200 PLN przy ryzyku 50 PLN to coś innego niż przy ryzyku 600 PLN
%Wpływ na rachunekZależy od sizingu — większy sizing = większy %, ale niekoniecznie lepsza decyzja
PipsyRuch cenyNie porównuje par o różnej zmienności (EUR/USD vs USD/MXN)
R-multipleZysk znormalizowany przez ryzykoWymaga dyscypliny w definiowaniu ryzyka przed wejściem

R-multiple to jedyna jednostka, która pozwala uczciwie porównywać scalp z swingiem, EUR/USD z GBP/JPY, mały lot z dużym. Trader, który po roku ma 200 trades z dziennika R-multiple, może odpowiedzieć precyzyjnie: „Mój setup A+ ma średnie R = +0,84, B = +0,21, C = −0,13" — i na tym kończy się wkład dziennika. Czy C wyłączyć, rozstrzyga przedział wokół tych trzech liczb i kryteria z artykułu 15.10, nie sam znak średniej.

Rozkład R-multiple — jak czytać statystykę 220 transakcji

Rozkład R-multiple z 220 transakcji — rozkład ilustracyjny, dane syntetyczne; adnotacja i wnioski w tekście są policzone z tych samych słupków
Rozkład R-multiple na 220 transakcjach syntetycznych — histogram od −1R do +5R, średnia +0,13R, mediana 0R, win rate 44,5%, profit factor 1,31 Rozkład R-multiple — 220 transakcji syntetycznych, system z prawym ogonem 82 −1R 22 −0,5R 18 0R 28 +0,5R 38 +1R 15 +1,5R 9 +2R 4 +3R 3 +4R 1 +5R 0 25 50 75 R-multiple netto Średnia +0,13R | Mediana 0R | WR 44,5% | Profit Factor 1,31

Z tego rozkładu czyta się trzy rzeczy:

  • WR niski, ale system zarabia — 44,5% (98 z 220 transakcji powyżej 0R), a prawy ogon (17 transakcji na +2R i wyżej, w tym jedna +5R) odpowiada za całą dodatnią expectancy: bez tych siedemnastu suma R jest ujemna
  • Mediana 0R, średnia +0,13R — różnica między medianą a średnią pokazuje, że system zarabia na ogonie: połowa transakcji kończy się na zerze albo poniżej. To typowe dla trend-following i dlatego mediana i średnia muszą stać obok siebie, a nie jedna zamiast drugiej
  • Mean-reversion ma odwrotny rozkład — wysoki WR (60–70%), niska średnia wygranej (+0,5R), długi lewy ogon (rzadkie −2R, −3R, gdy mean-reversion zawodzi)

Ten sam rozkład posłuży dalej za punkt odniesienia dla trzech metryk — Sharpe'a i Sortino z sekcji 6 oraz SQN z sekcji 4: średnia wynosi +0,130R, odchylenie standardowe 1,182R, więc Sharpe per-trade to 0,11, SQN — 1,10 (przy N = 100), a Sortino liczone poprawnie — 0,21. Warto te liczby zapamiętać: „zdrowy" rozkład z profit factorem 1,31 wypada w popularnych tabelach progowych blado. To nie rozkład jest zły — to progi bywają ustawione pod inne definicje albo pod inną liczbę transakcji.

Przykład ilustracyjny (liczby syntetyczne, nie zapis rachunku): trader, który nie liczył R-multiple, bo „zarabiał w PLN". Czternaście miesięcy dziennika prowadzonego wyłącznie w PLN. Saldo: +12% rocznie. „Strategia działa." Pytanie: jaki masz średni R na transakcję? Cisza. Po przeliczeniu: 142 transakcje, średnia +0,11R netto, średni rozmiar pozycji odpowiadający 1,8% kapitału ryzyka. Rachunek liniowy: 0,11R × 1,8% = +0,2% na transakcję, 142 × 0,2% = +28%. Na rachunku zostało +12%. Różnica nie ma jednego wyjaśnienia i to jest właśnie lekcja z tego przykładu. Część zjada składanie: przy takiej zmienności wyników złożenie okresów dodatnich i ujemnych zabiera rząd dwóch punktów procentowych rocznie wobec rachunku liniowego. Reszty nie da się rozliczyć bez dziennika — a najbardziej prawdopodobne wytłumaczenie jest takie, że ryzyko nie było stałe: po seriach strat malało, po wygranych rosło, więc największe pozycje trafiały statystycznie w gorsze okresy. Suma R i procent na rachunku to dwie różne liczby: pierwsza mierzy jakość systemu, druga jakość systemu pomnożoną przez decyzje o wielkości pozycji. Bez R-multiple widzisz wyłącznie tę drugą i nie wiesz, którą z nich poprawiać.

4. Expectancy netto — co odróżnia system zarabiający od marketingu

Expectancy odpowiada na jedno pytanie: ile średnio zarabiam (lub tracę) na każdej transakcji, w jednostce R? Bez tej liczby nie wiesz, czy twój system ma matematyczny sens. Z nią — wiesz dokładnie, jakiego zwrotu oczekiwać po N transakcjach.

Formuła expectancy

Wersja kanoniczna (do backtestu / liczenia z planowanych cen):

Expectancy = (WR × średni_zysk_R) − ((1 − WR) × średnia_strata_R) − koszty_per_trade_R

Jedno zastrzeżenie do tego zapisu, bo artykuł wraca do niego dwa razy dalej: człon (1 − WR) traktuje jako straty również transakcje z wynikiem dokładnie 0R. Jeżeli w próbie są zera, liczysz trzema populacjami — E = pw × avgWin − pl × |avgLoss|, gdzie pw + pl + p0 = 1 — i tak robi skrypt z tej sekcji oraz rachunek dziennika syntetycznego z sekcji 5.

Gdzie:

  • WRwin rate, ułamek (0,55 = 55%)
  • średni_zysk_R — średni R wygranych transakcji (np. +1,8R)
  • średnia_strata_R — bezwzględna wartość średniego R przegranych (np. 1,0R, jeśli SL trzymane idealnie)
  • koszty_per_trade_R — spread + slippage + swap + prowizja, wyrażone jako % R (np. 0,1R)
W dzienniku live: expectancy = średnia(r_net). Jeśli r_net liczysz z PnL netto brokera (sekcja 3), expectancy live to po prostu średnia z kolumny r_net — koszty są już zawarte. Rozbita formuła z WR, avgWin i avgLoss służy do diagnostyki struktury systemu (czy zarabiasz na wysokim WR z małymi wygranymi, czy na niskim WR z prawym ogonem) i do liczenia expectancy z backtestu, gdzie ceny są planowane. Nie odejmuj kosztów drugi raz.

Trzy progi sensowności expectancy

Progi w tej tabeli są założeniem scenariusza, nie normą rynku [PRÓG ILUSTRACYJNY — NIE NORMA RYNKOWA]. Wchodzą do decyzji wyłącznie razem z przedziałem ufności: jeżeli przedział dla expectancy setupu obejmuje próg, decyzja jest odroczona, a nie podjęta „bo wyszło poniżej". Sizing przypisany do klasy setupu bierzesz z planu (artykuł 15.2), a kryteria degradacji i wyłączenia — z audytu (artykuł 15.10).

Expectancy nettoStatusCo robić
> +0,5RWybitnaSetup A+, pełna alokacja według planu
+0,3R do +0,5RSolidnaSetup A, normalna alokacja
+0,15R do +0,3RMarginalnaSetup B, zmniejszona alokacja według planu
0 do +0,15RWątpliwaPróba zbyt mała lub edge na granicy szumu — zbieraj więcej danych przed decyzją
< 0StratnaKandydat do wyłączenia z playbooka — po sprawdzeniu przedziału i według kryteriów z artykułu 15.10, nie z samego progu

Próba minimalna do oszacowania expectancy

To jest pułapka, w którą wpada większość detalu: liczy expectancy z 30–50 transakcji i traktuje wynik jako prawdę. Statystyka mówi inaczej:

  • 50 transakcji — przedział ufności 95% dla WR ma szerokość około ±14 punktów procentowych (Wald przy p = 0,55; założenie: obserwacje niezależne — przy seriach i wspólnych zdarzeniach przedział jest szerszy). WR 55% może w rzeczywistości być 41% albo 69%
  • 100 transakcji — przedział ~±10 pp. Wciąż za szeroko dla decyzji o porzuceniu setupu
  • 200 transakcji — przedział ~±7 pp
  • 500 transakcji — przedział ~±4 pp. Wąsko, ale to wciąż tylko węższy przedział, a nie dowód przewagi

Praktyczna reguła nie brzmi „nie decyduj poniżej stu transakcji", tylko: decyduj przedziałem, nie liczbą. Jeżeli 95-procentowy przedział dla expectancy setupu obejmuje twój próg decyzji, decyzja jest odroczona do następnego przeglądu — niezależnie od tego, czy masz 40 transakcji, czy 400. Liczba obserwacji wchodzi do rachunku wyłącznie przez szerokość tego przedziału i nie jest sama w sobie ani „minimum", ani walidacją. Osobna sprawa: wstrzymanie handlu z powodu ryzyka operacyjnego — przekroczonego limitu, powtarzalnego błędu wykonania — jest dozwolone zawsze i nie czeka na statystykę.

Pułapka: expectancy bez kosztów i bez execution drag

Detal regularnie liczy expectancy brutto, bez uwzględnienia spreadu, slippage'u, prowizji i swapu. Wynik wygląda dobrze (+0,5R), realny jest gorszy (+0,2R). Po roku saldo nie rośnie — bo zarabia +0,2R, nie +0,5R, na każdej z 200 transakcji.

Reguła metodologiczna: jeżeli r_net liczysz z realnego PnL netto brokera (sekcja 3), koszty są już w wyniku — wtedy spread, slippage i prowizję analizujesz osobno jako execution drag, nie odejmujesz drugi raz. Jeżeli liczysz expectancy z planowanych cen (np. backtest na świecach bez modelowania kosztów), musisz koszty odjąć ręcznie. Nie mieszaj obu metod — przykłady poniżej traktuj jako kalkulację execution drag, nie jako podwójne odejmowanie od PnL netto.

Konkretne przykłady kosztów per trade w R:

  • Para: EUR/USD, broker ECN, spread 0,2 pip + prowizja 7 USD per lot RT, slippage średnio 0,3 pip każda strona
  • Setup typowy: SL 30 pipsów, lot 0,3 (USD/PLN ≈ 4,40); wartość pipa per 0,3 lota ≈ 13,2 PLN
  • Planowane ryzyko: 30 × 13,2 = 396 PLN
  • Koszty: spread 0,2 × 13,2 = 2,64 PLN + slippage 0,6 (entry+exit) × 13,2 = 7,92 PLN + prowizja 7 USD × 0,3 lota = 2,1 USD ≈ 9,24 PLN — łącznie ~19,8 PLN
  • Koszty w R: 19,8 / 396 = 0,05R (czyli 5% planowanego ryzyka)

Inny przykład — gorsza para, mniejszy SL:

  • Para: GBP/JPY, broker market maker, spread 2,5 pip, brak prowizji, slippage 1 pip każda strona
  • Wartość pipa per 0,1 lota dla GBP/JPY przy USD/JPY ≈ 150 i USD/PLN ≈ 4,40: 1 lot to 1000 JPY na pipsa, czyli 1000 / 150 = 6,67 USD, po kursie 4,40 — 29,33 PLN; dla 0,1 lota ≈ 2,93 PLN/pip
  • Setup ciasny: SL 25 pipsów, lot 0,1 → ryzyko 25 × 2,93 = 73 PLN
  • Koszty per pozycja: spread 2,5 × 2,93 = 7,33 PLN + poślizg wejścia 1 × 2,93 = 2,93 PLN + poślizg wyjścia 1 × 2,93 = 2,93 PLN = 13,19 PLN
  • Koszty w R: 13,19 / 73,25 = 0,18R (czyli 18% planowanego ryzyka idzie w koszty od startu)

To pokazuje pułapkę proporcji: ten sam poślizg w pipsach przy ciaśniejszym SL zżera znacznie większy procent R. Dlatego 25-pipsowe SL na parze ze spreadem 2,5 pipsa jest kosztowo trudne do obrony. Reguła robocza, którą przyjmujemy tu jako założenie scenariusza [PRÓG ILUSTRACYJNY — NIE NORMA RYNKOWA]: koszty per transakcja powyżej 5–8% planowanego ryzyka zaczynają decydować o wyniku — wtedy zmieniasz brokera, parę albo timeframe (na większy SL). Właściwy test jest jednak własny i policzysz go z dziennika: podziel średnie koszty w R przez swoją expectancy brutto i zobacz, jaka jej część zostaje.

SQN Van Tharpa — wzór, sufit N i skala

System Quality Number (SQN): SQN = (E / σR) × √N,   N = min(n, 100)
gdzie E — expectancy w R, σR — odchylenie standardowe R, n — liczba zamkniętych transakcji w próbie. Sufit N = 100 jest częścią wzoru Van K. Tharpa[1]: powyżej stu transakcji podstawiasz 100, inaczej sama długość próby podnosi wynik bez żadnej zmiany jakości systemu.

Poniżej skala interpretacyjna autora metody. To jedyne miejsce w tym kursie, w którym podajemy ją w całości — pozostałe artykuły działu odsyłają tutaj zamiast powielać własne warianty, bo trzy różne „skale Tharpa" w trzech artykułach to sprzeczność, nie spójność.

SQNEtykieta autora metody
< 1,6słaby (poor)
1,6 – 1,9słaby, ale możliwy do handlu (below average)
2,0 – 2,4przeciętny (average)
2,5 – 2,9dobry (good)
3,0 – 5,0bardzo dobry (excellent)
5,1 – 6,9wyjątkowy (superb)
≥ 7,0„holy grail" — u autora sygnał, żeby sprawdzić liczbę transakcji i dopasowanie parametrów, a nie nagroda

Trzy zastrzeżenia, bez których ta tabela wprowadza w błąd. Po pierwsze: to skala autora metody, nie norma rynkowa [PRÓG ILUSTRACYJNY — NIE NORMA RYNKOWA]. Po drugie: SQN rośnie z pierwiastkiem N aż do stu transakcji, więc porównujesz wyłącznie wyniki liczone przy tym samym N — rozkład z sekcji 3 daje 1,10 przy N = 100 i 1,63, gdyby ktoś podstawił n = 220 bez sufitu; to ta sama próba i dwie różne etykiety. Po trzecie: SQN nie jest decyzją o alokacji. Mówi o stosunku sygnału do szumu w próbie, a nie o tym, ile kapitału wolno postawić — i nie zastępuje przedziału ufności dla expectancy.

Segmentacja próby — bez wybierania najlepszego podzbioru

Dziennik pozwala pociąć próbę na setupy, sesje, reżimy i wersje playbooka — i to jest jego rola. Trzy zdania, które trzeba przy tym mieć w głowie. Im więcej podzbiorów porównujesz, tym większa szansa, że najlepszy z nich jest najlepszy przez przypadek: przy dwunastu setupach najlepszy wynik jest wyborem z dwunastu prób, a nie pomiarem. Podział na część kalibracyjną i walidacyjną oraz cała mechanika testu poza próbą należą do artykułu 15.4. Decyzja „utrzymać / zmienić / wyłączyć" — do artykułu 15.10. Zadaniem dziennika jest podać dla każdego podzbioru liczbę obserwacji i przedział, a nie ranking.

Bootstrap CI dla expectancy — kiedy +0,22R jest hipotezą, nie edgem

Expectancy +0,22R na 42 transakcjach nie jest edge'em — jest hipotezą. Bootstrap pokazuje to wprost: losujesz 10 000 razy próbę z powtórzeniami z tych 42 transakcji, dla każdej liczysz średnie R, a rozkład tych średnich daje przedział ufności. Wynik zapisujesz jednym zdaniem, zawsze z tymi samymi trzema składnikami — n, metoda i założenie:

„Po n = 42 transakcjach 95-procentowy przedział dla expectancy wynosi (−0,17R; +0,61R) przy std(R) = 1,3R (liczba podana tu jako rachunek kontrolny z przybliżenia normalnego ±1,96 × std/√n; wersją właściwą jest bootstrap — 10 000 losowań z powtórzeniami — który przy skośnym rozkładzie R wypada niesymetrycznie wobec tego przedziału, i to jego wynik zapisujesz. Założenie wspólne: obserwacje niezależne — przy seriach i wspólnych zdarzeniach przedział jest szerszy). Przedział obejmuje zero, więc decyzja o setupie jest odroczona do następnego przeglądu."

Sama liczba transakcji niczego nie rozstrzyga — rozstrzyga szerokość przedziału względem progu decyzji. Dla setupów o niskiej częstotliwości (kilka sygnałów miesięcznie) bootstrap jest obowiązkowy: bez niego pięćdziesiąt transakcji zebranych przez cały rok wygląda jak wynik, a jest szumem rozłożonym na dwanaście miesięcy.

Skrypt Python do liczenia expectancy z CSV

Poniższy fragment liczy expectancy, profit factor, MAE/MFE i kilka innych metryk z dziennika eksportowanego do CSV:

import pandas as pd
import numpy as np

# Wczytanie dziennika z CSV (29 pól z sekcji 2)
df = pd.read_csv('dziennik.csv')

# Tylko transakcje zamknięte, czyli te z policzonym R
df = df.dropna(subset=['r_net'])

# Kolejność chronologiczna. Bez niej krzywa kapitału i obsunięcie opisują
# kolejność wierszy w eksporcie, a nie historię rachunku.
df['close_time_utc'] = pd.to_datetime(df['close_time_utc'], utc=True)
df = df.sort_values('close_time_utc').reset_index(drop=True)

total = len(df)
if total == 0:
    raise SystemExit('Brak zamkniętych transakcji — metryki nieokreślone, nie zerowe.')

r = df['r_net']

# Trzy populacje: wygrane, stratne, zera. Zero to nie strata.
wins   = r[r > 0]
losses = r[r < 0]
zeros  = r[r == 0]

wr       = len(wins) / total
p_loss   = len(losses) / total
avg_win  = wins.mean()        if len(wins)   else float('nan')
avg_loss = abs(losses.mean()) if len(losses) else float('nan')

# Expectancy to po prostu średnia r_net — koszty są już w r_net
expectancy = r.mean()
# kontrola struktury: musi wyjść ta sama liczba
kontrola   = wr * avg_win - p_loss * avg_loss

# Profit Factor. Brak strat = nieokreślony, nie "nieskończony = doskonały"
sum_wins   = wins.sum()
sum_losses = abs(losses.sum())
profit_factor = sum_wins / sum_losses if sum_losses > 0 else float('nan')

# Sharpe per-trade i SQN z sufitem N = 100
sd     = r.std(ddof=0)
sharpe = expectancy / sd if sd > 0 else float('nan')
sqn    = sharpe * np.sqrt(min(total, 100))

# Sortino: downside deviation po CAŁEJ populacji, MAR = 0
mar     = 0.0
dside   = np.sqrt((np.minimum(r - mar, 0) ** 2).mean())
sortino = (expectancy - mar) / dside if dside > 0 else float('nan')

# Przedział ufności dla expectancy (założenie: obserwacje niezależne)
se = r.std(ddof=1) / np.sqrt(total)
ci = (expectancy - 1.96 * se, expectancy + 1.96 * se)

# Drawdown na krzywej kapitału przy stałym ryzyku f na transakcję.
# Kapitał początkowy 1,0 MUSI być w zbiorze, z którego bierzesz szczyt kroczący —
# bez niego dziennik zaczynający się od straty pokazuje obsunięcie 0.
f       = 0.01                      # założenie scenariusza, nie norma
equity  = pd.concat([pd.Series([1.0]), (1 + r * f).cumprod()], ignore_index=True)
run_max = equity.cummax()
max_dd  = ((equity - run_max) / run_max).min()

# MAE/MFE — liczone tylko z wypełnionych kolumn, na tej samej populacji co wynik.
# Brak kolumn = wynik nieokreślony, nie zerowy.
mae_win = mae_loss = mfe_win = float('nan')
if {'mae_r', 'mfe_r'}.issubset(df.columns):
    m = df.dropna(subset=['mae_r', 'mfe_r'])
    if len(m):
        mae_win  = m.loc[m['r_net'] > 0, 'mae_r'].mean()
        mae_loss = m.loc[m['r_net'] < 0, 'mae_r'].mean()
        mfe_win  = m.loc[m['r_net'] > 0, 'mfe_r'].mean()

print(df.groupby(['setup', 'strategy_version']).agg({
    'r_net': ['count', 'mean', 'sum', 'std']
}))

print(f"n: {total} (wygrane {len(wins)}, stratne {len(losses)}, zera {len(zeros)})")
print(f"WR: {wr:.1%}")
print(f"Expectancy: {expectancy:+.2f}R  (kontrola struktury: {kontrola:+.2f}R)")
print(f"CI 95% expectancy: ({ci[0]:+.2f}R; {ci[1]:+.2f}R)")
print(f"Profit Factor: {profit_factor:.2f}")
print(f"Sharpe per-trade: {sharpe:.2f}   SQN (N=min(n,100)): {sqn:.2f}")
print(f"Sortino (downside deviation, MAR=0): {sortino:.2f}")
print(f"Max DD na krzywej kapitału przy f={f:.0%}: {max_dd:.1%}")
print(f"MAE wygranych: {mae_win:.2f}R   MAE strat: {mae_loss:.2f}R   MFE wygranych: {mfe_win:.2f}R")

Skrypt zakłada strukturę CSV zgodną z 29 polami z sekcji 2, ale wymaga wypełnionych czterech kolumn: r_net, close_time_utc (bez niej nie ma kolejności, a bez kolejności nie ma krzywej kapitału ani obsunięcia) oraz setup i strategy_version do rozbicia per setup. mae_r i mfe_r są opcjonalne — przy pustych kolumnach ta część wyniku zostaje nieokreślona, a nie zerowa. Zanim uwierzysz jego wynikom, przepuść przez niego plik kontrolny o znanych liczbach — na przykład sześciowierszowy dziennik z sekcji 5 — i sprawdź, czy zwraca to samo, co rachunek ręczny. Drugi plik kontrolny ma się zaczynać od straty: to jedyny układ, który wykrywa brak kapitału początkowego w szczycie kroczącym, bo wtedy błędna wersja pokazuje przy pierwszej transakcji obsunięcie zero zamiast pełnej straty. Narzędzie, którego nie sprawdziłeś na znanym wyniku, nie jest narzędziem diagnostycznym, tylko kolejnym źródłem pewności siebie.

Przykład ilustracyjny (liczby syntetyczne, nie zapis rachunku): setup wyrzucony przy n = 38. Setup „NY-mean-revert-B" po sześciu tygodniach: 38 transakcji, expectancy −0,04R. Decyzja: do wyrzucenia. Dwa miesiące później ten sam setup w cudzym dzienniku, 180 transakcji, expectancy +0,28R. Skąd różnica? Tam H1 z SL 30 pipsów, tu M15 z SL 12 pipsów — ten sam poślizg w pipsach to przy ciaśniejszym stopie znacznie większy ułamek R, więc koszty zjadały edge. Ale najważniejsze jest co innego: na 38 transakcjach ta diagnoza była statystycznie nieosiągalna, bo 95-procentowy przedział dla WR przy p ≈ 0,5 ma szerokość ±16 punktów procentowych (Wald; założenie: obserwacje niezależne). Reguła: zanim wyrzucisz setup, sprawdź MAE per timeframe i koszty per transakcja w R, a decyzję o wyłączeniu podejmij przedziałem, według kryteriów z artykułu 15.10 — nie na podstawie samego znaku expectancy.
Expectancy netto — wzór, progi sensowności i przykładowa kalkulacja dla 200 transakcji; jak odróżnić system A+ od marketingowego pseudo-edge
Expectancy netto — wzór, progi sensowności i przykładowa kalkulacja dla 200 transakcji; jak odróżnić system A+ od marketingowego pseudo-edge

5. Profit Factor i Recovery Factor — różne pytania, różne odpowiedzi

Expectancy mówi „ile średnio zarabiam per trade". Profit Factor i Recovery Factor odpowiadają na inne pytania, a brak ich liczenia ukrywa część obrazu systemu.

Profit Factor — relacja zysku do straty

Progi w obu tabelach tej sekcji są założeniem scenariusza [PRÓG ILUSTRACYJNY — NIE NORMA RYNKOWA] i mają sens wyłącznie razem z liczbą obserwacji. Profit Factor liczony z R netto jest miarą netto; brak strat w próbie nie daje „PF nieskończonego = systemu doskonałego", tylko PF nieokreślony.

Profit Factor (PF) = suma_wszystkich_zysków / suma_wszystkich_strat (wartość bezwzględna)

Pytanie, na które odpowiada: czy mój system w sumie zarabia więcej niż traci, i o ile razy więcej?

Profit FactorInterpretacja
< 1,0System stratny — straty przewyższają zyski
1,0 − 1,3System na granicy — operacyjnie wątpliwy, koszty mogą zjeść marżę
1,3 − 1,5Akceptowalny dla setupu B
1,5 − 2,0Solidny system A
2,0 − 3,0Wybitny system A+
> 3,0Najczęściej oznaka curve fittingu lub zbyt małej próby — zweryfikuj na OOS

PF jest bardziej intuicyjny niż expectancy dla osób bez tła statystycznego — „za każdy 1 PLN straty zarabiam 1,8 PLN" jest jasne. Ale ma wadę: nie pokazuje rozkładu. System z PF 1,8 i 200 trades vs system z PF 1,8 i 20 trades to dwie różne rzeczy operacyjnie. Dlatego patrz na PF łącznie z liczbą próbek i expectancy.

Recovery Factor — zwrot vs największy drawdown

Recovery Factor (RF) = całkowity_zysk_netto / max_drawdown

Pytanie: ile razy zwrot przewyższa najgorszy historyczny drawdown? Innymi słowy — ile razy musiałbyś przejść przez najgorszy okres, żeby skompensować całkowity zwrot.

Przykład: rok zarabiasz +35%, max DD w trakcie roku był −12%. RF = 35/12 = 2,92. Obie liczby muszą pochodzić z tej samej krzywej i z tego samego okresu — zysk okresu do obsunięcia tego okresu. Podstawienie w licznik CAGR z kilku lat, a w mianownik obsunięcia z jednego, daje liczbę, której nie da się porównać z niczym, bo mianownik i licznik mierzą co innego.

Recovery FactorInterpretacja
< 1,0Drawdown przewyższa zysk — ryzyko nieproporcjonalne
1,0 − 2,0Zwrot pokrywa DD, ale nie z dużym buforem
2,0 − 3,0Solidny system
3,0 − 5,0Wybitny — zwrot 3–5× nad DD
> 5,0Znakomity, ale często statystyczny artefakt na małej próbie

RF jest przydatny dla psychologii: jeśli twój zwrot 30% rocznie wymagał przejścia przez DD 25% — RF 1,2 — pytanie czy ten ból był wart tego zwrotu. Mając wybór, większość traderów woli RF 2+ przy mniejszym CAGR niż wysoki zwrot z głębokim DD.

Win Rate vs Profit Factor — częsty błąd interpretacji

Detal myli WR z jakością systemu. „Mam WR 75%, więc system działa" — niekoniecznie. WR 75% z średnim zyskiem +0,5R i średnią stratą −2,5R to:

  • Expectancy: 0,75 × 0,5 − 0,25 × 2,5 = 0,375 − 0,625 = −0,25R (system stratny!)
  • Profit Factor: (0,75 × 0,5) / (0,25 × 2,5) = 0,375 / 0,625 = 0,6 — na każde 1 PLN straty system odzyskuje tylko 60 groszy zysku

Wysokie WR bez kontroli relacji średnich zysków do średnich strat to klasyczna pułapka mean-reversion bez dyscypliny SL. Każda przegrana zjada wynik wielu wygranych. Profit Factor odsłania to natychmiast — WR 75% z PF 0,6 = system stratny mimo wysokiego WR.

Przykład ilustracyjny (liczby syntetyczne, nie zapis rachunku): WR 78% i konto przy zerze. Grid martingale na EUR/USD. Win rate przez sześć miesięcy: 78% (134 z 172 transakcji wygrane). Saldo: −67% rachunku. Co się stało? Średni zysk +0,3R, średnia strata −4,1R. Suma zysków: 134 × 0,3 = 40,2R. Suma strat: 38 × 4,1 = 155,8R. Profit Factor = 40,2 / 155,8 = 0,26, expectancy = (40,2 − 155,8) / 172 = −0,67R na transakcję. Pojedyncza przegrana kasowała wynik czternastu wygranych (4,1 / 0,3 ≈ 13,7). Win rate był miarą, którą sobie wybrał, bo wyglądała dobrze. Profit Factor był miarą, której nie liczył, bo była niewygodna — i to jest cała różnica między dziennikiem a kolekcją dobrych wiadomości o sobie.

Mały dziennik syntetyczny — sześć transakcji i policzone metryki

[PRZYKŁAD ILUSTRACYJNY — NIE WYNIK HISTORYCZNY] Sześć wierszy poniżej to dane syntetyczne: nie pochodzą z żadnego rachunku i nie ilustrują skuteczności żadnej strategii. Służą jednemu — pokazaniu całego rachunku, od R0 do obsunięcia, na próbce tak małej, że da się ją sprawdzić na kartce. Konwencja jest jedna dla wszystkich wierszy: R0 to planowane ryzyko z chwili przed wejściem, r_net to wynik netto z raportu brokera (po prowizji i swapie) podzielony przez R0.

trade_idSetup i wersjaR0 (PLN)Wynik netto (PLN)r_netUwaga
T-001LON-breakout-A+ v1.2400+720+1,80wyjście na celu
T-002LON-breakout-A+ v1.2400−412−1,03stop z poślizgiem — gorzej niż −1R, mianownik bez zmian
T-003NY-mean-revert-B v0.9300−300−1,00stop bez poślizgu
T-004NY-mean-revert-B v0.9300+9+0,03przypadek graniczny: wyjście ręczne, po kosztach niemal zero — to nie jest strata
T-005LON-breakout-A+ v1.2500+625+1,25częściowe wyjście: dwa fille z tym samym trade_id, PnL zsumowany, R liczone raz
T-006LON-breakout-A+ v1.2500−510−1,02stop, prowizja poza R0

Rachunek, krok po kroku, wyłącznie z kolumny r_net:

  • Win rate = 3 / 6 = 50,0%. T-004 z wynikiem +0,03R liczy się jako wygrana, bo jest netto dodatnia; gdyby wyszła równo 0R, byłaby trzecią populacją, a nie stratą — to ta różnica, którą psuje wzór (1 − WR) × avgLoss
  • Suma R = 1,80 − 1,03 − 1,00 + 0,03 + 1,25 − 1,02 = +0,03R
  • Expectancy = 0,03 / 6 = +0,005R na transakcję. Kontrola przez strukturę: średnia wygrana +1,027R, średnia strata −1,017R, więc 0,5 × 1,027 − 0,5 × 1,017 = +0,005R — zgadza się
  • Profit Factor = (1,80 + 0,03 + 1,25) / (1,03 + 1,00 + 1,02) = 3,08 / 3,05 = 1,01
  • Maksymalne obsunięcie liczone na sumie R (próbkowanie po transakcji; to obsunięcie w R, a nie procent kapitału — i tak trzeba je nazwać). Krzywa sumy R: 0 → +1,80 → +0,77 → −0,23 → −0,20 → +1,05 → +0,03. Szczyt kroczący to +1,80R, najniższy punkt po nim −0,23R, więc max DD = 2,03R. Do końca próby obsunięcie nie zostało odrobione (koniec +0,03R wobec szczytu +1,80R), więc czas powrotu jest nieokreślony i tak właśnie się go zapisuje — nie pomija
  • Przedział ufności: std(R) = 1,257, błąd standardowy = 1,257 / √6 = 0,513, więc 95-procentowy przedział dla expectancy to (−1,00R; +1,01R) (założenie: obserwacje niezależne)

I teraz zdanie, dla którego ta tabela tu stoi: sześć wierszy uczy rachunku, ale nie dowodzi przewagi. Przedział ufności obejmuje zero, obejmuje próg +0,15R i obejmuje wartości, przy których ten sam zestaw reguł byłby jawnie stratny — jedna transakcja więcej lub mniej przesuwa expectancy o więcej niż cała rzekoma przewaga. Ta tabela odpowiada wyłącznie na pytanie „czy umiem policzyć swoje metryki i czy się domykają". Na pytanie „czy ten system zarabia" nie odpowiada i przy tej liczbie obserwacji odpowiedzieć nie może. Ten sam rachunek na sześciuset wierszach jest już czymś, o czym warto rozmawiać — ale wzory są dokładnie te same, a jedyną rzeczą, która się zmienia, jest szerokość przedziału.

6. Sharpe i Sortino — kiedy mają sens dla detalu

Sharpe Ratio i Sortino Ratio są standardami w funduszach hedgingowych — i nie zawsze mają sens dla detalu. Ale w wersji „per-trade" (zamiast „roczny zwrot vs zmienność") dostarczają informacji, której expectancy ani PF nie pokazują.

Sharpe Ratio — zwrot per jednostka zmienności

Sharpe = (średni_R − stopa_wolna_od_ryzyka) / odchylenie_standardowe_R

Dla detalu na poziomie per-trade pomijamy stopę wolną od ryzyka (i tak liczymy w R, gdzie ryzyko jest unormowane), więc:

Sharpe ≈ średnia(R) / std(R)

Co mówi: jak duży zwrot generuje system na jednostkę zmienności wyników. Wysokie Sharpe = stabilne, przewidywalne wyniki. Niskie Sharpe = wyniki rozstrzelone, mimo średniego zysku.

[PRÓG ILUSTRACYJNY — NIE NORMA RYNKOWA] Zakresy w poniższej tabeli są założeniem scenariusza, nie normą rynku, i czyta się je wyłącznie razem z liczbą transakcji, z której Sharpe policzono.

Sharpe (per-trade)Interpretacja
< 0,1System z dużym szumem, expectancy może być dodatnie ale wahania ogromne
0,1 − 0,2Akceptowalny dla strategii trend-following (z natury chaotyczne)
0,2 − 0,4Solidny system
0,4 − 0,6Wybitny — rzadko spotykany na detalu
> 0,6Albo curve fitting, albo zbyt mała próba — zweryfikuj

Sharpe roczny (annualised) z funduszy hedgingowych nie przelicza się 1:1 na per-trade. Annualizacja to Sharpe_per-trade × √N, gdzie N to liczba transakcji w roku — więc te same 0,3 per-trade daje 1,5 przy 25 transakcjach rocznie, 2,0 przy 44, 4,2 przy 200 i 7,3 przy 600. Jedna liczba per-trade, cztery różne „Sharpe roczne". Do tego przeliczenie zakłada niezależność wyników, której transakcje na tej samej parze i w tym samym reżimie nie spełniają, więc wynik annualizowany jest systematycznie zawyżony. Podawaj Sharpe per-trade razem z liczbą transakcji; roczny bez tej liczby nie znaczy nic.

Wada Sharpe'a — karze upside variance

Sharpe traktuje całe odchylenie standardowe jako „zmienność do unikania". Ale duże wygrane (+5R, +8R) też zwiększają std — i Sharpe je karze. To jest ekonomicznie absurdalne: dlaczego mam być karany za to, że czasem system robi mocny ruch w moim kierunku?

To dlatego Frank A. Sortino zaproponował alternatywę[2]: liczyć tylko downside variance.

Sortino Ratio — zwrot per jednostka downside risk

Sortino = (średnia(R) − MAR) / DD, gdzie DD = √( Σ min(Ri − MAR, 0)² / n ), a MAR = 0

Cała waga leży w literze n pod pierwiastkiem: downside deviation liczysz po całej populacji transakcji, wstawiając zero za każdą transakcję nie gorszą od MAR — a nie odchylenie standardowe z samego podzbioru strat. Różnica nie jest kosmetyczna. Wariant „std samych strat" nie karze częstości strat: dziewięćdziesiąt dziewięć wygranych i jedna strata dają odchylenie zero i Sortino nieokreślone albo dowolnie duże. Na rozkładzie z sekcji 3 (220 transakcji) poprawna downside deviation wynosi 0,631, więc Sortino = 0,21; wariant „std samych strat" daje 0,205 i „Sortino" 0,63 — trzykrotnie zawyżone. Zanim porównasz swój wynik z cudzym, sprawdź, którą wersją został policzony; to najczęstsza cicha niezgodność w tabelach metryk.

Sortino karze tylko zmienność stratną. Duże wygrane nie wpływają negatywnie. Dla rozkładów z prawym ogonem Sortino wychodzi wyżej niż Sharpe, bo duże wygrane podnoszą std(R) w mianowniku Sharpe'a, a downside deviation ich nie widzi.

Sortino (per-trade, downside deviation)Interpretacja
< 0,10Duża zmienność stratna wobec średniej — kapitał traci często
0,10 – 0,20Akceptowalny
0,20 – 0,35Solidny
0,35 – 0,50Bardzo dobry
> 0,50Sprawdź próbę i definicję — przy małej liczbie strat mianownik jest niestabilny, a przy „std samych strat" wynik jest zawyżony około trzykrotnie

[PRÓG ILUSTRACYJNY — NIE NORMA RYNKOWA] Te zakresy są skalibrowane do tej definicji — downside deviation po całej populacji — i nie są porównywalne z tabelami progów zbudowanymi na odchyleniu samych strat, które zawyżają wynik — na rozkładzie z sekcji 3 mniej więcej trzykrotnie. Sam mnożnik nie jest stały: zależy od udziału strat w próbie i przy rzadkich stratach rośnie bez ograniczenia. Rozkład z sekcji 3, dla którego profit factor wynosi 1,31, daje Sortino 0,21, czyli „solidny" w tej skali.

Reguła robocza: dla większości detalicznych strategii z asymetrycznym rozkładem wyników Sortino mówi więcej niż Sharpe, ale oba tracą sens na kilkudziesięciu transakcjach: samo odchylenie standardowe jest wtedy oszacowaniem z szerokim przedziałem, a metryka zbudowana na nim dziedziczy tę niepewność. Sharpe pokazuje wszystkie wahania, Sortino tylko te, które bolą — wybór zależy od stylu, częstotliwości i rozkładu wyników twojego konkretnego systemu.

Kiedy Sharpe i Sortino nie mają sensu dla detalu

  • Mała próba — przy kilkudziesięciu transakcjach odchylenie standardowe samo jest oszacowaniem z szerokim przedziałem, więc metryka na nim zbudowana jest niestabilna; podawaj n obok każdej wartości
  • Strategie z bardzo asymetrycznym rozkładem (np. event-driven na publikacjach) — Sharpe traci sens, bo wygrane to long tail, std nie odpowiada „normalnej" zmienności
  • Bardzo niska częstotliwość (5 trades miesięcznie) — annualised Sharpe wymaga setek obserwacji rocznie, na 60 transakcjach rocznie statystycznie niemożliwy do wiarygodnego oszacowania

Dla typowego detalu z 200–600 transakcjami rocznie i strategiami trend-following + mean-reversion: Sortino jest dobrym kompasem, Sharpe jest informacją uzupełniającą.

7. MAE/MFE — co mówi o jakości entry i exit

Maximum Adverse Excursion (MAE) i Maximum Favorable Excursion (MFE) to dwie metryki, które odsłaniają, jak daleko cena szła przeciwko tobie i jak daleko za tobą w trakcie życia transakcji. Detal ich nie liczy — i traci najcenniejsze źródło wiedzy o jakości SL i TP.

Definicje MAE i MFE

  • MAE (Maximum Adverse Excursion) — najgorszy ruch ceny przeciwko pozycji w trakcie jej trwania, mierzony w R od entry. Np. wszedłeś po 1,0850, zanim trade się zamknął cena dotykała 1,0825 → MAE = (1,0850 − 1,0825) / |entry − SL| = 25/30 = 0,83R
  • MFE (Maximum Favorable Excursion) — najlepszy ruch ceny w stronę pozycji w trakcie jej trwania, mierzony w R. Wszedłeś po 1,0850, cena dotknęła 1,0920 zanim się cofnęła → MFE = (1,0920 − 1,0850) / 30 = 70/30 = 2,33R
  • Oba są maksimami na zamkniętym odcinku wejście → wyjście i dlatego nie maleją. MFE pozycji nie może „spaść", gdy cena się cofnie — cofnięcie zmniejsza wynik zrealizowany, nie szczyt ścieżki. Po zamknięciu pozycji MFE przestaje rosnąć: ruch, który przyszedł później, należy do osobnej, hipotetycznej ścieżki („co by było, gdybym trzymał") i trzymasz go w innej kolumnie niż MFE tej transakcji. Zmieszanie obu daje wygrane z MFE większym niż TP, czyli liczbę, której z definicji nie ma

Co MAE i MFE diagnozują

MAE odpowiada na pytanie: jak daleko cena szła przeciw pozycji, zanim ta się zamknęła. Średnie MAE wygranych rzędu 0,4R jest hipotezą, że w stopie siedzi bufor, którego rynek nie używa — nie dowodem, że wolno go skrócić. Sama średnia tego nie rozstrzyga z trzech powodów. Po pierwsze, liczysz ją na podzbiorze wybranym po wyniku: transakcje wybite stopem do niej nie wchodzą, więc z definicji widzisz same te, którym bufor wystarczył. Po drugie, średnia zakrywa ogon rozkładu — kilka wygranych z MAE 0,9R wypadnie przy węższym stopie i to zwykle one niosą prawy ogon wyników. Po trzecie, MAE mówi, gdzie cena była, a nie czy przy węższym stopie dałoby się wyjść po tej samej cenie: liczysz je z granic świec i z kursu właściwego dla kierunku (long wychodzi po Bid), a nie z jednej ceny środkowej. Rozstrzyga dopiero pełny rozkład MAE wygranych plus przeliczenie „ile wygranych zostałoby wybitych przy SL 0,8×" na osobnej próbie — procedura z tabeli niżej. Odczyt w drugą stronę jest mocniejszy: średnie MAE rzędu 0,9R (tuż przy stopie) znaczy, że bufor jest wykorzystany do końca i każdy dodatkowy poślizg zamienia część wygranych w straty.

MFE odpowiada na pytanie: czy zostawiam pieniądze na stole. Warunek liczenia jest jeden i łatwo go złamać: obie liczby muszą pochodzić z tej samej populacji. Średnie MFE ze wszystkich zamkniętych transakcji zestawione ze średnim zyskiem samych wygranych daje różnicę, w której siedzą także transakcje stratne — a to nie jest nic „zostawionego na stole". Jeżeli dla wygranych średnie MFE wynosi +2,5R przy średnim zrealizowanym zysku +1,2R, różnica +1,3R jest wskazówką, że TP jest za blisko albo trailing stop za agresywny. Wskazówką, nie dowodem: MFE to szczyt ścieżki, a nie cena, po której dało się wyjść — wyjście na szczycie wymagałoby zlecenia, które akurat w tym miejscu stało, i wykonania po właściwej stronie spreadu.

Cztery scenariusze diagnostyczne MAE/MFE

SytuacjaDiagnozaDziałanie
Średnie MAE wygranych ≈ 0,7R+Entry spóźniony / setup wymaga szerokiego oddechu / SL blisko punktu wybicia — nie automatycznie „za szeroki SL"Nie zacieśniaj SL w ciemno; najpierw test OOS na próbie 30–50 trade'ów: ile wygranych zostałoby wybitych przy SL 0,8×? Jeśli > 20% — SL jest na właściwym poziomie, problem jest w timingu wejścia
Średnie MAE wygranych ≈ 0,2RMożliwy nadmiarowy bufor w SL — cena rzadko cofa się przeciw, bufor nie jest używanyTest ciaśniejszego SL (np. 0,7× obecnego) lub większego R:R przy tym samym ryzyku PLN, walidacja na osobnej próbie 30–50 trade'ów
MFE / faktyczny_zysk > 2,0Zostawiasz dużo na stole — TP/trailing zbyt agresywnyTest: 50% pozycji na 1R, 50% trailing po SMA-20 lub na strukturze
MFE / faktyczny_zysk ≈ 1,1Wyciągasz większość ruchu, exit jest dobryNie zmieniaj — system jest dostrojony

MAE/MFE dla strat — odsłania jakość SL

Liczone tylko dla stratnych transakcji:

  • Średnia MAE strat ≈ 1,0R (czyli pełny SL) — SL trzymane idealnie, straty mają znormalizowany rozmiar. Jeśli rzeczywisty wynik strat to średnio −1,1R do −1,2R — to jest slippage
  • Średnia MAE strat > 1,2R — SL jest przesuwany przeciw planowi ALBO slippage jest dramatyczny ALBO wchodzisz przed gapami. Każda z tych przyczyn wymaga konkretnej akcji naprawczej

Jak operacyjnie wyciągnąć MAE/MFE z platformy

Większość traderów robi to za skomplikowanym. Cztery realne ścieżki — wybierz jedną i trzymaj się jej przez 3 miesiące, zanim ocenisz, czy dane MAE cokolwiek zmieniły w twoich decyzjach. Większość brokerów nie eksportuje MAE/MFE w raporcie CSV (masz tylko entry, exit, max/min w trakcie życia trade'u):

  • MT4/MT5 bez tick history — po zamknięciu transakcji oznacz na wykresie M5/M15 z okresu życia pozycji najgorszy ruch przeciw i najlepszy w stronę, przelicz w R (MAE_pips / SL_pips, MFE_pips / SL_pips), zapisz ręcznie. Czas: 30–60 sekund per trade
  • cTrader / TradingView — eksport zakresu świec do CSV i automatyczne liczenie MAE/MFE skryptem (max/min w oknie open_timeclose_time). Gotowe MAE/MFE per transakcja bywa w tych platformach ograniczone do testera strategii, a nie do transakcji zawartych ręcznie — sprawdź to na własnym rachunku, zanim oprzesz na tym proces [DO WERYFIKACJI PROCEDURA: platforma → stan → działanie]
  • Edgewonk — liczy MAE/MFE po imporcie transakcji; sam mechanizm (ticki, świece, API brokera) i jego zakres sprawdź w dokumentacji dostawcy, zanim na nim oprzesz proces [DO WERYFIKACJI PROCEDURA: platforma → stan → działanie]
  • FX Blue / Myfxbook — zakres analityki MAE/MFE i podział na plany zmieniają się; sprawdź bieżącą dokumentację dostawcy zamiast przyjmować, że tej funkcji nie ma [DO WERYFIKACJI PROCEDURA: platforma → stan → działanie]

Dla większości detalu opcja 1 (manualnie po zamknięciu) jest najpraktyczniejsza — rzetelnie 30 sekund, bez integracji API i kosztów.

Rozkład MAE i MFE dla 200 transakcji — wykres punktowy pokazujący jak daleko cena szła przeciwko i za pozycją zanim się zamknęła. MAE wygranych skupione w dolnej części, MFE strat blisko zera
Rozkład MAE i MFE dla 200 transakcji — wykres punktowy pokazujący jak daleko cena szła przeciwko i za pozycją zanim się zamknęła. MAE wygranych skupione w dolnej części, MFE strat blisko zera

Wykres MAE/MFE — jak to czytać

MAE/MFE scatter — cztery klastry diagnostyczne entry i exit (Sweeney chart); rozmieszczenie punktów jest ilustracyjne, dane syntetyczne — nie pochodzą z żadnego rachunku
MAE/MFE scatter — cztery klastry diagnostyczne entry i exit na danych syntetycznych MAE / MFE scatter — diagnostyka entry i exit 0 0,3R 0,6R 0,9R SL=1R MAE (jak daleko szło przeciw) 0 0,75R 1,5R 2,25R +3R MFE (jak daleko za pozycją) ▼ szybkie wygrane (TP może być za blisko) ▲ idealny entry + kontynuacja (tych szukasz) ⚠ SL bliski wybicia (slippage może zabić) ✗ zły entry (do eliminacji)

Klasyczny wykres MAE/MFE (znany jako „Sweeney chart"[4]) ma dwie osie: MAE na osi X, MFE na osi Y, każdy punkt = jedna transakcja. Wygrane zielone, stratne czerwone. Cztery klastry mówią o systemie:

  • Lewy dolny róg (niski MAE, niski MFE) — szybkie wygrane bez wahań, idealny scenariusz, ale często sugeruje, że TP są za bliskie
  • Prawy górny róg (wysoki MAE, wysoki MFE) — transakcje, które najpierw szły mocno przeciw, potem zawróciły do dużych zysków. To sygnał, że SL były bliskie — trochę więcej slippage'u i straciłbyś
  • Lewy górny (niski MAE, wysoki MFE) — idealny entry, idealna kontynuacja. Tych szukasz
  • Prawy dolny (wysoki MAE, niski MFE) — wszedłeś źle, cena rzadko poszła w twoją stronę. Tych unikać — diagnozuj setupy z tego klastra
Przykład ilustracyjny (liczby syntetyczne, nie zapis rachunku): kiedy MAE pomaga zacieśnić SL bez straty edge'u. Dziennik ze 180 transakcjami pokazuje, że średnie MAE wygranych wynosi 0,42R — w stopie siedzi bufor, którego rynek prawie nie używa. W nowej wersji setupu SL zostaje ustawiony na 0,75× poprzedniej szerokości, TP w tej samej cenie absolutnej. Na kolejnych 100 transakcjach: WR spada z 51% do 48%, ale zrealizowany średni zysk rośnie z +1,8R do +2,4R przy średniej stracie −1,0R. Expectancy liczona ze średnich zrealizowanych, nie z planowanego R:R: przed zmianą 0,51 × 1,8 − 0,49 × 1,0 = +0,43R, po zmianie 0,48 × 2,4 − 0,52 × 1,0 = +0,63R. I zaraz potem druga uwaga, bez której pierwsza jest szkodliwa: sto transakcji to za mało, żeby odróżnić +0,63R od +0,43R — przy odchyleniu rzędu 1,3R przedział ufności ma szerokość około ±0,25R, czyli więcej niż cała różnica. To wskazówka, gdzie szukać, a nie dowód poprawy.

8. Drawdown — historyczny, bieżący, oczekiwany

Drawdown to spadek kapitału od ostatniego szczytu (peak). Trzy poziomy analizy:

Max Drawdown historyczny

[PRÓG ILUSTRACYJNY — NIE NORMA RYNKOWA] Zakresy w poniższej tabeli są założeniem scenariusza, nie normą rynku — ta sama strategia przy dwukrotnie większym ryzyku na transakcję daje w przybliżeniu dwukrotnie głębsze obsunięcie, więc „max DD 20%" bez podanego sizingu nie mówi nic o strategii.

Największy zaobserwowany spadek od peaku do dołka w historii rachunku. Liczba kluczowa do oceny psychologicznej tolerancji systemu.

Ht = max(Eu : u ≤ t) — szczyt kroczący krzywej kapitału, z wartością początkową w zbiorze; Dt = (Ht − Et) / Ht; max DD = max(Dt). Liczysz to po całej krzywej, a nie jako „najwyższy punkt do najniższego": dla ciągu 100 → 80 → 120 → 110 poprawny max DD wynosi 20,0%, a nie 33,3%.

Zanim podasz jakąkolwiek liczbę max DD, powiedz dwie rzeczy, bez których nie jest ona porównywalna [METRYKA WYMAGA DEFINICJI I MIANOWNIKA]: czy krzywa to equity (z otwartymi pozycjami) czy balance (tylko zamknięte) oraz jak często jest próbkowana (tick, zamknięcie transakcji, dzień). Wpłaty i wypłaty neutralizujesz — dopłata w środku obsunięcia zmniejsza je optycznie, a nie faktycznie. Obsunięcie liczone na sumie R, a nie na kapitale, opisujesz jawnie jako „max DD w R, próbkowanie po transakcji" i nie nazywasz go procentem.

Max DDInterpretacja
< 5%Bardzo konserwatywny — możliwe że sizing zbyt mały dla CAGR
5–10%Komfortowy dla większości detalu
10–20%Akceptowalny przy CAGR 25–40%
20–30%Granica psychologicznej tolerancji — większość traderów panikuje
> 30%Sizing zbyt agresywny — czas zmniejszyć, zanim doprowadzi do margin callu

Average Drawdown

Średnia z wszystkich historycznych drawdownów. Pokazuje typowy „ból" systemu, nie najgorszy scenariusz.

Reguła robocza [PRÓG ILUSTRACYJNY — NIE NORMA RYNKOWA]: jeśli max DD przekracza trzykrotność średniego DD, rozkład ma grube ogony — zwykle znak, że w historii jest albo zdarzenie skrajne, albo seria transakcji z wolumenem ponad plan. Sam mnożnik trzy jest umowny; sprawdzalna jest przyczyna, nie liczba.

Drawdown duration — czas powrotu

Często ważniejszy niż głębokość drawdownu: ile czasu zajmuje powrót do peaku?

  • Drawdown 10% z czasem powrotu 2 tygodnie — łatwy do zniesienia
  • Drawdown 10% z czasem powrotu 8 miesięcy — niszczy psychikę, większość traderów porzuca system w trakcie

System z mniejszym DD, ale dłuższym czasem powrotu, bywa psychologicznie trudniejszy niż system z większym DD i szybkim odbiciem. Da się to sprowadzić do jednej liczby — iloczynu średniej głębokości i średniego czasu trwania obsunięcia. Nazywamy go tutaj iloczynem bólu i jest to miara własna tego artykułu, nie standard branżowy. Nie myl jej z pain index (średnia głębokość obsunięcia w czasie) ani z Ulcer index (pierwiastek ze średniego kwadratu obsunięcia) — to trzy różne rzeczy o myląco podobnych nazwach. Obsunięcie nieodrobione do końca próby zostaje nieodrobione: nie wchodzi do średniego czasu powrotu jako liczba, tylko jako osobna informacja obok niej.

Oczekiwany drawdown — co dziennik daje do symulacji

Dziennik dostarcza do symulacji jedną rzecz: wektor r_net z jedną konwencją R0 i z kosztami uzgodnionymi z raportem brokera. Sama procedura — co losujesz (kolejność, bloki, ścieżki), z jakim ziarnem, na jakim horyzoncie i przy jakim modelu kapitału — należy do artykułu 15.4. Tutaj wystarczą dwa ostrzeżenia, bo oba przesądzają o wniosku. Po pierwsze: percentyl max DD wyrażony w procentach kapitału zależy od przyjętego sizingu, więc zdanie „skoro 95. percentyl max DD to 18%, ryzyko 1% jest bezpieczne" jest kołowe — symulacja odpowiada na pytanie, jak głębokie obsunięcie daje ten rozkład R przy tym sizingu, a nie jaki sizing jest bezpieczny. Po drugie: przetasowanie tych samych wyników nie tworzy strat większych niż największa w próbie. Nowych ekstremów szukasz w danych i w scenariuszach ryzyka, nie w losowaniu.

Equity curve z zaznaczonymi drawdownami — historyczny max DD, average DD i czas powrotu; rozkład symulowanego max DD z Monte Carlo bootstrapem 10 000 sekwencji
Equity curve z zaznaczonymi drawdownami — historyczny max DD, average DD i czas powrotu; rozkład symulowanego max DD z Monte Carlo bootstrapem 10 000 sekwencji

Karta metryk — definicja, mianownik, kontrola, granica wniosku

Tabela zbiorcza dla wszystkich metryk z tego artykułu. Ostatnia kolumna jest w niej najważniejsza: to ona odróżnia pomiar od reklamy i to ją najczęściej się pomija.

MetrykaDefinicja i jednostkaMianownikKontrola przed użyciemCzego nie dowodzi
R-multiple (r_net)PnL netto / R0; bezwymiarowaR0 z planu sprzed wejścia, stałeR0 niezmienione po wyniku, po przesunięciu stopa i po częściowym wyjściu; spread nieodjęty drugi razNie mówi nic o wielkości pozycji ani o wyniku w procentach kapitału
Expectancyśrednia r_net; w Rliczba zamkniętych transakcjiz WR, avgWin i avgLoss musi wyjść ta sama liczba; zera liczone jako trzecia populacjaLiczba bez przedziału nie jest wynikiem
Win rateudział transakcji z wynikiem netto > 0liczba zamkniętych transakcjiWR × n musi być liczbą całkowitą; częściowe wyjścia liczone jako jedna transakcjaNie mówi o zyskowności — WR 78% bywa systemem stratnym
Profit Factorsuma zysków / |suma strat|, ta sama konwencja kosztówsuma strat; brak strat = nieokreślonyPF = (pw × avgWin) / (pl × avgLoss)Nie pokazuje rozkładu ani liczby obserwacji
Recovery Factorzysk netto / max DDmax DD w tej samej jednostce co zyskobie liczby z tego samego okresu i z tej samej krzywejNie mówi, czy obsunięcie się powtórzy ani jak długo trwało
Sharpe per-tradeśrednia(R) / std(R)odchylenie standardowe Rpodaj n; annualizacja tylko przy niezależnych wynikachNie jest porównywalny z rocznym Sharpe funduszu
Sortino(średnia(R) − MAR) / downside deviation√(Σ min(R − MAR, 0)² / n) — cała populacjasprawdź, czy mianownik nie jest odchyleniem samego podzbioru strat (zawyża około trzykrotnie)Nie odróżnia rzadkich dużych strat od częstych małych przy tej samej sumie kwadratów
SQN(E / std(R)) × √N, N = min(n, 100)std(R); N z sufitem 100porównuj wyłącznie przy tym samym NNie jest decyzją o alokacji ani dowodem przewagi
Max drawdownmax((Ht − Et) / Ht), H = szczyt kroczącyszczyt kroczący krzywej, nie maksimum globalneequity czy balance; częstotliwość próbkowania; wpłaty zneutralizowanePrzeszłe obsunięcie nie jest górnym ograniczeniem przyszłego
Execution drag[plan przy tym samym typie wyjścia − wynik netto] / R0; w RR0 z planutyp wyjścia zgodny (stop do stopu, cel do celu); kierunek i wolumen we wzorze; spread nieliczony dwa razyNie mówi, czy strategia ma przewagę — mówi o jakości wykonania
MAE / MFEnajgorsza i najlepsza wycena w trakcie życia pozycji; w Rodległość SL w pipsach albo R0strata zamknięta na stopie ma MAE ≥ 1R; wygrana zamknięta na celu ma MFE = TPNie mówi, gdzie należało postawić stop — mówi, gdzie cena była

9. Narzędzia: Edgewonk, Myfxbook, FX Blue, własny Excel/Notion

Narzędzie nie czyni z dziennika dobrego dziennika. Dziennik prowadzony w Excelu z dyscypliną pobije Edgewonk prowadzony bez dyscypliny. Ale narzędzie ma znaczenie — niewłaściwe albo zniechęca, albo nie pokazuje tego, czego potrzebujesz.

Porównanie głównych narzędzi

NarzędzieMocne stronySłabe stronyDla kogo
EdgewonkNajlepsze metryki out-of-the-box (R, expectancy, MAE/MFE), gotowe wykresy, klasyfikacja błędów, integracja z MT4/MT5Płatny — cennik dostawcy podaje 169 USD [STAN NA DZIEŃ: 2026-09-07, edgewonk.com/pricing]; wymaga ręcznego importu CSV przy niektórych brokerachTrader z 200+ transakcjami rocznie, gotowy zapłacić za czas
MyfxbookAuto-import z większości brokerów, publiczne portfele, social proofPłytsze metryki niż w narzędziach dedykowanych; zakres analityki i podział na plany sprawdź u dostawcy [DO WERYFIKACJI PROCEDURA: platforma → stan → działanie]; nastawiony na pokazywanie wyników, nie na analizęTrader, który chce minimalnego wysiłku i akceptuje brak głębokiej analizy
FX BlueFree, dobry trade analyser, statystyki per setup, integracja MT4Interfejs wyraźnie starszej generacji; zakres pól jakościowych (mental state, sen, klasyfikacja błędów) i analityki sprawdź u dostawcy, bo bywa zmieniany [DO WERYFIKACJI PROCEDURA: platforma → stan → działanie]Trader początkujący, który chce zacząć z czymś darmowym
Własny ExcelPełna kontrola, dowolne pola, własne formuły, koszt 0 PLNWymaga 4–8h początkowego setupu, trzeba samodzielnie liczyć metrykiTrader systemowy, który chce dokładnie tych metryk, których chce
Notion / ObsidianŁączenie liczb z notatkami jakościowymi, zdjęciami wykresów, refleksjamiSłabe agregaty statystyczne, trudne wykresyTrader, który ceni narrację i kontekst — komplement do Excela

Czego nie pokażą popularne narzędzia

Większość narzędzi out-of-the-box nie ma pól na jakość decyzji — mental state, godziny snu, decisional quality. Trzeba je albo dodać jako własne pola, albo prowadzić równolegle w arkuszu. Bez nich nie sprawdzisz, czy sen albo stan przed wejściem cokolwiek zmieniają w twoich wynikach — a to jest pytanie, na które odpowiedź masz wyłącznie ty i wyłącznie na własnej próbie: publicznej statystyki tej korelacji dla detalu nie ma [BRAK DANYCH DO WERYFIKACJI: korelacja sen – wynik w dziennikach detalu]. Same liczby z fillów brokera tego nie pokażą.

Przykład ilustracyjny (liczby syntetyczne, nie zapis rachunku): auto-import jako „dziennik" przez 14 miesięcy. Konto podpięte do serwisu z auto-importem, krzywa kapitału wygląda profesjonalnie, publiczny profil zbiera obserwujących. Po 14 miesiącach: wynik dodatni, ale zero danych do analizy jakościowej. Pytanie o expectancy per setup — brak, bo serwis nie zna pojęcia setupu. MAE per transakcja — brak. Klasyfikacja błędów — brak. Mental state — nie istnieje. Narzędzie pokazywało, że jest dobrze, a nie gdzie jest źle. Przez czternaście miesięcy prowadził monitoring salda z ładnym interfejsem, nie dziennik. Auto-import jest punktem startu, nie kompletnym dziennikiem.

Kiedy własny Excel bije Edgewonk

  • Jeśli twoja strategia ma metryki liczone twoją formułą z danych zewnętrznych (np. „setup waliduje się, jeśli VIX < 18 i CBOE put/call > 1,1") — własne kategorie i tagi narzędzie ma, cennik dostawcy wymienia własne kategorie tagów i pełną konfigurowalność [STAN NA DZIEŃ: 2026-09-07, edgewonk.com/pricing], ale kolumnę liczoną wzorem z cudzych danych i tak składasz w arkuszu
  • Jeśli prowadzisz strategie multi-asset — zakres rynków sprawdź u dostawcy, zanim odrzucisz narzędzie: jego cennik wymienia obsługę wielu rynków, nie samego FX [STAN NA DZIEŃ: 2026-09-07, edgewonk.com/pricing]. Argumentem za arkuszem zostaje wtedy jedno: pełna kontrola nad definicją każdej kolumny i nad tym, co dokładnie siedzi w mianowniku
  • Jeśli kalkulacja R-multiple wymaga w twoim systemie dodatkowych modyfikatorów (np. korelacja portfelowa, klasyfikacja A+/B/C z autorską metodologią) — Excel daje pełną kontrolę

Od czego zacząć

Kolejność jest zawsze ta sama i nie zależy od budżetu: najpierw nawyk zapisu w arkuszu, potem automatyzacja warstwy „co" (auto-import z platformy), na końcu narzędzie, które liczy metryki za ciebie. Eskalacja narzędzia przed nawykiem zapisu zwykle nie pomaga — narzędzie nie zastępuje dyscypliny, tylko ją uwidacznia. Dobór stacku pod styl handlu i porę dnia (co robisz rano, co po sesji, co w weekend) rozwija artykuł 15.5; dla dziennika liczy się wyłącznie to, żeby pola z sekcji 2 były wypełnione tego samego dnia i raz w tygodniu uzgodnione z raportem brokera.

Przykładowy interfejs dziennika tradera Forex Edgewonk lub MyFxBook z metrykami expectancy, profit factor, drawdown, MAE/MFE, breakdown per setup i kategorie błędów
Przykładowy interfejs dziennika tradera Forex Edgewonk lub MyFxBook z metrykami expectancy, profit factor, drawdown, MAE/MFE, breakdown per setup i kategorie błędów
Porównanie narzędzi do prowadzenia dziennika tradingowego — Edgewonk, Myfxbook, FX Blue, własny Excel; mocne i słabe strony, dla kogo
Porównanie narzędzi do prowadzenia dziennika tradingowego — Edgewonk, Myfxbook, FX Blue, własny Excel; mocne i słabe strony, dla kogo

10. Workflow analizy dziennika — dziennie, tygodniowo, miesięcznie, kwartalnie

Sam dziennik bez rytmu analizy to baza danych, do której nikt nie zagląda. Rytm ma cztery poziomy — codzienny, tygodniowy, miesięczny i kwartalny — ale tylko trzy pierwsze należą do dziennika. Czwarty, kwartalny, jest audytem strategii i prowadzi go artykuł 15.10: dziennik dostarcza do niego liczby, decyzja o setupie zapada tam. Każdy poziom odpowiada na inne pytanie i ma inny budżet czasu.

Codziennie — 5 minut po sesji

Cel: zapisać surowe dane, póki pamięć jest świeża.

  • Wpisz każdą transakcję z 29 polami (z raportu brokera + pola jakościowe)
  • Klasyfikacja błędu (kategoria 0–10)
  • Decisional quality (1–5) — szczerze, oddzielnie od wyniku
  • Godziny snu, jeśli nie wpisane rano — to fakt sprzed sesji i wieczorem da się go odtworzyć bez zniekształcenia. Mental state jest wyjątkiem: wpisujesz go przed wejściem albo zostawiasz puste pole. Wystawiony wieczorem, po znanym już wyniku, jest retrospekcją i tak go oznaczasz — inaczej korelacja „stan a wynik" mierzy twoją pamięć o wyniku, nie stan przed wejściem
  • Jedno zdanie kontekstu: „LON trochę cichszy niż zwykle, NFP był wczoraj"

Zapis tego samego dnia nie jest pedanterią, tylko warunkiem, żeby pola jakościowe w ogóle były danymi. Po trzech dniach nie odtworzysz stanu, w jakim wchodziłeś w konkretną transakcję; po tygodniu nie odróżnisz wejścia zgodnego z planem od zaimprowizowanego, bo pamięć dorobi uzasadnienie do wyniku, który już znasz. To ta sama iluzja, od której zaczyna się ten artykuł — tyle że zapisana we własnym arkuszu wygląda już jak dane.

Tygodniowo — 30 minut, niedziela wieczór

Cel: krótkoterminowa diagnostyka — czy bieżący tydzień był zgodny z systemem.

  • Liczba transakcji per setup, per klasa A/B/C
  • Tygodniowy R-multiple (suma R z tygodnia)
  • Liczba błędów per kategoria — czy któryś błąd dominował?
  • Średni decisional quality — czy spadł poniżej 3,5? (sygnał ostrzegawczy)
  • Korelacja: w dni z mental state < 3 — jakie były wyniki?
  • Jeden refleksyjny akapit: co tydzień nauczył mnie o sobie/rynku

Tygodniowy przegląd wyłapuje świeże problemy: „W środę miałem 4 trades, wszystkie poza setupem A — to był FOMO po słabym poniedziałku". Wykrywanie wzorców na poziomie tygodnia pozwala korygować zachowanie zanim się utrwali.

Miesięcznie — 60 minut, pierwszy weekend miesiąca

Cel: obliczenie pełnych metryk i ocena, czy miesiąc wpisuje się w długoterminowy trend.

  • Pełna kalkulacja: WR, expectancy, profit factor, Sortino, max DD, Recovery Factor
  • Tabela per setup: ile trades, średnia R, expectancy
  • Wykres equity curve miesięczny — porównanie do oczekiwanego (z Monte Carlo)
  • MAE/MFE chart — czy entry był dobry, czy zostawiałem na stole?
  • Klasyfikacja błędów — top 3 typy błędów miesiąca, plan poprawy
  • Korelacje: dni o niskim sleep'ie vs wynik, dni z mental < 3 vs wynik
  • Jedno-stronicowy raport miesięczny dla siebie

Raz w miesiącu siadasz nad liczbami niezależnie od wyniku miesiąca — to jedyny moment, w którym widzisz, czy poprawiasz się jako trader, czy tylko masz farta. Miesięczny przegląd ma ci odebrać prawo do wygodnych wymówek: czy traci setup, godzina, para, sizing, czy twoje odejścia od planu.

Kwartalnie — co dziennik oddaje do audytu

Kwartał jest poziomem decyzji, nie pomiaru, więc cała procedura — kolejność bramek, kryteria utrzymania, degradacji i wyłączenia setupu, rejestr zmian w playbooku — stoi w artykule 15.10. Dziennik przygotowuje do niego cztery rzeczy i nic ponadto: uzgodniony z raportem brokera komplet transakcji z kwartału, tabelę per setup i per wersja playbooka (n, średnia R, przedział), udział transakcji z error_code różnym od zera oraz koszty w R. Jeżeli którejś z nich brakuje, audyt nie ma o czym rozmawiać — i to jest jedyny wniosek, jaki wolno z takiego kwartału wyciągnąć.

Tabela — workflow w 4 częstotliwościach

CzęstotliwośćCzasCelWynik
Codziennie5 minZapis surowych danychKompletny dziennik 29 pól
Tygodniowo30 minDiagnoza krótkoterminowaRefleksyjny akapit + wzorce tygodnia
Miesięcznie60 minPełne metryki + plan poprawyRaport miesięczny + 1–3 akcje
Kwartalnieosobny dzieńAudyt strategii (15.10)Komplet uzgodnionych danych przekazany do audytu

Ile z tego zmieści się w twoim tygodniu

Rytm opisany wyżej jest podany w minutach, a nie w porach dnia, i to jest celowe. Dopasowanie go do etatu, do handlu pełnoetatowego albo do swingu z kilkoma transakcjami w miesiącu — razem z kalendarzem tygodnia i doborem narzędzi dnia — opisuje artykuł 15.5. Do dziennika należy jedna reguła i ona nie podlega negocjacji: pola jakościowe (mental state, jakość decyzji, klasyfikacja błędu) wypełniasz tego samego dnia. Odtworzone po tygodniu nie są danymi, tylko wspomnieniem — a wspomnienie ma dokładnie tę wadę, dla której zakładałeś dziennik.

Sygnał z dziennika a decyzja o systemie

Najczęstszy błąd po stratnym kwartale to wymiana strategii zamiast eliminacji błędów procesu — albo odwrotnie, trzymanie martwego setupu, gdy reżim zmienił się na trwałe. Rozstrzyganie, czy poprawiać system, czy siebie, jest zakresem artykułu 15.10 i tam stoi tabela decyzyjna. Dziennik odpowiada za coś wcześniejszego, bez czego ta tabela jest nieczytelna: za rozdzielenie sygnału na warstwy. Wynik osobno; zgodność z regułami osobno (error_code, jakość decyzji); koszty i jakość wykonania osobno (execution drag, poślizg); wersja playbooka osobno. Kwartał, w którym połowa transakcji miała error_code różny od zera, nie mówi nic o strategii — mówi o wykonaniu. Tę kolejność sprawdzasz zawsze najpierw i to jest cały wkład dziennika do decyzji, której sam nie podejmuje.

Przykład ilustracyjny (liczby syntetyczne, nie zapis rachunku): dziennik nie zrobi z ujemnej strategii dodatniej. Ale bez dziennika nie odróżnisz złej strategii od dobrej strategii zabijanej twoim wykonaniem. Sześć miesięcy, dwóch traderów, identyczna strategia i identyczny start. Pierwszy prowadzi pełen dziennik, tygodniowy przegląd i miesięczne metryki. Drugi zapisuje tylko wynik. Po sześciu miesiącach: pierwszy +18% rachunku, drugi −7%. Różnicę zrobił dziennik — pierwszy wykrył trzy powtarzalne błędy (wejścia poza setupem po słabym poniedziałku, zawyżony wolumen przed weekendem, spóźnione wyjścia po stracie) i je skorygował, drugi miał te same błędy przez całe pół roku. Ten przykład pokazuje mechanizm, a nie zmierzoną różnicę: przy tak krótkiej próbie dwie identyczne strategie potrafią rozjechać się o kilkanaście punktów procentowych samą kolejnością wyników.
FX Global Code — dobrowolny standard, nie regulacja. FX Global Code[5] wydaje Global Foreign Exchange Committee, a sam dokument mówi o sobie, że nie nakłada obowiązków prawnych ani regulacyjnych: jest zbiorem dobrych praktyk, do którego uczestnicy rynku przystępują dobrowolnie [STAN NA DZIEŃ: 2026-09-06; WERSJA: aktualizacja z grudnia 2024]. Nie wymaga „uzasadnienia każdej decyzji handlowej" — jego zasady dotyczą rejestru zleceń i transakcji jako śladu audytowego: niezwłocznego ujmowania zawartych transakcji oraz zapisu zleceń wraz z odrzuceniami i modyfikacjami. Adresatem jest hurtowy rynek walutowy, nie detal, i żaden z tych obowiązków cię nie dotyczy. Warto go tu przywołać z jednego powodu: pokazuje, jaki minimalny ślad uznano za konieczny tam, gdzie ktoś odpowiada za cudze pieniądze. Twój dziennik z warstwą zleceń i filli z sekcji 2 robi dokładnie to samo — z tą różnicą, że nikt cię do niego nie zmusi.

FAQ — Najczęściej zadawane pytania

Czy 29 pól dziennika to nie jest przesada?
29 pól wprowadza się w 60–90 sekund per transakcja, jeśli masz szablon: arkusz z formułami liczącymi poślizg, R-multiple i execution drag. Dla typowego detalu z 5–15 transakcjami tygodniowo to kilkanaście minut w tygodniu. Mniej pól to mniej diagnozy — ten, kto zapisuje tylko wynik, po roku ma saldo i zero wiedzy o tym, jak powstało. Zasada odwrotna też obowiązuje: jeżeli któreś pole przez cały kwartał nie posłużyło do żadnej decyzji, usuń je — ale świadomie, na przeglądzie, a nie dlatego, że akurat nie chciało ci się go wypełnić.
Jaka jest minimalna liczba transakcji do oceny strategii?
Nie ma jednej liczby i nikt nie ma prawa jej podać. Adekwatność próby zależy od rozrzutu wyników, od tego, czy transakcje są od siebie niezależne, od rzadkości sygnału i od tego, ile wariantów porównujesz. Liczbę obserwacji podajesz zawsze, ale nie utożsamiasz jej z liczbą niezależnych prób. Sposób zapisu jest jeden: „po n = 100 transakcjach 95-procentowy przedział dla WR przy p ≈ 0,55 ma szerokość ±10 punktów procentowych (Wald; założenie: obserwacje niezależne — przy seriach przedział jest szerszy); przedział obejmuje próg decyzji, więc decyzja jest odroczona". Przy 200 transakcjach ten przedział to ±7 pp, przy 500 — ±4 pp. Jeśli twoja strategia daje pięć sygnałów miesięcznie, czekanie na 200 instancji to ponad trzy lata — wtedy albo agregujesz podobne setupy w jedną rodzinę i mówisz o rodzinie, a nie o pojedynczym setupie, albo przyjmujesz, że przy tej częstotliwości sprawy nie rozstrzygniesz statystycznie i decydujesz na podstawie procesu: kosztów, zgodności z regułami, jakości wykonania. Wstrzymanie handlu z powodu ryzyka operacyjnego jest dozwolone zawsze, niezależnie od n.
Czy expectancy ujemne zawsze znaczy, że strategia jest zła?
Nie. Ujemne expectancy może znaczyć, że próba jest za mała, że trafiłeś w obsunięcie mieszczące się w rozkładzie tego systemu, albo że koszty zjadły dodatnią przewagę brutto — a tych trzech przypadków nie odróżnia znak średniej, tylko przedział wokół niej. Odczyt jest ten sam co w całym artykule: policz przedział dla expectancy i zobacz, gdzie leży wobec progu decyzji. Przedział obejmujący zero to decyzja odroczona, niezależnie od tego, czy masz 40 transakcji, czy 400. Przedział leżący w całości poniżej zera przez dwa kolejne przeglądy jest już mocną przesłanką, ale samą decyzję „utrzymać / zmienić / wyłączyć" podejmujesz według kryteriów z artykułu 15.10 — nie z liczby transakcji i nie z liczby kwartałów. Drugi scenariusz — expectancy dodatnie brutto, ujemne netto — ma inną naprawę i tu warto powiedzieć wprost, co nie działa: większy lot nie obniża kosztu wyrażonego w R. Spread, poślizg i prowizja liczona za lota rosną z wolumenem dokładnie w tym samym tempie co R0 w mianowniku, więc iloraz nie zmienia się ani o grosz; rozłożyłaby się wyłącznie opłata stała za zlecenie, której model kosztów tego artykułu w ogóle nie zawiera. Większy lot podnosi za to ryzyko w walucie rachunku proporcjonalnie do wolumenu. Działa natomiast to, co zmienia licznik albo mianownik kosztu: tańszy broker lub para o węższym spreadzie, szerszy stop na wyższym timeframie (ten sam poślizg w pipsach jest wtedy mniejszym ułamkiem R), większe TP w R oraz rezygnacja z setupów o niskim R:R, w których koszty są największą pozycją rachunku.
Jak interpretować Sharpe per-trade vs Sharpe annualised?
Sharpe per-trade liczone na pojedynczych transakcjach (średnia R / std R) jest unormalizowane do jednostki ryzyka, ale ignoruje częstotliwość. Sharpe annualised mnoży Sharpe per-trade przez √N, gdzie N — liczba transakcji rocznie. Wzór działa tylko przy założeniu niezależności wyników i stacjonarności reżimu. Trzy ostrzeżenia, które rzadko się mówi: (1) trade'y na tej samej parze są skorelowane — efektywna liczba obserwacji jest mniejsza niż N, więc annualised Sharpe jest zawyżone; (2) reżimy rynkowe się zmieniają (trend → range), więc historyczna wariancja zaniża przyszłą; (3) dla retail FX z 50–200 trade'ami rocznie i niestabilnym sizingiem teoretyczne „annualised 4,2" brzmi promocyjnie, a w praktyce nie powtórzysz tego w kolejnym roku. Dla detalu wiarygodniejsze metryki: Recovery Factor liczony tak jak w sekcji 5 (zysk netto okresu / max DD, obie liczby z tej samej krzywej i tego samego okresu — nie CAGR z kilku lat dzielony przez obsunięcie z jednego) oraz Sortino, podawane zawsze z liczbą obserwacji i z przedziałem, bo sama wartość przy kilkudziesięciu transakcjach niczego nie rozstrzyga.
Jak policzyć korelację snu z wynikiem w arkuszu?
Excel/Sheets: =CORREL(zakres_sleep_hours; zakres_r_net) daje korelację Pearsona; dla rangi (Spearman) sortujesz ranking obu kolumn i liczysz Pearsona z rang. Python: df[['sleep_hours','r_net']].corr(method='spearman'). Progi robocze [PRÓG ILUSTRACYJNY — NIE NORMA RYNKOWA], bo publicznej statystyki tej korelacji dla detalu nie ma: przy ρ poniżej 0,15 sen nie wygląda na główną zmienną i wracasz do diagnozy setupu; powyżej 0,25 warto traktować go jak mierzalny warunek wejścia i dni z krótkim snem prowadzić w trybie obserwacji. Obie liczby są założeniem, nie wynikiem — sprawdzasz je na własnej próbie. Rząd wielkości próby: przy n = 60 i ρ = 0,25 statystyka t wynosi 1,97, czyli dokładnie na granicy zwyczajowego progu istotności; poniżej tej liczby obserwacji pojedyncza anomalia przesuwa ρ o 0,1.
Jak wyliczyć MAE/MFE jeśli broker nie daje danych intra-trade?
Większość brokerów nie eksportuje MAE/MFE w raporcie CSV — masz tylko entry, exit, max/min ceny w trakcie życia trade'u. Rozwiązania: (1) zapisuj manualnie po zamknięciu — zerkasz na wykres M5/M15 trade'u, czytasz najgorszy ruch przeciw i najlepszy w stronę, wpisujesz pipsy. Czas: 30 sekund per trade. (2) Edgewonk liczy MAE/MFE po imporcie; o pozostałych platformach (cTrader, TradingView, FX Blue, Myfxbook) sprawdź bieżącą dokumentację, zanim oprzesz na tym proces — zakres tych funkcji i podział na plany płatne zmienia się [DO WERYFIKACJI PROCEDURA: platforma → stan → działanie]. (3) Skrypt Python parsujący tickami — dla zaawansowanych, wymaga dostępu do tick history brokera. Dla większości detalu opcja 1 jest najpraktyczniejsza — manualnie po zamknięciu, rzetelnie 30 sekund.
Czy prowadzić jeden dziennik dla wszystkich strategii czy oddzielne?
Jeden dziennik z polem „setup z playbooka" — to lepsze niż osobne dzienniki. Dlaczego: jeden dziennik pozwala na agregaty cross-strategiczne (jak ja zachowuję się w dni z mental < 3, niezależnie od strategii), per-setup analityka jest filtrem na tym dzienniku. Osobne dzienniki dają fragmentaryczny obraz — nie wiesz, ile trades łącznie zrobiłeś dziś, czy nie przekroczyłeś dziennego limitu trades, czy strategia A nie koreluje z trade'em na strategii B. Reguła: jeden dziennik, dobre filtrowanie, pełne agregaty. Excel z tabelą filtrowalną lub Edgewonk obsługują to bez problemu.
Czy automatyczny dziennik z brokera (np. Myfxbook auto-import) wystarczy?
Auto-import i formuły arkusza wypełniają 17 z 29 pól: identyfikator, czas, parę, kierunek, sesję (wyliczaną z czasu), wolumen, ceny realne wejścia, stopa i celu, spread, swap i prowizję, wynik brutto i netto, R, wartość pipa oraz poślizg liczony formułą z tych cen. Brakuje 12 pól. Trzy z nich to ceny planowane — wejścia, stopa i celu — których żaden broker nie zna, bo są zapisem twojej intencji sprzed kliknięcia; to o nie chodzi w „tarciu operacyjnym" z sekcji 1. Dziewięć pozostałych jest jakościowych i kontekstowych (setup, klasa, reżim, wersja playbooka, klasyfikacja błędu, mental state, sen, jakość decyzji, link do dowodu). Bez nich masz „dziennik" w sensie technicznym, ale tracisz całą warstwę „dlaczego". Przykład: auto-import pokaże, że masz WR 47% w środy. Ręczny dziennik pokaże, czy to konsekwencja klasy setupu, godziny, czy stanu, w jakim wchodziłeś. Reguła: niech auto-import wypełnia, co może; ceny planowane i klasę setupu zapisujesz przed wejściem, resztę pól jakościowych po sesji tego samego dnia — i raz w tygodniu uzgadniasz całość z raportem brokera (procedura w sekcji 2).
Jakie metryki pokazywać innym (mentor, audyt), a jakie zostawić sobie?
Publicznie / dla mentora: equity curve, max DD, Recovery Factor, expectancy, profit factor, Sortino. To są metryki obiektywne, które mówią o systemie. Prywatnie / tylko dla siebie: klasyfikacja błędów, mental state, sleep, decisional quality. To są metryki o tobie jako traderze — pokazują wzorce psychologiczne, których nie chcesz ujawniać przed mentorem nieumiejącym wyciągać konstruktywnych wniosków. Praktyczna reguła w realiach polskiego coachingu tradingowego: zachowaj klasyfikację błędów i mental state dla siebie do momentu, gdy zobaczysz, że mentor umie z tych danych wyciągnąć cokolwiek operacyjnego poza oceną twojego charakteru. Jeśli pierwsza reakcja na „mam 30% trade'ów z error_code 6" to ocena moralna zamiast pytania „w jakich godzinach i po jakich zdarzeniach", odetnij dostęp do tych pól.
Po jakim czasie prowadzenia dziennika można oczekiwać poprawy wyników?
Uczciwa odpowiedź: nie ma publicznej statystyki, która by to mierzyła, więc każda liczba miesięcy podana jako obietnica byłaby wymyślona [BRAK DANYCH DO WERYFIKACJI: tempo poprawy wyników przy prowadzeniu dziennika]. Da się natomiast powiedzieć, co dziennik zmienia i w jakiej kolejności. Najpierw — i to jest jedyna szybka część — dostajesz nazwane błędy: zamiast „handluję nieregularnie" masz udział transakcji z error_code 6, 7 i 8 oraz godziny, w których się zdarzają. Potem, gdy próba urośnie na tyle, że przedziały dla poszczególnych setupów przestają się nakładać, dziennik zaczyna mówić coś o samych regułach: o szerokości stopa wobec MAE, o kosztach w R, o setupach, które nie zarabiają. Na końcu, na próbie obejmującej kilka reżimów rynkowych, widać własne wzorce pod presją serii. Kolejności nie da się przeskoczyć: bez uzgodnionych danych i bez zapisu błędów każdy wniosek o strategii jest w rzeczywistości wnioskiem o wykonaniu, tylko podpisanym cudzą nazwą.

Źródła i bibliografia

  1. Tharp V.K., Trade Your Way to Financial Freedom, McGraw-Hill, 2nd ed., 2007. Wprowadzenie pojęcia R-multiple jako fundamentalnej jednostki normalizującej wyniki transakcji oraz pełna metodologia liczenia expectancy.
  2. Sortino F.A., Price L.N., Performance Measurement in a Downside Risk Framework, Journal of Investing, 1994. Oryginalna praca wprowadzająca Sortino Ratio jako alternatywę dla Sharpe'a, karzącą tylko downside variance.
  3. Steenbarger B.N., The Daily Trading Coach: 101 Lessons for Becoming Your Own Trading Psychologist, Wiley, 2009. Metodologia prowadzenia dziennika z elementami psychologicznymi (mental state, decisional quality) i workflow analizy.
  4. Sweeney J., Maximum Adverse Excursion: Analyzing Price Fluctuations for Trading Management, Wiley, 1996. Klasyczna praca wprowadzająca metodologię MAE i MFE jako narzędzi diagnostycznych jakości entry i exit.
  5. Global Foreign Exchange Committee, FX Global Code: A Set of Global Principles of Good Practice in the Foreign Exchange Market, aktualizacja z grudnia 2024 r. Dobrowolny zbiór dobrych praktyk dla hurtowego rynku walutowego; zasady dotyczące ewidencji transakcji i śladu audytowego zleceń.

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ą.