Automatyzacja i screening w analizie technicznej — narzędzia, workflow i pułapki
Forex to 28 kombinacji ośmiu głównych walut, dziesiątki interwałów i setki kombinacji wskaźników — a uwaga jest jedna: po dwudziestym wykresie próg akceptacji setupu spada razem z koncentracją. Screening automatyzuje pierwszą, mechaniczną fazę: filtruje rynek według jawnie zapisanych reguł i podsuwa instrumenty do analizy. Dwa problemy zaczynają się zaraz potem. Reguła, której nie potrafisz jednoznacznie zapisać, nie nadaje się do skanera. A od „pomocnego filtra" łatwo przejść do ślepego zaufania narzędziu, które nie rozumie kontekstu, nie widzi spreadu w rolloverze i nie wie, że za godzinę jest NFP.
- Screener nie zarabia. Ogranicza liczbę nieistotnych wyników i oszczędza czas selekcji. Jeśli nie umiesz odsiać fałszywego układu po screeningu, tylko szybciej go znajdziesz. Decyzja o wejściu i zarządzanie ryzykiem pozostają po twojej stronie.
- Wpatrywanie się w wykres bez planu zwykle zwiększa liczbę impulsywnych wejść, nie jakość decyzji. Długie wpatrywanie się w niskie interwały sprzyja wejściom z nudów; alert ogranicza czas przy ekranie i liczbę impulsywnych decyzji.
- Backtest nie mówi, ile zarobisz. Mówi tylko, czy reguła zachowywała się zgodnie z założeniami na danych historycznych. To dużo, ale to nie to samo co przewaga na żywo — żywy rynek dokłada slippage, zmienny spread, requote'y i twoją psychologię, z których żadnego Strategy Tester nie modeluje dobrze.
- Między ręcznym handlem a pełnym EA jest pięć poziomów automatyzacji. Dla większości detalistów praktyczny zakres to poziomy 2–4 (alert wskaźnikowy → screener → pół-auto). Pełna automatyzacja (EA, poziom 5) to osobna dyscyplina, bliższa inżynierii niż tradingowi dyskrecjonalnemu.
1. Po co automatyzować — i co właściwie automatyzujesz
Swing trader pracujący na Forex ma do dyspozycji 28 najczęściej śledzonych kombinacji między 8 głównymi walutami (USD, EUR, GBP, JPY, CHF, AUD, NZD, CAD) — czyli tzw. majors i crosses — plus kilkanaście par egzotycznych, a u wielu brokerów także indeksy, surowce i kryptowaluty. Ręczne otwieranie każdego wykresu na W1, D1 i H4, sprawdzanie średnich kroczących, oscylatorów i stref S/R to w sumie kilkadziesiąt minut pracy. Codziennie. Screening automatyzuje tę pierwszą, mechaniczną fazę[8].
Nie automatyzujesz decyzji o wejściu — automatyzujesz przeszukiwanie. Screener nie mówi „kupuj". Mówi „popatrz na to". Co z tym zrobisz — zależy od kontekstu, wyższego interwału, zarządzania ryzykiem i twojego doświadczenia.
Screening rozwiązuje dwa banalne problemy, o których nikt nie mówi głośno. Po 20. wykresie z rzędu przestajesz widzieć — spada koncentracja i łatwiej przeoczyć subtelne układy. Po trzech miesiącach handlu masz ulubione 4 pary i resztę rynku ignorujesz, nawet jeśli krzyżówki jenowe robią w tym czasie najczystsze trendy roku. Screener nie traci koncentracji po 15. wykresie i sprawdza wszystkie pary bez uprzedzeń.
Czego screening nie rozwiązuje: nie powie ci, czy setup jest dobry. Sygnał „RSI < 30" to nie to samo co „kup teraz". Bez analizy kontekstu, price action i zarządzania pozycją screener generuje szum, nie sygnały.
2. Spektrum automatyzacji: od alertu do algorytmu
Między „ręcznie" a „robotem" jest pięć stopni. Dla większości detalistów praktyczny zakres to stopnie 2–4. Najczęstszy błąd detalistów to próba wejścia od razu w pełną auto-egzekucję bez opanowania screeningu, alertów i ręcznej walidacji setupu.
| Poziom | Co robi maszyna | Co robi trader | Przykłady |
|---|---|---|---|
| 1. Alert cenowy | Powiadamia, gdy cena osiągnie poziom | Analizuje, decyduje, wykonuje | Alert na EUR/USD = 1,0700 |
| 2. Alert wskaźnikowy | Powiadamia, gdy wskaźnik spełni warunek | Analizuje kontekst, decyduje | RSI(14) < 30 na D1 |
| 3. Screener | Filtruje listę instrumentów wg kryteriów | Przegląda wyniki, analizuje, decyduje | TradingView Screener |
| 4. Pół-auto system | Generuje sygnał + sugerowane parametry | Zatwierdza lub odrzuca, zarządza pozycją | Własny wskaźnik (custom indicator) + alert w Pine Script |
| 5. Pełna automatyzacja | Analizuje, otwiera, zarządza, zamyka | Monitoruje, interweniuje w awaryjnych sytuacjach | Expert Advisor (EA) w MT4/MT5 |
Poziomy 1–3 to narzędzia, z których korzysta większość traderów niezależnie od doświadczenia[9]. Poziom 4 wymaga umiejętności programowania lub konfiguracji gotowych narzędzi. Poziom 5 to osobna dyscyplina, bliższa inżynierii niż tradingowi dyskrecjonalnemu[4].
Artykuł koncentruje się na poziomach 1–4. Pełna automatyzacja (EA) pojawia się tu głównie w kontekście pułapek — bo to tam wpadają ludzie, którzy zbyt wcześnie sięgają po robota.
3. Kryteria screeningowe w praktyce
Zły screener nie pokazuje złych par — pokazuje za dużo pozornie dobrych. To gorsze, bo marnuje uwagę i buduje fałszywe poczucie, że „rynek coś ci dziś daje". Parametry screenera muszą być wystarczająco selektywne, by ograniczać szum, ale nie tak ciasne, by eliminować większość sensownych setupów. Poniżej najczęściej stosowane filtry na Forex[3].
Checklista obiektywizacji reguły
Zanim jakikolwiek warunek trafi do skanera, musi przejść z języka intuicji na język maszyny. Każdy element poniżej, którego nie ustalisz jawnie, skaner ustali za ciebie — zwykle inaczej, niż zakładasz:
| Element | Pytanie kontrolne |
|---|---|
| Uniwersum | Które instrumenty skanuję (lista zamknięta, nie „wszystko")? |
| Źródło danych | Czyj feed i jakie ceny (bid, ask, mid)? Ten sam, na którym handluję? |
| Interwał i moment oceny | Które świece — tylko zamknięte? Kiedy dokładnie liczony jest warunek? |
| Wskaźnik z implementacją | Jakie parametry i czyja implementacja (RSI Wildera ≠ RSI na SMA)? |
| Operator i próg | Przejście przez próg (crossover) czy stan poniżej/powyżej? Z jaką tolerancją? |
| Częstotliwość skanu | Raz na zamkniętą świecę, raz dziennie o stałej godzinie, czy ciągle? |
| Braki danych | Co robi reguła przy brakującej świecy, luce, zmianie symbolu? |
| Deduplikacja | Ile alertów przy warunku spełnionym przez sześć świec z rzędu — sześć czy jeden? |
| Warunek resetu | Co unieważnia sygnał i pozwala regule „odpalić" ponownie? |
Jak mierzyć skuteczność screenera. Dobry screener nie jest tym, który wyrzuca więcej wyników — tylko tym, który poprawia jakość watchlisty: mniej false positives, wyższy win rate lub profit factor na próbce pochodzącej z setupów przepuszczonych przez filtr — przy zamrożonej wcześniej regule wejścia, wyjścia i kosztach, inaczej porównanie nic nie mierzy. Najprostszy sprawdzian: weź 100 alertów ze screenera z ostatnich tygodni, podziel na te, które przerodziły się w realny trade (handlowany lub pominięty po ręcznej walidacji), i policz, ile z nich miało domkniętą tezę (TP) vs ile pękło jako false breakout albo fałszywy sygnał. Jeśli screener nie podnosi tego współczynnika mierzalnie w stosunku do „brak filtra", pełni wyłącznie funkcję kosmetycznego zawężenia rynku — nie narzędzia z przewagą statystyczną. Sensowny cel: po screeningu jakość watchlisty wyraźnie lepsza niż bez niego, a nie tylko „mniej wykresów do obejrzenia".
Filtry trendowe
- Cena względem EMA/SMA. Najprostszy filtr — na potrzeby reguły przyjmuje się: cena powyżej rosnącej EMA 200 na D1 = filtr kierunku wzrostowego, poniżej = spadkowego (to uproszczenie robocze, nie definicja trendu). Można dodać warunek nachylenia (EMA rośnie, nie jest płaska). Filtr gruby, ale skutecznie eliminuje kontrtrend — a kontrtrend na siłę potrafi prowadzić do serii dotkliwych strat szybciej niż brak setupu.
- Crossing średnich. EMA 50 przecina EMA 200 od dołu (golden cross) — popularne kryterium screeningowe. Samo w sobie to nie jest sygnał wejścia, ale wskazuje na instrumenty, na których coś zaczyna się zmieniać w strukturze trendu.
- ADX powyżej progu. Przykładowe progi utrwalonej konwencji: ADX(14) > 25 traktuje się jako rynek trendowy, < 20 jako konsolidację — pamiętając, że ADX mierzy siłę ruchu, nie jego kierunek. Przydatny głównie jako filtr negatywny: poniżej progu reguła trendowa odrzuca instrument zgodnie z przyjętym parametrem.
Filtry momentum i oscylatory
- RSI w strefach ekstremalnych — z dużym zastrzeżeniem dla D1. RSI(14) poniżej 30 (wyprzedanie) lub powyżej 70 (wykupienie). Na parach majors na D1 bywa rzadsze niż na akcjach, choć częstość zależy od pary i okresu (na krzyżówkach jenowych w 2022 r. zdarzało się regularnie). Kiedy występuje, często towarzyszy mu czynnik fundamentalny: zmiana ścieżki stóp, ryzyko geopolityczne, interwencja. RSI < 30 na D1 to filtr do otwarcia wykresu i sprawdzenia, dlaczego rynek gwałtownie spada — nie sygnał kontrtrendu. Na H4/H1 ekstrema RSI są częstsze i mniej dramatyczne, ale tym samym mniej informacyjne.
- Dywergencja cena–oscylator. Cena robi nowe szczyty, RSI nie potwierdza. Trudniejsze do zautomatyzowania niż proste progi, ale niektóre skrypty Pine Script na TradingView radzą sobie z wykrywaniem prostych dywergencji. Złożone, wielofalowe dywergencje — to dalej domena ludzkiego oka.
- MACD-Histogram — zmiana znaku. Histogram przecina zero z dołu — w tej implementacji oznacza to zmianę relacji linii MACD do sygnałowej, nie dowód zmiany kierunku ceny. Prosty do zakodowania, często używany jako wstępny filtr do dalszej analizy.
Filtry cenowe i strukturalne
- Bliskość do S/R. Cena w odległości X pipsów od kluczowego wsparcia lub oporu. Wymaga wcześniejszego zdefiniowania poziomów — co w pełni automatycznym screeningu jest trudne, ale w pół-automatycznym workflow (poziomy narysowane ręcznie + alert) — proste i bardzo skuteczne.
- Przełamanie zakresu N-dniowego. Cena przebija najwyższe maksimum z ostatnich 20 świec (Donchian Channel breakout). Klasyczne kryterium trend-followingowe — Richard Donchian stosował je w latach 50. i mimo prostoty pozostaje popularne zarówno w testach[3], jak i w praktyce.
- Fibonacci — cena przy zniesieniu. Cena zbliża się do zniesienia 61,8% ostatniego swingu. Trudność polega na jednoznacznym wyznaczeniu swingów (definicja fraktalna z opóźnionym potwierdzeniem → art. 5.11) — na czystych trendach działa, w konsolidacji rysuje poziomy na szumie. Skrypty TradingView pozwalają to zautomatyzować, ale traktuj wynik jako podpowiedź do ręcznej weryfikacji, nie gotowy setup.
Od intuicji do warunku — kompletna reguła i to, co ginie w przekładzie
Intuicja: „kupuj odbicia od wsparcia w trendzie wzrostowym na D1". Ta sama myśl zapisana tak, żeby skaner mógł ją wykonać:
uniwersum: 28 kombinacji glownych walut; dane: jeden feed, ceny BID; interwal: D1, swiece ZAMKNIETE
trend: close[1] > EMA200[1] ORAZ EMA200[1] > EMA200[21]
wsparcie: ostatni dolny fraktal (2 zamkniete swiece z kazdej strony; przy rownych minimach
liczy sie wczesniejsza swieca), nie starszy niz 60 swiec;
brak takiego fraktala = brak wsparcia = reguła nie generuje sygnalu
warunek: low[1] <= wsparcie + 0,2 × ATR14[1] ORAZ close[1] > wsparcie
ocena: raz dziennie, po zamknieciu D1; duplikaty: max 1 alert na pare do ponownego uzbrojenia
uzbrojenie: ponowny alert mozliwy, gdy close[1] oddali sie od strefy o >= 1 × ATR14[1]
uniewazn.: close[1] < wsparcie − 0,5 × ATR14[1] → wsparcie przestaje istniec dla reguly
I jawny rachunek strat z przekładu: „odbicie" stało się dotknięciem strefy o arbitralnej tolerancji 0,2 × ATR; „wsparcie" — fraktalem potwierdzanym z opóźnieniem dwóch świec (moment potwierdzenia swingu → art. 5.11); jakość odbicia, kontekst W1 i wygląd świecy zostały poza regułą; osobno trzeba było rozdzielić ponowne uzbrojenie alertu (cena odeszła od strefy) od unieważnienia samego wsparcia — to dwie różne decyzje, które intuicja skleja w jedno. To nie wada zapisu, tylko cena jednoznaczności — wszystko, czego nie zapisałeś, dla skanera nie istnieje. Dokładnie dlatego wynik skanu jest listą kandydatów do analizy, a nie listą transakcji.
Filtry kontekstu makro i kosztów — czego żaden screener nie pokaże sam
Techniczny filtr na H1/H4 traci sens ekonomiczny, jeśli w ciągu 30–60 minut wypada tier-1 event (NFP, CPI, decyzja Fed/ECB) albo rollover. Poniższe filtry warto dołożyć osobno — najczęściej ręcznie lub w zewnętrznym arkuszu, bo wbudowane screenery ich nie obsługują natywnie:
- Excluder kalendarzowy. Jeśli w ciągu 24 h (swing) lub 2 h (intraday) wypada tier-1 event — odrzucasz setup automatycznie, niezależnie od tego, co pokazuje screener. Na Forex Factory ustawiasz filtr „High impact" i traktujesz jako twardą regułę.
- Filtr spreadu. Jeśli w ostatniej godzinie spread był szerszy niż 2× typowy dla danej pary i sesji — setup czeka. To nie jest moment na wejście; coś dzieje się po stronie płynności, czego wykres nie pokazuje.
- Filtr zmienności (ATR). ATR(14) powyżej N-dniowej średniej + 20% = „rynek jest dziś gwałtowniejszy niż zwykle" → stop i target muszą być szersze, sizing mniejszy. Poniżej średniej + 20% = „cienki dzień" → ryzyko, że screener łapie szum, nie ruch strukturalny.
Screener nie pociąga za spust: analiza formacji cenowych, kontekst wielointerwałowy i zarządzanie ryzykiem pozostają po twojej stronie.
Screener skalibrowany pod trend (np. „cena > EMA 200 + ADX > 25") będzie generował dużo sygnałów w okresach trendowych, a w konsolidacji — prawie nic. Odwrotnie: screener range-tradingowy (np. „cena przy ekstremum Bollingera + RSI w ekstremum") świetnie pracuje w bocznym rynku, a w trendzie daje serię fałszywych sygnałów kontrariańskich. Narzędzie nie jest uniwersalne — jest reżimowo zależne. Praktyka: albo prowadź dwa zestawy filtrów (trend + range) i przełączaj je ręcznie w zależności od reżimu D1/W1, albo świadomie ogranicz screening do jednego reżimu i akceptuj, że „pusty tydzień" to normalna faza.
4. TradingView — screener, alerty, Pine Script
Wbudowany screener
TradingView oferuje Screener dostępny z dolnego panelu platformy. Dla Forex pozwala filtrować po dziesiątkach kryteriów: cena, zmiana procentowa, oscylatory, średnie kroczące, wolumen. Jedno ostrzeżenie dotyczące wolumenu: jeśli screener filtruje po „wolumenie" na Forex, operuje na danych zastępczych z jednego źródła (zwykle tick volume z konkretnego feedu brokera, nie wolumen całego rynku spot FX). Traktuj ten filtr jako pomocniczy, nie decyzyjny — setup „z podwyższonym wolumenem" na TradingView i faktyczna aktywność rynku to często dwie różne historie, a filtr wolumenowy w screeningu FX jest z tego powodu niereprodukowalny między brokerami — dwa feedy dadzą różne listy wyników przy identycznym warunku. Wyniki aktualizują się w czasie zbliżonym do rzeczywistego.
Praktyczny zestaw filtrów na start: interwał D1, RSI(14) poniżej 35 lub powyżej 65, cena powyżej/poniżej EMA 200, zmiana procentowa z ostatnich 5 sesji > 1%. Tak skonfigurowany screener zwykle wyrzuca kilka par dziennie — konkretna liczba zależy od warunków rynkowych: w trendującym rynku filtr przepuści więcej wyników, w konsolidacji mniej.
Alerty w TradingView
TradingView pozwala ustawiać alerty na: cenę (prosta), wskaźnik (RSI przekracza próg), narysowaną linię trendu (cena dotyka) oraz własny warunek zdefiniowany w Pine Script. Alerty przychodzą jako push na telefon, e-mailem lub przez webhook — co otwiera drogę do integracji z botami, Discordem czy Telegramem. Alerty potrafią uratować psychikę (nie siedzisz przed ekranem przez 8 godzin czekając na ruch), ale pamiętaj: sygnał zawsze przychodzi po fakcie. W momencie, gdy dostajesz pusha na telefon, świeca już się wydarzyła, a algorytmy instytucjonalne (ale też hobbystyczne boty z webhooków na całym świecie) zdążyły zareagować. Używaj alertów jako dzwonka do analizy, nie jako wyzwalacza egzekucji.
Limity alertów zależą od planu i zmieniają się — wartości orientacyjne (aktualny cennik na tradingview.com/pricing): Essential pozwala na 20 alertów cenowych + 20 technicznych, Plus po 100, Premium 400, Ultimate 1000. Darmowe konto ma kilka jednocześnie — dla tradera monitorującego 10–15 par to realne ograniczenie i częsty powód przejścia na płatny plan.
Pine Script — własne wskaźniki i strategie
Pine Script to język skryptowy TradingView. Nie wymaga doświadczenia programistycznego na poziomie Pythona — składnia jest prostsza, dokumentacja dobra, a społeczność opublikowała tysiące gotowych skryptów, które można adaptować. Co możesz z nim zrobić:
- Własny wskaźnik (custom indicator) — np. wskaźnik, który rysuje strzałkę, gdy RSI < 30 AND cena jest w strefie 50–61,8% zniesienia Fibonacci AND EMA 50 > EMA 200. Trzy warunki, które ręcznie sprawdzałbyś kilka minut na wykresie — skrypt robi to natychmiast.
- Alert na bazie własnego wskaźnika — skrypt generuje alert automatycznie, gdy warunki się zbiegną. Dostajesz powiadomienie na telefon i otwierasz wykres gotowy do analizy.
- Backtest strategii — Pine Script ma wbudowany moduł
strategy(), który pozwala przetestować logikę na danych historycznych. Wyniki widoczne w zakładce „Strategy Tester": krzywa kapitału (equity curve), drawdown, procent trafień (win rate), współczynnik zysku (profit factor).
Ważne rozróżnienie dotyczące Pine Script i egzekucji zleceń: Pine Script jest genialny do malowania po wykresie i alertów, ale wysyłanie przez niego sygnałów po webhookach do środowiska brokera detalicznego to proszenie się o poślizg. Pine Script służy przede wszystkim do analizy, sygnałów i backtestów w ekosystemie TradingView — nie jest silnikiem wykonawczym po stronie brokera. Wykonanie zleceń wymaga osobnej warstwy: albo natywnej integracji brokerskiej (TradingView ma takie integracje z częścią brokerów), albo zewnętrznego workflow opartego na webhookach, które wysyłają sygnał do API brokera lub pośrednika typu 3Commas. Każdy element łańcucha (TradingView → webhook → pośrednik → API brokera) może wprowadzić opóźnienie, duplikat sygnału albo brak egzekucji. Do screeningu i alertów — Pine Script wystarcza bez integracji. Do automatycznej egzekucji — lepsza ścieżka to MT4/MT5 z EA albo Python z bezpośrednim API brokera.
Przykładowy minimalny alert w Pine Script — RSI w wyprzedaniu pod EMA 200 na D1, 10 linii kodu:
//@version=6
indicator("Alert: RSI<30 + cena<EMA200", overlay=true)
// uruchamiaj na wykresie D1 — skrypt liczy na interwale wykresu i sam go nie wymusza
rsi_val = ta.rsi(close, 14)
ema200 = ta.ema(close, 200)
oversold_x = ta.crossunder(rsi_val, 30) // ZDARZENIE przeciecia w dol, nie stan
below_ema200 = close < ema200
setup_signal = barstate.isconfirmed and oversold_x and below_ema200 // tylko zamknieta swieca
plot(ema200, color=color.blue, linewidth=2)
alertcondition(setup_signal, title="RSI_oversold_below_EMA200",
message="{{ticker}} ({{interval}}) — RSI < 30 pod EMA 200")
Zwróć uwagę: warunkiem jest przecięcie progu (ta.crossunder), nie stan „RSI poniżej 30" — inaczej alert wychodziłby po każdej kolejnej świecy spędzonej w strefie, wbrew zasadzie deduplikacji z sekcji 8. Wklejasz w Pine Editor, dodajesz do wykresu D1, tworzysz alert z tym warunkiem i opcją „Once Per Bar Close". W nowszych skryptach zamiast alertcondition() używa się też dynamicznej funkcji alert() — alertcondition pozostaje wspierane. Webhook (opcjonalnie) wyśle treść komunikatu na twój serwer — jeśli potrzebujesz formatu JSON, budujesz go jawnie w polu message.
Moment dostępności sygnału — krótka oś czasu. Wartość warunku liczona w trakcie świecy jest tymczasowa (intrabar); wiążąca staje się na zamknięciu; alert przy „Once Per Bar Close" wychodzi po zamknięciu; a najwcześniejsza realna cena reakcji to następny tick lub otwarcie kolejnej świecy. Backtest, który „kupuje po cenie zamknięcia tworzącej sygnał", podgląda przyszłość. Pełna oś czasu niedomkniętej świecy i reguła D1[1] vs D1[0] → art. 5.11.
5. MT4/MT5 — skanery, wskaźniki, EA
MetaTrader pozostaje dominującą platformą egzekucji u wielu brokerów Forex. Jego siła w kontekście automatyzacji to język MQL4/MQL5 i możliwość tworzenia Expert Advisors (EA) — programów, które mogą automatycznie otwierać i zamykać pozycje.
Custom indicators i skanery
W MQL4/MQL5 możesz napisać (lub pobrać z MQL5 Market) wskaźnik, który skanuje wiele instrumentów z Market Watch i wyświetla dashboard: nazwa pary, kierunek trendu, wartość RSI, odległość od kluczowych MA. Popularne narzędzia tego typu to np. „Multi-Currency Dashboard" czy „Scanner RSI" — ich jakość jest bardzo różna, więc warto sprawdzić recenzje i przetestować na demo zanim zaczniesz na nich polegać.
Istotna różnica w stosunku do TradingView: wskaźniki MT4/MT5 działają lokalnie (na twoim komputerze lub VPS), nie w chmurze. Skanowanie odbywa się z prędkością twojego połączenia z serwerem brokera — i wymaga, żeby platforma była otwarta. Jeśli zamkniesz laptopa i pójdziesz na spacer, alerty MT4 nie zadziałają (chyba że platforma pracuje na VPS-ie). TradingView skanuje po stronie serwera, więc alerty działają nawet gdy masz wyłączony komputer. Dla swing tradera, który nie chce być przywiązany do biurka, to konkretna różnica w codziennym użytkowaniu.
Expert Advisors — pełna automatyzacja
EA to programy, które mogą samodzielnie handlować. Zakres możliwości jest ogromny — od prostego „kup, gdy EMA 50 przetnie EMA 200 od dołu" po skomplikowane systemy z dynamicznym zarządzaniem pozycją, trailing stopami i analizą wielu interwałów.
Rynek gotowych EA (MQL5 Market, fora tradingowe) jest zaśmiecony produktami niskiej jakości — z pięknym backtestem i katastrofalnymi wynikami na żywo. Więcej o tym w sekcji o pułapkach — ale krótko: jeśli widzisz equity curve rosnącą pod 45° bez żadnego drawdownu, traktuj to jako sygnał ostrzegawczy, nie zachętę do zakupu.
MT5 vs MT4
MT5 oferuje lepsze możliwości backtestingu — przede wszystkim Strategy Tester obsługujący wiele symboli jednocześnie (multi-currency), co jest realną przewagą przy testowaniu strategii portfelowych. MT4 testuje strategię na jednym symbolu i jednym okresie naraz. MT5 ma też bogatszy język MQL5 (klasy, wskaźniki na bazie wielu symboli). Mimo to MT4 wciąż ma ogromną bazę użytkowników i gotowych narzędzi. Wybór zależy głównie od brokera — nie od preferencji tradera, bo wielu brokerów oferuje tylko jedną z tych platform.
6. Workflow: od skanu do watchlisty
Screening ma sens tylko wtedy, gdy jest częścią powtarzalnego procesu. Poniższy workflow sprawdza się u wielu swing traderów na Forex — a w miarę zdobywania doświadczenia modyfikujesz jego parametry pod własny styl.
- Weekend: przegląd W1. Raz w tygodniu otwierasz 28 kombinacji głównych walut na interwale tygodniowym. Ręcznie — nie ma tu czego automatyzować, bo szukasz kontekstu strukturalnego, nie sygnałów. Zaznaczasz kierunek trendu i kluczowe strefy wsparcia i oporu (S/R). To zajmuje może 30–40 minut, ale daje obraz całego rynku, którego nie zastąpi żaden screener.
- Poniedziałek rano: screener D1. Odpalasz screener z kryteriami dopasowanymi do swojego stylu (np. RSI < 35, cena przy EMA 200, ADX > 25). Dostajesz kilka par. Każdą otwierasz na D1 i sprawdzasz ręcznie: czy pasuje do kontekstu z tygodniówki? Czy jest blisko poziomu z wyższego interwału?
- Tworzenie watchlisty — z kontrolą korelacji i filtrem makro. Pary, które przeszły oba filtry, lądują na watchliście (idealne 2–5 par). Przed dodaniem kolejnej pary sprawdź korelację z tym, co już masz: długie pozycje na EUR/USD i GBP/USD + krótka na USD/CHF to nie trzy setupy, to jedna ekspozycja short USD z potrójną koncentracją ryzyka. W praktyce wiele „różnych" setupów FX to po prostu różne ekspresje tego samego risk-on/risk-off albo long/short USD — MyFxBook Correlation albo rzut oka na DXY pokazują to w 30 sekund. Dla swingów D1/W1 warto dołożyć filtr makro drugiego rzędu — pozycjonowanie COT, kierunek DXY i spread rentowności US10Y vs zagraniczne odpowiedniki. To nie jest trigger wejścia, tylko warstwa kontekstu: setup techniczny w kierunku zgodnym z makro ma inną wagę niż ten sam setup pod prąd dominujących przepływów. Nigdy nie używaj COT jako samodzielnego powodu wejścia — raport jest opóźniony o kilka dni i nadaje się do filtrowania hipotez, nie do timingu. Osobny krok: zanim ustawisz alert, policz orientacyjny rozmiar pozycji (kalkulator w dziale Narzędzia) na podstawie odległości do potencjalnego SL.
- Alerty i oczekiwanie. Na parach z watchlisty ustawiasz alerty: cenowe (cena dotrze do strefy), wskaźnikowe (RSI wejdzie w ekstremalną strefę), lub na narysowanych obiektach (dotknięcie linii trendu). Nie siedzisz i nie gapisz się w wykres — czekasz na powiadomienie.
- Alert → analiza → decyzja. Alert się aktywuje. Otwierasz wykres, robisz analizę wielointerwałową (D1 → H4), szukasz potwierdzenia price action. Jeśli setup jest — wchodzisz. Jeśli nie — zostawiasz i czekasz dalej. Brak setupu to nie problem — to informacja.
Trading to nie praca na taśmie — nie da się tego opisać w kategoriach „X minut dziennie". W jednym tygodniu spędzisz przed wykresem 15 minut, bo rynek zamarł; w innym zarwiesz noc, bo Bank Japonii wszedł z interwencją i wszystkie screenerowe setupy z D1 nadają się do kosza. Rutyna workflow pozwala zachować rygor, nie oszczędza czasu sama z siebie. Screening eliminuje problem „zmęczenia uwagi" po 20. wykresie: zamiast przeglądać wszystko od A do Z, patrzysz tylko na to, co przeszło filtr.
Watchlista z 15 par to nie watchlista — to nadal cały rynek, tylko z ładniejszą nazwą i większą iluzją kontroli. Ogranicz się do 3–5 par jednocześnie. Pusty screener w środę to nie awaria narzędzia — to rynek mówiący „nie dziś". Bywa, że sensowne setupy koncentrują się w kilku miesiącach roku, a reszta to oczekiwanie — i taki kalendarz też jest poprawnym wynikiem procesu.
7. Poniedziałek rano — jak wygląda screening 28 par
Żeby workflow z poprzedniej sekcji nie był abstrakcją — przykład ilustracyjny konkretnego poniedziałkowego poranka (wartości przykładowe; wszystkie odczyty ze świec zamkniętych — przez weekend żadna nowa świeca D1 nie powstała).
8:15. W screenerze TradingView filtry na D1 (dane z piątkowego zamknięcia sesji): RSI(14) < 35, cena poniżej EMA 200, ADX(14) > 20. Cel: pary w wyprzedaniu w ramach trendu spadkowego.
Screener wyrzuca 4 pary. Otwieram każdą na D1:
- AUD/USD — RSI 28, cena pod EMA 200, ale na W1 tuż nad silną strefą wsparcia z 2023. Idzie na watchlistę, alert cenowy na dolną granicę strefy.
- NZD/USD — podobna sytuacja, ale na W1 brak wyraźnej strefy blisko. Cena w „powietrzu". Odrzucam.
- EUR/GBP — na moim wykresie RSI 33, ale ADX 18, poniżej progu. Skaner pokazał 21, bo liczył wskaźnik na danych innego feedu niż mój broker — drobne różnice OHLC między dostawcami potrafią przesunąć ADX o kilka punktów. Rynek graniczny między konsolidacją a trendem. Odrzucam i notuję rozjazd feedów.
- GBP/CHF — RSI 31, cena pod EMA 200, ADX 27. Na W1 zniesienie 61,8% Fibonacci 40 pipsów od ceny. Idzie na watchlistę. Dwa alerty: cenowy na 61,8% i wskaźnikowy na RSI < 25.
Z 28 par screener odfiltrował 4, ręczna weryfikacja pozostawiła 2 na watchliście. 12 minut. Warto zauważyć: screener przepuścił EUR/GBP, bo liczył wskaźnik na innym feedzie niż mój wykres — rozjazd danych między dostawcami to jeden z powodów, dla których ręczna weryfikacja po screeningu nie jest opcjonalna, tylko jest częścią procesu.
8. Alerty — jak nie przegapić bez śledzenia
Wpatrywanie się w wykres bez planu zwykle kończy się nadtradingiem, nie lepszą analizą[7]. Alert ogranicza ekspozycję na ekran, a to bywa skuteczniejszym sposobem na redukcję impulsywnych wejść niż kolejny filtr techniczny. Definiujesz warunki, na które czekasz, i idziesz robić coś innego.
Market vs limit order — krótka zasada
Zanim zaczniesz myśleć o alertach i egzekucji, dobrze mieć w głowie jeden trade-off: market order płaci za pewność wykonania, limit order płaci za ryzyko niewypełnienia. Jeśli cena ruszy szybciej, niż zdążysz wejść limitem, zlecenie nie wykona się wcale — i przegapiasz ruch. Jeśli składasz zlecenie rynkowe w cienkim rynku albo wokół publikacji, płacisz za to poślizgiem i rozszerzonym spreadem. Na D1/H4 ze spokojną sesją limit zwykle wygrywa (lepsza średnia cena wejścia); na newsach i breakoutach pewność wykonania bywa ważniejsza niż drobna poprawa ceny — z zastrzeżeniem, że dokładnie wtedy slippage bywa najwyższy. Świadoma decyzja o typie zlecenia to część setupu, nie techniczna kosmetyka.
Rodzaje alertów
- Cenowy. „Powiadom mnie, gdy EUR/USD dotrze do 1,0700". Ustawiasz na poziomach S/R, zniesieniach Fibonacci, strefach zainteresowania. Zero kodowania.
- Wskaźnikowy. „RSI(14) < 30 na D1" lub „MACD-Histogram zmienił znak". W TradingView: klik na wskaźnik → Create Alert. W MT4/MT5: przez własny wskaźnik z funkcją alertu (uwaga — alert MT4 wymaga otwartej platformy lub VPS-a, bo działa lokalnie).
- Na obiekcie graficznym. TradingView pozwala ustawiać alerty na narysowanych liniach trendu i strefach — cena dotknęła twojej linii z tygodniówki, dostajesz push na telefon. Łączy ręcznie narysowaną analizę z automatycznym powiadomieniem.
- Złożony warunek. Wielowarunkowy alert: „cena poniżej EMA 200 AND RSI < 35 AND ADX > 25". Wymaga Pine Script lub MQL, ale ustawia się raz.
Jak łączyć alerty w praktyce
Strefowe + wskaźnikowe. W weekend rysujesz strefy na W1/D1, ustawiasz na nich alerty cenowe. Równolegle ustawiasz alerty wskaźnikowe (RSI < 30) na parach z watchlisty. Gdy oba się aktywują w zbliżonym czasie — masz bardziej selektywny warunek, choć niekoniecznie niezależne potwierdzenie: oba kryteria liczą się z tej samej ceny. Podejście strefowe dobrze współgra z analizą wsparcia i oporu, wskaźnikowe — ze strategiami opartymi na oscylatorach.
Jedno ostrzeżenie: przebodźcowanie (alarm fatigue) jest realne. Jeśli ustawisz 30 alertów na wszystko, co się rusza, po kilku dniach wyciszysz telefon, przegapiając jedyny sensowny setup w tygodniu — a to gorsze niż brak alertów, bo daje fałszywe poczucie, że „monitorujesz rynek". Ogranicz alerty do par z aktualnej watchlisty (3–5 par) i usuwaj te, które straciły aktualność.
Deduplikacja: jeden warunek, jeden alert. Warunek „RSI < 30" spełniony przez sześć kolejnych świec to sześć alertów — chyba że jawnie zdecydujesz inaczej. Rozróżnij zdarzenie przejścia (crossover: RSI przecina 30 w dół) od stanu (RSI jest poniżej 30). Do alertów zwykle chcesz przejścia, z oceną raz na zamkniętą świecę („Once Per Bar Close") i ponownym uzbrojeniem dopiero po powrocie powyżej progu. Bez tej decyzji automat spamuje — a przebodźcowanie kończy się ignorowaniem wszystkiego.
Czas serwera a wyniki skanu D1. Screener na D1 u brokera z serwerem GMT+2/+3 i u brokera GMT+0 liczy wskaźniki na inaczej pociętych świecach — ta sama reguła zwróci tego samego ranka różne listy par. Skanuj na tym samym feedzie, na którym handlujesz; mechanika granic świec i czasu serwera → art. 5.11 i art. 4.1.
Na W1 widzisz, że EUR/USD ma silną strefę wsparcia w okolicy 1,0680–1,0720 (kilkukrotne odbicia w ciągu ostatniego roku). Rysujesz prostokąt strefy na TradingView, klikasz prawym → „Add Alert on EUR/USD". Ustawiasz: „cena wchodzi w strefę" → push na telefon. Jednocześnie tworzysz drugi alert: RSI(14) na D1 < 30. Jeśli oba się aktywują w podobnym czasie, otwierasz wykres H4, szukasz formacji odwrócenia (np. pin bar z dolnym knotem wychodzącym poza strefę). Jeśli formacja jest — planujesz wejście. Jeśli nie — czekasz dalej. Cała interakcja z wykresem zajęła 3 minuty od momentu alertu.
9. Backtesting — co testować i jak interpretować wyniki
Backtesting to sprawdzanie, jak twoja strategia zadziałałaby na danych historycznych[1]. Backtest nie mówi, ile zarobisz. Mówi tylko, czy reguła zachowywała się zgodnie z założeniami na danych historycznych. To dużo, ale to nie to samo co przewaga na żywo. Alternatywa — testowanie od razu na żywym koncie — jest po prostu droższa.
Co warto testować
Nie każdy element strategii da się sensownie przetestować na historii. Dobrze poddają się backtestingowi elementy oparte na jednoznacznych, programowalnych regułach:
- Reguły wejścia oparte na wskaźnikach. „Kup, gdy RSI(14) spadnie poniżej 30 na D1 i EMA 50 > EMA 200" — to jest jednoznaczne i programowalne. Nie ma tu miejsca na interpretację.
- Reguły wyjścia i SL/TP. Stały SL 50 pipsów, TP 100 pipsów. Albo trailing stop 2× ATR. Mierzalne, porównywalne.
- Porównanie wariantów. Czy RSI < 30 lepiej działa na D1 czy na H4? Czy SL 40 pipsów daje lepszy profit factor niż SL 60? Backtest odpowie — z zastrzeżeniami, o których za chwilę.
Słabo poddaje się backtestingowi to, co wymaga ludzkiej oceny:
- Price action i formacje świecowe. Pin bar na wsparciu „wygląda przekonująco" — ale algorytmiczna definicja pin bara (knot > 2× ciało, ciało w górnym lub dolnym kwintyle) łapie tylko część przypadków, które doświadczony trader rozpoznaje wzrokiem. Reszta to kontekst, którego algorytm nie widzi.
- Kontekst strukturalny. „Kupuję na końcu fali 2 w impulse Elliotta" — sensowna strategia, ale identyfikacja fali 2 jest subiektywna i bardzo trudna do zakodowania w sposób wiarygodny.
- Decyzje uznaniowe. Doświadczony trader omija setupy, które „technicznie spełniają kryteria, ale coś mu nie gra". Tego nie zaprogramujesz — a jednocześnie to jest często ta różnica, która oddziela zyskowny trading od zyskownego backtestu.
Jakość danych — temat, o którym mało kto mówi
Wynik backtestu jest tak wiarygodny, jak dane, na których go przeprowadzasz. Na Forex to poważna kwestia. Rynek jest zdecentralizowany — dane z twojego brokera mogą się różnić od danych z innego (inne spready, drobne różnice w OHLC). Dane OHLC tracą informację o ruchu ceny wewnątrz świecy: jeśli SL i TP były ciasne, nie wiadomo, co nastąpiło pierwsze — dotknięcie SL czy TP.
Dane tickowe (tick-by-tick) są dokładniejsze, ale cięższe do zdobycia. MT5 Strategy Tester ma tryb „Every tick based on real ticks" — przy ciasnym SL tego warto używać. Osobna kwestia to spread historyczny: wiele backtestów zakłada stały spread, podczas gdy na żywo spread rozszerza się w newsy i w nocy. Strategia świetna ze spreadem 1,5 pipsa na EUR/USD może być stratna, gdy realny spread skacze do 8–12 pipsów[2]. W MT4 Strategy Tester domyślnie ustawia spread „current" (aktualny) — traktuj to jako optymistyczne dolne oszacowanie, nie realny warunek rynkowy. W MT5 tryb „Every tick based on real ticks" używa historycznego, zmiennego spreadu z danych — a osobnym ustawieniem jest model opóźnienia egzekucji, nie spreadu.
Bid/ask vs mid-price. Darmowe dane historyczne (Yahoo Finance, większość darmowych API) podają cenę mid — średnią między bid a ask. Dla tradera detalicznego oznacza to, że backtest zawyża wynik o pełny spread na każdą zamkniętą transakcję: pół spreadu przy wejściu (mid zamiast ask) i pół przy wyjściu (mid zamiast bid). Przy 200 zamkniętych transakcjach rocznie na EUR/USD i spreadzie 1 pipsa to ok. 200 pipsów fantomowego zysku w backteście. Dukascopy Historical Data Feed i TrueFX dają bid/ask oddzielnie — używaj ich. Jeśli testujesz na danych gorszej jakości — traktuj wyniki z dodatkowym marginesem.
Sygnały barclose vs intrabar. W Pine Script sygnał powstaje na zamknięciu tylko wtedy, gdy warunek jawnie tego wymaga (barstate.isconfirmed) i alert stoi na „Once Per Bar Close" — nic nie dzieje się „domyślnie". Część traderów w testach dopuszcza sygnały intrabar — i ich backtest nagle wygląda o 30% lepiej. Powód: intrabar łapiesz każdy dotyk poziomu, nawet jeśli świeca zamknie się w innym miejscu. Na żywo połowa tych sygnałów zniknie, zanim zdążysz kliknąć. Testuj zawsze na zamknięciu świec — chyba że twoja strategia jest intencjonalnie intrabar-based (breakout na pending stop orders).
Koszty swap/rollover w logice EA. Budujesz „darmową maszynkę" do trzymania pozycji przez tygodnie? Algorytm musi uwzględniać ujemne punkty swap, nie tylko spread i slippage. Strategia trend-followingowa na parach egzotycznych (np. short USD/MXN, long USD/TRY) potrafi wygenerować piękny zysk brutto z ruchu cenowego, który po 3–4 tygodniach trzymania jest całkowicie zjadany przez ujemny carry trade. MT5 Strategy Tester uwzględnia swap, jeśli broker go przekazuje do platformy; MT4 bywa kapryśny i wymaga ręcznej weryfikacji tabeli swapów u brokera. W backteście Pythona swap zwykle musisz doliczyć samodzielnie — dla swingów to nie kosmetyka, to realny koszt decydujący o zyskowności netto.
Jak interpretować wyniki
Kluczowe metryki backtestingu:
| Metryka | Co mówi | Na co uważać |
|---|---|---|
| Profit Factor (PF) | Suma zysków / suma strat | Wielu traderów traktuje PF powyżej 1,5 jako punkt wyjścia[1], ale to heurystyka, nie twarda granica. PF > 3 na dużej próbce (200+ transakcji) może być realny — ale na małej próbce (< 100 transakcji) bywa po prostu efektem losowym, nie overfittingiem |
| Max Drawdown | Największy spadek kapitału od szczytu do dołka | Na żywym koncie drawdown często okazuje się głębszy niż w backteście[2]. Planuj z zapasem |
| Win Rate | Procent transakcji zyskownych | Bez kontekstu R:R bezużyteczny. 30% trafień + R:R 1:3 = zyskowna strategia |
| Liczba transakcji | Ile transakcji wygenerował test | Nie ma jednej magicznej liczby — zależy od strategii. Ogólnie: im więcej, tym większa wiarygodność statystyczna. Przy mniej niż 100 transakcjach wnioski traktuj z dużą ostrożnością[5] |
| Sharpe Ratio | Zwrot skorygowany o zmienność | Sharpe > 1 to solidny wynik. Sharpe > 2 na Forex zdarza się — ale wymaga dodatkowej weryfikacji, bo często wynika z dopasowania parametrów do danych[6] |
Przykład: źle zrobiony backtest i jak go poprawić
Typowy proces optymalizacji wygląda tak. Testowana jest strategia: „kup, gdy RSI(14) < 30 na D1 na EUR/USD, SL 50 pipsów, TP 150 pipsów", na danych z lat 2020–2025; optymalizowane są: próg RSI (wartości 10–30), SL (30–80 pipsów) i TP (80–200 pipsów). Wybrana zostaje kombinacja RSI=22, SL=43, TP=167 — bo ma najwyższy profit factor: 2,8 (wartości ilustracyjne).
Problem: przetestowano dziesiątki kombinacji na tych samych danych i wybrano najlepszą. Strategia ma 3 optymalizowane parametry, a najlepsza kombinacja wygląda podejrzanie „unikalna" — drobna zmiana parametrów drastycznie pogarsza wyniki. To klasyczny overfitting.
Jak poprawić: dane dzieli się na okres treningowy (2020–2023) i testowy (2024–2025); optymalizuje wyłącznie na treningowych, a wybraną kombinację sprawdza na testowych — ani razu wcześniej. Formalizacją tego procesu jest walk-forward: okno treningowe i testowe przesuwają się krocząco przez historię, a strategia musi bronić się w każdym kolejnym oknie, nie w jednym. Jeśli profit factor na danych testowych spada z 2,8 do 0,9, strategia jest dopasowana do przeszłości, nie do rynku.
Zapamiętaj: backtest zwykle pokazuje warunki lepsze niż egzekucja na żywo, chyba że bardzo rygorystycznie modelujesz koszty i jakość wykonania. Na żywym koncie dochodzi slippage, requote'y zjadają R:R, a twoja psychologia po serii pięciu strat wyłącza algorytm dokładnie przed falą największych zysków. Strategia z max drawdownem 15% w backteście na żywo często okazuje się głębsza[2] — zakładaj margines bezpieczeństwa.
Zanim wrzucisz strategię na żywe konto, przetestuj ją forward: na koncie demo lub mikro-koncie z realnymi warunkami rynkowymi, przez minimum 2–3 miesiące (lepiej 6) i na reprezentatywnej liczbie transakcji. Forward test może ujawnić dopasowanie do przeszłości — bo przyszłości jeszcze nie znasz — choć go nie eliminuje: krótka próba i pojedynczy reżim rynku nadal ograniczają wnioski. Jeśli wyniki forward testu są dramatycznie gorsze od backtestingu — strategia jest prawdopodobnie overfitted, a piękna equity curve z backtestu to artefakt, nie przewaga.[1]
Jeśli twój backtest ma 150 transakcji z profit factor 1,8, symulacja Monte Carlo (przetasowanie kolejności trade'ów 1000 razy) pokaże rozkład możliwych drawdownów przy tej samej próbie transakcji. To scenariusze warunkowe — przetasowanie nie modeluje zmiany rozkładu ani klasteryzacji zmienności — ale skutecznie leczy z przywiązania do jednej historycznej ścieżki equity. Narzędzia w pandas/Python (np. vectorbt) robią to natywnie; w MT5 musisz najczęściej wyeksportować wyniki do arkusza i policzyć ręcznie (prosty wariant przetasowania → symulator w dziale Narzędzia). Praktyczne użycie: porównaj 95. percentyl drawdownu z maksymalnym limitem straty ustalonym PRZED testem — jeśli rozkład regularnie przekracza twój limit, zmniejsz ryzyko na transakcję albo odrzuć strategię jako niedopasowaną do własnej tolerancji.
10. Python w screeningu i backtestingu
Python nie jest już narzędziem wyłącznie dla kwantów — prosty screener i pipeline alertowy da się dziś postawić detalicznie bez dużej infrastruktury. Techniczny próg wejścia jest niski: pandas, wrapper brokerskiego API i VPS za kilkadziesiąt złotych miesięcznie wystarczą do startu. Ale utrzymanie poprawnego pipeline'u danych i egzekucji nadal wymaga dyscypliny technicznej — aktualizacji wrapperów, monitorowania błędów API, świadomego zarządzania ryzykiem w kodzie.
Co daje Python, czego nie dają TradingView ani MT4/MT5:
- Dowolne źródło danych. Możesz pobierać dane z API brokerów (OANDA, Interactive Brokers), darmowych źródeł (yfinance dla indeksów, ccxt dla krypto) lub płatnych dostawców. Nie jesteś ograniczony do tego, co oferuje platforma.
- Zaawansowana analiza statystyczna. Testy istotności, korekta Bonferroniego przy wielokrotnych porównaniach, wizualizacja rozkładów zwrotów — to rzeczy, które w Pine Script są albo niemożliwe, albo bardzo niewygodne. W Pythonie z bibliotekami scipy i statsmodels to kilka linijek kodu.
- Elastyczność backtestingu. Biblioteki backtrader i vectorbt pozwalają testować strategie portfelowe (wiele par jednocześnie), strategie z dynamiczną alokacją kapitału, strategie z korelacjami między instrumentami. Pine Script i MQL mają tu ograniczenia.
- Pipeline od screeningu do egzekucji. Cały workflow — pobranie danych, screening, generowanie sygnałów, wysyłanie alertów (e-mail, Telegram), a nawet egzekucja zleceń przez API brokera — może działać w jednym skrypcie.
- Analiza sentymentu. Niektórzy traderzy eksperymentują z automatyczną analizą sentymentu z wiadomości i raportów ekonomicznych, włączając ten sygnał do pipeline screeningowego. Narzędzia do tego istnieją (od prostych skryptów po API modeli językowych), ale w praktyce detalicznej to wciąż raczej eksperyment niż gotowe rozwiązanie.
Minimalny screener RSI w Pythonie — szkielet kodu z OANDA API:
import pandas as pd
from oandapyV20 import API
from oandapyV20.endpoints import instruments
api = API(access_token='TWÓJ_TOKEN_OANDA', environment='practice')
pairs = ['EUR_USD', 'GBP_USD', 'USD_JPY', 'AUD_USD', 'NZD_USD']
for p in pairs:
# domyslnie OANDA zwraca swiece mid, a dobe D wyrownuje do 17:00 America/New_York
# (dailyAlignment/alignmentTimezone) — ustaw jawnie, jesli potrzebujesz innej konwencji
params = {'count': 100, 'granularity': 'D'}
r = instruments.InstrumentsCandles(instrument=p, params=params)
api.request(r)
candles = [c for c in r.response['candles'] if c['complete']]
close = pd.Series([float(c['mid']['c']) for c in candles]) # mid; do live użyj bid/ask
delta = close.diff()
# zblizenie RSI Wildera: RMA przez ewm(alpha=1/14, adjust=False); rolling().mean()
# daloby prosta srednia i inne wartosci. Uwaga: bez SMA-seedu z pierwszych 14 zmian
# poczatkowe wartosci moga minimalnie odbiegac od platform; przy 100 swiecach
# roznica na koncu serii jest pomijalna
gain = delta.clip(lower=0).ewm(alpha=1/14, adjust=False).mean()
loss = (-delta.clip(upper=0)).ewm(alpha=1/14, adjust=False).mean()
rsi = 100 - (100 / (1 + gain / loss))
if rsi.iloc[-1] < 30:
print(f"{p}: RSI = {rsi.iloc[-1]:.1f} — w wyprzedaniu")
Jeśli chcesz źródło bez zakładania konta brokerskiego, alternatywy to ccxt (świetne do krypto, mniej do spot FX) albo historyczne tickowe dane Dukascopy/TrueFX jako pliki CSV. Nie używaj Yahoo Finance (yfinance) do intraday FX — to źródło nadaje się do akcji i indeksów, ale dla par walutowych zwraca dane z opóźnieniem, bez bid/ask i z brakami dla par egzotycznych.
Python daje pełną kontrolę, ale każdy błąd w logice backtestu albo w pętli egzekucji staje się błędem finansowym, nie tylko programistycznym. Źle napisana pętla retry potrafi wysłać 50 duplikatów zlecenia do API brokera, zanim zdążysz wcisnąć Ctrl+C. Jeśli nigdy nie pisałeś w Pythonie, zacznij od Pine Script — da ci 80% tego, czego potrzebujesz, za 20% wysiłku.
while True. Scenariusz na przykładzie bota z logiką uśredniania strat (Martingale): brak twardego limitu iteracji i brak exponential backoff w pętli retry przy błędzie HTTP 503. O 3:00 nocy broker robił przerwę techniczną serwerów. Bot, nie mogąc odczytać stanu pozycji, zaczął zapętlać zlecenia BUY co 100 ms, nie czekając na potwierdzenie. Efekt: rano na rachunku kilkadziesiąt otwartych pozycji na EUR/TRY rozłożonych na szczycie nocnego swingu i wezwanie do uzupełnienia depozytu (przykład ilustracyjny mechanizmu). Wnioski operacyjne: (1) zawsze używaj rate limiting po stronie klienta — np. max 1 req/s; (2) implementuj idempotency keys (klucz żądania rozpoznawany przez API brokera, który chroni przed duplikacją); (3) po błędzie serwera rób exponential backoff (1 s → 2 s → 4 s → 8 s → przerwanie) z twardym limitem 5–8 prób; (4) nigdy nie pisz pętli while True wysyłającej zlecenia handlowe bez wyłącznika awaryjnego (kill-switch). Bez ograniczenia częstości żądań i wykładniczego odczekiwania pętla retry potrafi wysłać dziesiątki duplikatów, zanim ktokolwiek zauważy.
11. Pułapki automatyzacji
Automatyzacja oszczędza czas i redukuje błędy emocjonalne — ale wprowadza własne problemy. Zbiorcza mapa pułapek backtestu wygląda tak; kolejne podsekcje rozwijają najważniejsze z nich:
| Pułapka | Mechanizm | Jak ograniczyć |
|---|---|---|
| Ceny mid zamiast bid/ask | Mid pomija ~pół spreadu na każde wykonanie — pełny spread na zamkniętą transakcję (wejście + wyjście) | Dane bid/ask (Dukascopy, TrueFX); koszty jawnie w teście |
| Stały spread | Na żywo spread rozszerza się w publikacje i w nocy | Real ticks w MT5; osobny test okien podwyższonego spreadu |
| Pominięty poślizg i prowizja | Wynik netto niższy niż brutto, szczególnie na niskich TF | Modeluj poślizg konserwatywnie; licz prowizję w R |
| Look-ahead | Sygnał używa danych niedostępnych w chwili decyzji (close tworzącej się świecy, swing z przyszłości) | Tylko zamknięte świece; reakcja od następnego ticku/otwarcia |
| Overfitting | Parametry dopasowane do szumu konkretnej historii | Mało parametrów; out-of-sample; walk-forward |
| Data snooping | Z 50 wariantów „coś" musi wyjść dobrze losowo | Liczba prób jawna; korekta statystyczna; nowa próba danych |
| Survivorship bias | Widzisz tylko systemy, które przetrwały | Oceniaj proces, nie wyselekcjonowane wyniki |
| Repainting | Wskaźnik przerysowuje zamkniętą historię | Forward test wskaźnika; unikanie ZigZag-podobnych w regułach |
| Pominięty swap | Koszt utrzymania pozycji zjada wynik swingów | Uwzględnij punkty swapowe; test na danych z kosztami |
Overfitting (dopasowanie do przeszłości)
Overfitting nie wymaga błędu — wystarczy suwak optymalizacji i skończona liczba danych. System „zapamiętuje" przeszłość zamiast wychwytywać powtarzalne wzorce. Objaw: piękna equity curve w backteście, strata od pierwszego dnia na żywo.
Sygnały ostrzegawcze overfittingu:[5]
- Strategia ma wiele swobodnych parametrów w stosunku do liczby transakcji i dostępnej historii.
- Drobna zmiana parametru (RSI 14 → RSI 15) drastycznie zmienia wyniki — tzw. „kruchość" (fragility).
- Backtest na jednym okresie daje świetne wyniki, na innym — stratę.
- Podejrzanie wysokie metryki (PF > 3, Sharpe > 2) przy małej próbce (< 100 transakcji) — częściej efekt losowy niż prawdziwa przewaga. Przy dużej próbce (500+) takie wyniki nie są wykluczone, ale wymagają rygorystycznej walidacji out-of-sample.
Lekarstwem jest testowanie out-of-sample: dzielisz dane na część treningową (np. 2018–2022) i testową (2023–2025). Optymalizujesz na danych treningowych, sprawdzasz na testowych. Jeśli wyniki się rozjeżdżają — strategia jest dopasowana do konkretnej historii, nie do rynku. Pardo[1] szczegółowo opisuje walk-forward analysis, które formalizuje ten proces.
Data snooping (podglądanie danych)
Przetestowałeś 50 wariantów strategii na tych samych danych i wybrałeś ten z najlepszymi wynikami. Problem: przy 50 próbach na tych samych danych coś musi wypaść dobrze — statystycznie. To nie jest odkrycie „działającej" strategii, to efekt losowy. Aronson[5] i Lopez de Prado[6] poświęcają temu problemowi całe rozdziały i nie bez powodu — to pułapka, w którą wpadają nawet doświadczeni traderzy.
Rozwiązanie: jeśli testujesz wiele wariantów, stosuj korektę statystyczną (Bonferroni, White's Reality Check) lub przynajmniej bądź świadomy, że wynik z 50. próby jest wielokrotnie mniej wiarygodny niż wynik z pierwszej.
Survivorship bias w gotowych EA
Na forach widzisz EA z equity curve rosnącą pod 45°. Nie widzisz tysięcy EA wycofanych ze sprzedaży, bo zbankrutowały[10]. To survivorship bias — dotyka też strategii publikowanych przez influencerów: kto chwalił się 300% w 2024, zwykle milczy o -80% w 2025.
Iluzja kontroli
Im bardziej system jest „automatyczny", tym mniej trader monitoruje, co się dzieje. EA handluje przez noc, spread na USD/TRY rozszerza się do 15 pipsów o 3:00, poślizg zjada 3 stopy z rzędu — a trader dowiaduje się rano. EA nie jest pasywnym dochodem — wymaga monitoringu i okresowej walidacji na bieżących danych.
if (spread > max_spread) { return; } przed każdą funkcją otwarcia pozycji. Klucz: max_spread nie powinno być sztywną liczbą dla wszystkich par — na EUR/USD 5 pipsów to anomalia, na USD/TRY czy na egzotykach to normalny dzień. Sensowna implementacja: max_spread = k × ATR(14, TF_wejścia) albo max_spread = 0,15 × odległość_do_SL. Dodatkowy bezpiecznik: max_slippage przy składaniu zlecenia i awaryjne zamykanie wszystkich pozycji przy przekroczeniu global_drawdown_cap (np. 10% kapitału w tydzień). EA bez tych trzech warunków to EA w wersji beta, niezależnie od tego, co pokazuje backtest.Czarna skrzynka
Jeśli nie rozumiesz, dlaczego twój system zarabia, nie wiesz, kiedy przestanie. Kupiony EA bez dokumentacji logiki to czarna skrzynka — a rynki zmieniają charakter[10], więc prędzej czy później trzeba będzie zdecydować, czy zmienić parametry, wyłączyć system, czy przeczekać.
Wskaźniki repaintujące
Część wskaźników zmienia swoje historyczne wartości po pojawieniu się nowych świec — to tzw. repainting. Na wykresie historycznym wyglądają perfekcyjnie (każdy sygnał „trafiony"), ale w czasie rzeczywistym sygnał może się pojawić i zniknąć, zanim zdążysz zareagować. Dotyczy to np. ZigZag i wielu custom indicators z MQL5 Market. Jeśli testujesz wskaźnik — sprawdź go na żywo (forward test) przez przynajmniej kilka tygodni, zanim zaczniesz mu ufać w backtestach.
Prop Firmy a automatyzacja
Jeśli handlujesz na koncie prop firm, sprawdź aktualny regulamin zanim włączysz EA. Wiele firm zabrania pełnej automatyzacji, traktując ją jako naruszenie zasad — ale jednocześnie pozwala na screenery, alerty i pół-automatyczne wskaźniki. Zasady różnią się między firmami i potrafią się zmieniać, więc nie polegaj na cudzych podsumowaniach: czytaj regulamin sam. Podłączenie EA bez sprawdzenia to ryzyko utraty konta i zysku.
12. Czego nie automatyzować na początku
Pokusa „pasywnego dochodu" z EA jest silna, ale skok od zera do pełnej automatyzacji kończy się zwykle stratą — i to nie z powodu złego kodu, tylko braku fundamentów. Co lepiej robić ręcznie na początku:
- Zarządzanie pozycją. Wielkość pozycji, przesuwanie SL, częściowe zamykanie — to są decyzje, które wymagają kontekstu i oceny sytuacji. EA zrobi dokładnie to, co mu każesz, ale „dokładnie to, co mu każesz" i „to, co powinieneś zrobić w danej chwili" to często dwie różne rzeczy. Ucz się zarządzać pozycją ręcznie, zanim zautomatyzujesz.
- Interpretacja kontekstu makro. Screener nie wie, że za godzinę jest NFP (Non-Farm Payrolls) i spready zaraz się rozszerzą trzykrotnie. Nie wie, że bank centralny zmienił retorykę. Tego typu kontekst musisz dodawać sam.
- Wybór par do handlu. Screener pomaga je filtrować, ale finalna selekcja — zwłaszcza na początku — powinna być twoja. Dzięki temu uczysz się, co działa na różnych parach, jakie mają charakterystyki (np. że GBP/JPY jest dużo bardziej zmienny niż EUR/CHF) i rozwijasz intuicję, której później nie zastąpi żaden algorytm.
- Trzymanie pozycji przez weekend z dźwignią i bez zabezpieczenia. Nigdy nie pozwalaj EA handlować przez weekend na krzyżówkach z dźwignią, jeśli nie masz zabezpieczenia (redukcja lotu, opcje, twardy spread filter przy niedzielnym otwarciu). Black swan events — weekendowy komunikat banku centralnego, referendum, interwencja walutowa, geopolityka — otwierają niedzielę lukami, których stop loss nie obsłuży po deklarowanej cenie. Historia zna dziesiątki przypadków, gdzie „bezpieczny system z max DD 8%" po weekendzie miał −40% lub więcej.
- Otwieranie pozycji bez kontroli Free Margin (margin stop-out blindness). Większość kupionych EA nie monitoruje dostępnego depozytu zabezpieczającego. Kiedy rynek wpada w spiralę i korelacje konwergują do +1 (jak w scenariuszach flash-crashowych), bot dalej otwiera pozycje grid albo uśrednia stratne zlecenia — aż do momentu, w którym broker automatycznie zamyka najcięższą pozycję z powodu wykroczenia poza poziom margin stop-out. Twardy warunek przed każdym otwarciem pozycji — w MQL4:
if (AccountFreeMarginCheck(Symbol(), OP_BUY, loty) <= 0) return;, w MQL5: porównanie wynikuOrderCalcMargin()zAccountInfoDouble(ACCOUNT_MARGIN_FREE)(schemat do adaptacji, nie gotowy kod).
Automatyzuj to, co jest tępe, żmudne i powtarzalne: skan, filtr, alert. Automatyzacja nie poprawia reguły — powiela ją szybciej, razem z błędami. Automatyzację rozwijaj etapami; pełna auto-egzekucja bez zrozumienia procesu zwykle kończy się stratą szybciej niż handel ręczny.
13. Narzędzia — porównanie
| Narzędzie | Język skryptowy | Screening | Alerty | Backtesting | Auto-egzekucja | Koszt (orientacyjnie) |
|---|---|---|---|---|---|---|
| TradingView (Free) | Pine Script | Tak (Forex screener) | Kilka jednocześnie | Pine Script strategy() | Nie (webhook do API) | 0 USD |
| TradingView (Essential–Ultimate) | Pine Script | Tak (zaawansowane filtry) | 20–1000 w zależności od planu | Pine Script strategy() | Webhook + API brokera lub natywna integracja brokerska | wg aktualnego cennika |
| MT4 | MQL4 | Własne wskaźniki (custom indicators) | Tak (popup, push, email) | Strategy Tester (1 symbol) | Expert Advisors | 0 USD (od brokera) |
| MT5 | MQL5 | Własne wskaźniki | Tak (popup, push, email) | Strategy Tester (multi-currency) | Expert Advisors | 0 USD (od brokera) |
| cTrader | C# | Ograniczony | Tak | cTrader Automate | cBots | 0 USD (od brokera) |
| Python | Python | Pełna elastyczność | Własne (e-mail, Telegram, push) | backtrader, vectorbt, własny | Przez API brokera (OANDA, IBKR) | 0 USD (open source) |
Koszty i limity orientacyjne — zmieniają się; aktualne wartości sprawdzaj w cennikach dostawców. MT4/MT5 i cTrader dostarczane bezpłatnie przez brokerów.
- Interwał główny: D1 — na nim screenujesz i analizujesz. Kontekst bierzesz z W1.
- Watchlista: 8–12 par do screeningu, z czego 2–5 trafia na bieżącą watchlistę w danym tygodniu.
- 2 filtry screeningowe: EMA 200 (kierunek trendu) + RSI 14 (momentum). Proste, a odsiewają większość szumu.
- 1 typ alertu na start: cenowy, na strefach S/R z tygodniówki. Później dodasz wskaźnikowe.
- 0 EA na starcie. Naucz się najpierw handlować ręcznie z pomocą screenera i alertów. Robot przyjdzie później — i prawdopodobnie wcale nie jest ci potrzebny.
- Obowiązkowy forward test po każdym backteście. Minimum 2–3 miesiące na demo — i reprezentatywna liczba transakcji — zanim wrzucisz strategię na żywe konto.
Wielkość pozycji — poza zakresem tego artykułu
Selekcja setupu bez prawidłowego rozmiaru pozycji to połowa roboty — ale wzory, ujęcie kosztów w budżecie ryzyka i przykłady liczbowe należą do działu 9. Interaktywny kalkulator wielkości pozycji oraz symulator Monte Carlo znajdziesz w dziale Narzędzia.
FAQ — Automatyzacja i screening w AT
Czy potrzebuję umieć programować, żeby korzystać ze screeningu?
Nie. Wbudowane screenery TradingView i dashboardy MT4/MT5 działają na zasadzie „klikasz filtry, ustawiasz progi, dostajesz listę". Pine Script i MQL dodają możliwości (własne warunki, złożone alerty), ale podstawowy screening nie wymaga pisania kodu.
Czy warto kupić gotowy Expert Advisor (EA)?
Z dużą ostrożnością. Rynek gotowych EA jest pełen produktów overfitted — piękny backtest, katastrofa na żywo. Jeśli rozważasz zakup: szukaj forward testu na Myfxbook z potwierdzoną historią, sprawdź niezależne recenzje i upewnij się, że rozumiesz logikę systemu. EA, którego nie rozumiesz, to czarna skrzynka.
Ile alertów powinienem mieć ustawionych jednocześnie?
Zależy od stylu, ale 5–15 alertów jednocześnie to rozsądny zakres dla swing tradera. Zbyt mało — możesz przegapić okazję. Zbyt dużo — dostajesz powiadomienia co godzinę i zaczynasz je ignorować (i to jest gorsze niż brak alertów, bo daje fałszywe poczucie, że „monitorujesz rynek"). Ustawiaj alerty na parach z watchlisty, nie na całym rynku.
Jak wiarygodny jest backtest na Forex?
Backtest daje ci dolną granicę problemów — na żywo zwykle dochodzą koszty i ograniczenia, których prosty test nie odtwarza (poślizg, rozszerzające się spready, psychologia). Wiarygodność zależy mocno od jakości danych: test na danych tickowych z uwzględnieniem zmiennego spreadu jest dużo bardziej miarodajny niż test na danych OHLC H1 ze stałym spreadem. Traktuj backtest jako test logiki, nie prognozę zysków. Forward test uzupełnia backtest o rzeczywiste warunki działania — ale jego wartość zależy od liczby transakcji, długości próby i liczby objętych reżimów rynkowych, nie od samego upływu czasu.
TradingView czy MT4/MT5 do screeningu?
TradingView i MT nie konkurują o to samo. TradingView jest wygodniejszy do filtrowania i alertów (screener w chmurze, alerty push bez konieczności trzymania platformy otwartej, Pine Script). MT4/MT5 wciąż dominuje do egzekucji zleceń u wielu brokerów. Przestań szukać jednej platformy do wszystkiego — wielu traderów ma analiza + alerty w TradingView, a egzekucja w MT4/MT5, i to jest OK.
Czy Python jest lepszy do backtestingu niż Pine Script?
Python (backtrader, vectorbt, pandas) daje większą elastyczność: dowolne dane, pełna kontrola, zaawansowana analiza statystyczna. Pine Script jest prostszy i wystarczy dla większości strategii opartych na wskaźnikach. Jeśli umiesz programować — masz więcej możliwości. Jeśli nie — Pine Script pokryje większość potrzeb.
Czy muszę odpalać screener codziennie?
Nie — jeśli jesteś swing traderem na D1, wystarczy rano w poniedziałek (pełny scan) i szybkie sprawdzenie w środę lub czwartek (czy coś nowego wpadło na radar). Resztę robi za ciebie system alertów ustawionych w poniedziałek. Codzienne odpalanie screenera ma sens przy krótszych interwałach (H4, H1), ale na D1 rynek nie zmienia się na tyle szybko, żeby trzeba było skanować go każdego dnia od nowa.
Źródła
Źródła główne
- Robert Pardo, The Evaluation and Optimization of Trading Strategies, 2nd ed., Wiley, 2008 — metodologia backtestingu, walk-forward analysis, rozpoznawanie overfittingu; kluczowa praca w kontekście walidacji strategii automatycznych.
- Ernest P. Chan, Quantitative Trading: How to Build Your Own Algorithmic Trading Business, 2nd ed., Wiley, 2021 — praktyczny przewodnik po budowaniu strategii ilościowych: od screeningu po egzekucję algorytmiczną.
- Perry J. Kaufman, Trading Systems and Methods, 6th ed., Wiley, 2020 — encyklopedyczne omówienie systemów transakcyjnych: filtry trendowe, screening, testowanie i optymalizacja strategii.
- Andreas F. Clenow, Following the Trend, Wiley, 2013 — systematyczne podejście do tradingu trendowego: screening instrumentów, backtesting portfela, zarządzanie pozycją; praktyczne aspekty automatyzacji.
Lektury uzupełniające
- David Aronson, Evidence-Based Technical Analysis, Wiley, 2007 — statystyczna walidacja metod AT: data mining bias, testy istotności, problem wielokrotnych porównań (data snooping); kluczowa lektura dla każdego, kto testuje strategie.
- Marcos Lopez de Prado, Advances in Financial Machine Learning, Wiley, 2018 — rozdz. 8–11: cross-validation w finansach, feature importance, pułapki backtestingu na danych finansowych.
- Alexander Elder, The New Trading for a Living, Wiley, 2014 — sekcja o automatyzacji: alerty, screenery, rola technologii w procesie decyzyjnym tradera dyskrecjonalnego.
- Kathy Lien, Day Trading and Swing Trading the Currency Market, 3rd ed., Wiley, 2016 — praktyczne aspekty screeningu par walutowych i organizacji workflow na Forex.
- Lukas Menkhoff, Mark P. Taylor, „The Obstinate Passion of Foreign Exchange Professionals: Technical Analysis", Journal of Economic Literature, Vol. 45, No. 4, 2007 — przegląd stosowania AT na Forex; kontekst dla dyskusji o roli automatyzacji wśród profesjonalnych traderów walutowych.
- Andrew W. Lo, Adaptive Markets: Financial Evolution at the Speed of Thought, Princeton University Press, 2017 — hipoteza rynków adaptacyjnych: dlaczego strategie, które działały w przeszłości, mogą przestać działać; implikacje dla automatyzacji i backtestingu.
Źródła instytucjonalne i dokumentacja
- Swiss National Bank (2015), „Swiss National Bank discontinues minimum exchange rate and lowers interest rate to −0.75%", komunikat prasowy, 15.01.2015.
- FCA (2015), „News for customers of Alpari (UK) Limited" — wejście Alpari (UK) w reżim administracji specjalnej.
- BIS Markets Committee (2017), „The sterling ‘flash event’ of 7 October 2016", styczeń 2017 — analiza zdarzenia: cienka płynność, zlecenia, reakcje algorytmów, rozbieżności między platformami.
- TradingView, Pine Script Docs — oficjalna dokumentacja języka: zachowanie skryptów na świecy bieżącej i zamkniętej (barstate), alerty, strategy().
- MetaQuotes, MQL5 Reference — oficjalna dokumentacja MQL5: wskaźniki, Expert Advisors, Strategy Tester.
- ESMA (2018), „ESMA agrees to prohibit binary options and restrict CFDs to protect retail investors", 27.03.2018 — pakiet interwencji produktowej: limity dźwigni, ochrona przed saldem ujemnym, ostrzeżenia o ryzyku; analizy nadzorów wskazywały 74–89% stratnych rachunków detalicznych CFD.