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.
- 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.
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.
- ID transakcji — unikalny numer (T-2026-04-001), pozwala referencjować w notatkach i analizach
- Data i godzina otwarcia — z dokładnością do minuty, w jednej strefie czasowej (zalecam UTC + lokalna)
- Para walutowa — EUR/USD, GBP/JPY etc.
- Kierunek — long / short
Grupa B: kontekst strategiczny (4 pola)
Co planowałeś, w jakim setupie, z jaką klasyfikacją.
- Setup z playbooka — nazwa konkretnego setupu (np. „LON-breakout-A", „NY-mean-revert-B"). Bez tego nie da się policzyć expectancy per setup
- Klasa setupu — A+, A, B, C. Każda inny sizing. Bez klasy nie wiesz, czy zarabiasz na A+ a tracisz na B, czy odwrotnie
- Reżim rynkowy — trending / ranging / high vol / low vol — diagnozowany na D1 lub H4 przed wejściem
- 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.
- Entry planowane — cena, na której chciałeś wejść (z analizy)
- Entry realne — cena, na której rzeczywiście wszedłeś (slippage może być 1–5 pipsów na M15)
- SL planowane — cena, gdzie hipoteza się obala (z reguł strategii)
- SL realne (fill) — cena, na której SL został zrealizowany (slippage na SL bywa 2–10× większy niż na entry)
- TP planowane — cena lub wielokrotność R
- 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.
- Spread (pipsy) — w momencie wejścia, nie reklamowany przez brokera
- Slippage entry (pipsy) —
kierunek × (entry realne − entry planowane) / rozmiar pipsa; dodatnia wartość znaczy gorsze wejście, niż zaplanowałeś - 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 - Swap i prowizja — w walucie rachunku, dla pozycji trzymanej przez noc lub na ECN
Grupa E: wynik i metryki (3 pola)
- Wynik brutto — w pipsach i w walucie rachunku, bez kosztów
- Wynik netto — po odjęciu prowizji i swapu; spread i poślizg są już w cenach filli, więc nie odejmujesz ich drugi raz
- 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.
- 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)
- 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
- 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]
- 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.
- 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
- 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)
- 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
- 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
| # | Pole | Typ | Źródło |
|---|---|---|---|
| 1 | ID transakcji | tekst | generowane automatycznie |
| 2 | Data i godzina | datetime | broker / platforma |
| 3 | Para | tekst | broker |
| 4 | Kierunek | long/short | broker |
| 5 | Setup z playbooka | tekst | trader (przed wejściem) |
| 6 | Klasa A+/A/B/C | kategoria | trader (przed wejściem) |
| 7 | Reżim rynkowy | kategoria | trader (przed wejściem) |
| 8 | Sesja | kategoria | auto (z czasu) |
| 9 | Entry planowane | liczba | trader (przed wejściem) |
| 10 | Entry realne | liczba | broker |
| 11 | SL planowane | liczba | trader (przed wejściem) |
| 12 | SL realne (fill) | liczba | broker |
| 13 | TP planowane | liczba | trader (przed wejściem) |
| 14 | TP realne (fill) | liczba | broker |
| 15 | Spread (pipsy) | liczba | broker / log |
| 16 | Slippage entry (pipsy) | liczba | auto: kierunek × (10 − 9) / rozmiar pipsa |
| 17 | Slippage exit (pipsy) | liczba | auto: kierunek × (11 − 12) lub kierunek × (13 − 14), dzielone przez rozmiar pipsa — kolejność odwrotna niż w polu 16 |
| 18 | Swap + prowizja | liczba | broker |
| 19 | PnL brutto z filli | liczba | broker (z fillów rzeczywistych) |
| 20 | PnL netto z brokera | liczba | broker: PnL po prowizji/swapie; spread i slippage zawarte w fillach |
| 21 | R_netto | liczba | auto: PnL_netto_broker / planned_risk |
| 22 | Klasyfikacja błędu | kategoria 0–10 | trader (po zamknięciu) |
| 23 | Mental state 1–5 | liczba | trader (przed) |
| 24 | Godziny snu | liczba | trader (rano) |
| 25 | Decisional quality 1–5 | liczba | trader (koniec dnia) |
| 26 | Wolumen (lot) | liczba | broker |
| 27 | Wartość pipa przy otwarciu | liczba | auto (kurs z dnia transakcji); na 1 lota standardowego |
| 28 | Wersja setupu / playbooka | tekst | trader (przed wejściem) |
| 29 | Link do dowodu | tekst / URL | trader (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 kolumny | Typ | Źródło |
|---|---|---|
trade_id | tekst | auto / formuła |
open_time_utc / close_time_utc | datetime UTC | broker (CSV/MT export) |
pair | tekst | broker |
direction | long / short | broker |
setup / setup_class (A+/A/B/C) | tekst / kategoria | trader, przed wejściem |
regime / session | kategoria | trader / auto |
planned_entry / actual_entry | liczba | trader / broker |
planned_sl / actual_exit | liczba | trader / broker |
planned_tp / actual_tp | liczba | trader / broker |
spread_pips | liczba | broker / log |
slippage_entry_pips / slippage_exit_pips | auto: wejście kierunek × (actual_entry − planned_entry) / pip_size; wyjście kierunek × (planned_exit − actual_exit) / pip_size | formuł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_pln | liczba | broker |
broker_gross_pnl_pln / broker_net_pnl_pln | liczba | broker: PnL z fillów / po prowizji i swapie |
planned_gross_pnl_pln / planned_risk_pln | liczba | auto: 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_net | liczba (R) | auto: broker_net_pnl_pln / planned_risk_pln |
execution_drag_R | liczba (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_r | liczba (R) | trader / Edgewonk / cTrader / skrypt |
error_code | 0–10 | trader, po zamknięciu (10 = infrastruktura) |
mental_state 1–5 | liczba | trader, przed wejściem |
sleep_hours | liczba | trader, rano |
decision_quality 1–5 | liczba | trader, koniec dnia |
lots / pip_value_at_open | liczba | broker / 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_version | tekst | trader, przed wejściem |
evidence_link | tekst / URL | trader, 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.
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.
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 transakcjifills— jedno wykonanie:fill_id,order_id,trade_id, cena fillu, wolumen fillu, prowizja fillu, czas. Częściowe wyjście to kilka wierszy z tym samymtrade_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:
- 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)
- Deduplikacja — klucz
trade_idz 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. Samtrade_idnie wystarczy tam, gdzie są korekty i częściowe wykonania: kolejny fill i poprawka tej samej decyzji mają ten samtrade_id, więc nadpisywanie po nim gubi jedno z nich. Te deduplikujesz po identyfikatorach zdarzeń (order_id,fill_id) w warstwieorders/fillsopisanej niżej - 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
- 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.
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
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.
Dlaczego R-multiple, a nie procenty albo PLN
| Jednostka | Co pokazuje | Ograniczenie |
|---|---|---|
| PLN | Bezwzględny zysk/strata | Nie uwzględnia ryzyka — +200 PLN przy ryzyku 50 PLN to coś innego niż przy ryzyku 600 PLN |
| % | Wpływ na rachunek | Zależy od sizingu — większy sizing = większy %, ale niekoniecznie lepsza decyzja |
| Pipsy | Ruch ceny | Nie porównuje par o różnej zmienności (EUR/USD vs USD/MXN) |
| R-multiple | Zysk znormalizowany przez ryzyko | Wymaga 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
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.
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:
- WR — win 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)
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 netto | Status | Co robić |
|---|---|---|
| > +0,5R | Wybitna | Setup A+, pełna alokacja według planu |
| +0,3R do +0,5R | Solidna | Setup A, normalna alokacja |
| +0,15R do +0,3R | Marginalna | Setup B, zmniejszona alokacja według planu |
| 0 do +0,15R | Wątpliwa | Próba zbyt mała lub edge na granicy szumu — zbieraj więcej danych przed decyzją |
| < 0 | Stratna | Kandydat 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
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ść.
| SQN | Etykieta autora metody |
|---|---|
| < 1,6 | słaby (poor) |
| 1,6 – 1,9 | słaby, ale możliwy do handlu (below average) |
| 2,0 – 2,4 | przeciętny (average) |
| 2,5 – 2,9 | dobry (good) |
| 3,0 – 5,0 | bardzo dobry (excellent) |
| 5,1 – 6,9 | wyją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.
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 Factor | Interpretacja |
|---|---|
| < 1,0 | System stratny — straty przewyższają zyski |
| 1,0 − 1,3 | System na granicy — operacyjnie wątpliwy, koszty mogą zjeść marżę |
| 1,3 − 1,5 | Akceptowalny dla setupu B |
| 1,5 − 2,0 | Solidny system A |
| 2,0 − 3,0 | Wybitny system A+ |
| > 3,0 | Najczęś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 Factor | Interpretacja |
|---|---|
| < 1,0 | Drawdown przewyższa zysk — ryzyko nieproporcjonalne |
| 1,0 − 2,0 | Zwrot pokrywa DD, ale nie z dużym buforem |
| 2,0 − 3,0 | Solidny system |
| 3,0 − 5,0 | Wybitny — zwrot 3–5× nad DD |
| > 5,0 | Znakomity, 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.
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_id | Setup i wersja | R0 (PLN) | Wynik netto (PLN) | r_net | Uwaga |
|---|---|---|---|---|---|
| T-001 | LON-breakout-A+ v1.2 | 400 | +720 | +1,80 | wyjście na celu |
| T-002 | LON-breakout-A+ v1.2 | 400 | −412 | −1,03 | stop z poślizgiem — gorzej niż −1R, mianownik bez zmian |
| T-003 | NY-mean-revert-B v0.9 | 300 | −300 | −1,00 | stop bez poślizgu |
| T-004 | NY-mean-revert-B v0.9 | 300 | +9 | +0,03 | przypadek graniczny: wyjście ręczne, po kosztach niemal zero — to nie jest strata |
| T-005 | LON-breakout-A+ v1.2 | 500 | +625 | +1,25 | częściowe wyjście: dwa fille z tym samym trade_id, PnL zsumowany, R liczone raz |
| T-006 | LON-breakout-A+ v1.2 | 500 | −510 | −1,02 | stop, 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,1 | System z dużym szumem, expectancy może być dodatnie ale wahania ogromne |
| 0,1 − 0,2 | Akceptowalny dla strategii trend-following (z natury chaotyczne) |
| 0,2 − 0,4 | Solidny system |
| 0,4 − 0,6 | Wybitny — rzadko spotykany na detalu |
| > 0,6 | Albo 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,10 | Duża zmienność stratna wobec średniej — kapitał traci często |
| 0,10 – 0,20 | Akceptowalny |
| 0,20 – 0,35 | Solidny |
| 0,35 – 0,50 | Bardzo dobry |
| > 0,50 | Sprawdź 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
| Sytuacja | Diagnoza | Dział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,2R | Możliwy nadmiarowy bufor w SL — cena rzadko cofa się przeciw, bufor nie jest używany | Test 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,0 | Zostawiasz dużo na stole — TP/trailing zbyt agresywny | Test: 50% pozycji na 1R, 50% trailing po SMA-20 lub na strukturze |
| MFE / faktyczny_zysk ≈ 1,1 | Wyciągasz większość ruchu, exit jest dobry | Nie 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_time–close_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.
Wykres MAE/MFE — jak to czytać
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
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 DD | Interpretacja |
|---|---|
| < 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.
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.
| Metryka | Definicja i jednostka | Mianownik | Kontrola przed użyciem | Czego nie dowodzi |
|---|---|---|---|---|
R-multiple (r_net) | PnL netto / R0; bezwymiarowa | R0 z planu sprzed wejścia, stałe | R0 niezmienione po wyniku, po przesunięciu stopa i po częściowym wyjściu; spread nieodjęty drugi raz | Nie mówi nic o wielkości pozycji ani o wyniku w procentach kapitału |
| Expectancy | średnia r_net; w R | liczba zamkniętych transakcji | z WR, avgWin i avgLoss musi wyjść ta sama liczba; zera liczone jako trzecia populacja | Liczba bez przedziału nie jest wynikiem |
| Win rate | udział transakcji z wynikiem netto > 0 | liczba zamkniętych transakcji | WR × n musi być liczbą całkowitą; częściowe wyjścia liczone jako jedna transakcja | Nie mówi o zyskowności — WR 78% bywa systemem stratnym |
| Profit Factor | suma zysków / |suma strat|, ta sama konwencja kosztów | suma strat; brak strat = nieokreślony | PF = (pw × avgWin) / (pl × avgLoss) | Nie pokazuje rozkładu ani liczby obserwacji |
| Recovery Factor | zysk netto / max DD | max DD w tej samej jednostce co zysk | obie liczby z tego samego okresu i z tej samej krzywej | Nie mówi, czy obsunięcie się powtórzy ani jak długo trwało |
| Sharpe per-trade | średnia(R) / std(R) | odchylenie standardowe R | podaj n; annualizacja tylko przy niezależnych wynikach | Nie jest porównywalny z rocznym Sharpe funduszu |
| Sortino | (średnia(R) − MAR) / downside deviation | √(Σ min(R − MAR, 0)² / n) — cała populacja | sprawdź, 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 100 | porównuj wyłącznie przy tym samym N | Nie jest decyzją o alokacji ani dowodem przewagi |
| Max drawdown | max((Ht − Et) / Ht), H = szczyt kroczący | szczyt kroczący krzywej, nie maksimum globalne | equity czy balance; częstotliwość próbkowania; wpłaty zneutralizowane | Przeszłe obsunięcie nie jest górnym ograniczeniem przyszłego |
| Execution drag | [plan przy tym samym typie wyjścia − wynik netto] / R0; w R | R0 z planu | typ wyjścia zgodny (stop do stopu, cel do celu); kierunek i wolumen we wzorze; spread nieliczony dwa razy | Nie mówi, czy strategia ma przewagę — mówi o jakości wykonania |
| MAE / MFE | najgorsza i najlepsza wycena w trakcie życia pozycji; w R | odległość SL w pipsach albo R0 | strata zamknięta na stopie ma MAE ≥ 1R; wygrana zamknięta na celu ma MFE = TP | Nie 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ędzie | Mocne strony | Słabe strony | Dla kogo |
|---|---|---|---|
| Edgewonk | Najlepsze metryki out-of-the-box (R, expectancy, MAE/MFE), gotowe wykresy, klasyfikacja błędów, integracja z MT4/MT5 | Płatny — cennik dostawcy podaje 169 USD [STAN NA DZIEŃ: 2026-09-07, edgewonk.com/pricing]; wymaga ręcznego importu CSV przy niektórych brokerach | Trader z 200+ transakcjami rocznie, gotowy zapłacić za czas |
| Myfxbook | Auto-import z większości brokerów, publiczne portfele, social proof | Pł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 Blue | Free, dobry trade analyser, statystyki per setup, integracja MT4 | Interfejs 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 Excel | Pełna kontrola, dowolne pola, własne formuły, koszt 0 PLN | Wymaga 4–8h początkowego setupu, trzeba samodzielnie liczyć metryki | Trader systemowy, który chce dokładnie tych metryk, których chce |
| Notion / Obsidian | Łączenie liczb z notatkami jakościowymi, zdjęciami wykresów, refleksjami | Słabe agregaty statystyczne, trudne wykresy | Trader, 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żą.
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.
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ść | Czas | Cel | Wynik |
|---|---|---|---|
| Codziennie | 5 min | Zapis surowych danych | Kompletny dziennik 29 pól |
| Tygodniowo | 30 min | Diagnoza krótkoterminowa | Refleksyjny akapit + wzorce tygodnia |
| Miesięcznie | 60 min | Pełne metryki + plan poprawy | Raport miesięczny + 1–3 akcje |
| Kwartalnie | osobny 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.
FAQ — Najczęściej zadawane pytania
Czy 29 pól dziennika to nie jest przesada?
Jaka jest minimalna liczba transakcji do oceny strategii?
Czy expectancy ujemne zawsze znaczy, że strategia jest zła?
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?
Jak policzyć korelację snu z wynikiem w arkuszu?
=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?
Czy prowadzić jeden dziennik dla wszystkich strategii czy oddzielne?
Czy automatyczny dziennik z brokera (np. Myfxbook auto-import) wystarczy?
Jakie metryki pokazywać innym (mentor, audyt), a jakie zostawić sobie?
Po jakim czasie prowadzenia dziennika można oczekiwać poprawy wyników?
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
- 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.
- 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.
- 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.
- 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.
- 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.