Codziennie na lokalnych czatach algotraderów pojawia się kolejny „święty graal”. Scenariusz zawsze jest taki sam: ktoś prosi ChatGPT o napisanie wskaźnika lub gotowego bota, sieć neuronowa wypluwa kilkaset linijek kodu, TradingView pokazuje fantastyczne 800% rocznie przy minimalnym drawdownie, a po próbie odpalenia tego cudeńka na realnym koncie depozyt paruje w trzy sesje handlowe. Albo jeszcze prościej: kod po prostu odmawia kompilacji, bo terminal krzyczy o zmiennych, które nigdy w życiu nie istniały.
Jeśli chociaż raz próbowałeś zautomatyzować swoją strategię przez sieci neuronowe, na pewno zderzyłeś się z tym problemem. Odłóżmy podręcznikową teorię i rozbierzmy na czynniki pierwsze, dlaczego modele językowe stale wymyślają nieistniejącą składnię, jak wyłapywać te halucynacje i jak zmusić AI do wydania działającego kodu zamiast wizualnych złudzeń.
Błąd architektoniczny: dlaczego AI zmyśla Pine Script
ChatGPT nie kompiluje kodu. Nie rozumie matematyki, nie wie, jak działa silnik TradingView i nie potrafi myśleć kontekstem wykonania. Model językowy po prostu przewiduje kolejny najbardziej prawdopodobny token na podstawie zbioru danych, na którym został przeszkolony.
I tutaj tkwi największy haczyk. Do danych treningowych sieci neuronowej trafiła dzika mieszanka:
- Prastare skrypty w Pine Script v2, v3 i v4, które dawno wyszły z użycia i powodują błędy w nowoczesnym terminalu.
- Tysiące niestandardowych bibliotek z GitHub, gdzie autorzy bezczelnie nadpisali funkcje bazowe.
- Kawałki kodu w Pythonie, C++ i MQL5.
Kiedy prosisz sieć neuronową: „napisz adaptacyjny RSI z dynamicznymi strefami wykupienia”, model bierze znaną sobie nazwę funkcji z Pythona, miesza ją ze starą składnią Pine Script v3, dodaje ładny prefiks ta. i wyrzuca konstrukcję typu ta.optimized_rsi().
Dla sieci neuronowej wygląda to spójnie i logicznie. Dla kompilatora TradingView to czysty śmietnik.
Top 4 nieistniejących zmiennych i fatalnych halucynacji ChatGPT
1. Wymyślone wrappery w przestrzeni nazw ta.
W piątej wersji Pine Script wszystkie wskaźniki techniczne zostały przeniesione do modułu ta.. Sieć przyswoiła tę zasadę, ale zaczęła pchać ten prefiks gdzie popadnie.
- Co wymyśla AI: ta.supertrend_indicator(), ta.smart_macd(), ta.volume_accumulator().
- Jak jest w rzeczywistości: Wbudowana funkcja Supertrend zwraca krotkę złożoną z dwóch wartości [value, direction] = ta.supertrend(factor, period), a nie gotowy, ładny wskaźnik w jednej linijce.
2. Spoglądanie w przyszłość przez request.security (Look-ahead Bias)
To najgroźniejszy grzech sieci neuronowych. Wskaźnik maluje kosmiczny zysk na backteście tylko dlatego, że ChatGPT krzywo napisał zapytanie o dane z wyższego interwału.
- Co wymyśla AI: request.security(syminfo.tickerid, "D", close)
- W czym tkwi haczyk: Bez jawnego wskazania parametrów łączenia barów barmerge.lookahead_off, strategia na 5-minutowym wykresie o 10:00 rano już „wie”, po jakiej cenie zamknie się świeca dzienna o 23:59. Na historii daje to 99% zyskownych transakcji. Na prawdziwym rynku to natychmiastowe wyczyszczenie konta, bo przyszłość w danym momencie nie jest znana nikomu.
3. Wymyślanie nieistniejących właściwości zleceń w strategy.entry
Podczas próby skonfigurowania dynamicznej wielkości pozycji ChatGPT regularnie zmyśla argumenty, których nie ma w API.
- Co wymyśla AI: strategy.entry("Long", strategy.long, risk_percent=2.0, max_slippage=3)
- Jak jest w rzeczywistości: Zarządzanie ryzykiem definiuje się albo w adnotacji strategy(), albo oblicza matematycznie przez argument qty. Żaden risk_percent nie istnieje wewnątrz samego wywołania zlecenia.
4. Nieistniejące interwały i typy danych
Sieć uwielbia pisać „15m” lub „1h” przy przekazywaniu interwałów do funkcji. Jednak Pine Script rygorystycznie wymaga używania ciągów znaków „15” dla minut oraz „60” lub „240” dla godzin. Detal? Przez to skrypt wyłoży się już na etapie kompilacji.
Wyjaśnienie łopatologiczne: Fantom kontra Działający kod
Żeby raz na zawsze zamknąć temat, spójrz na te dwa przykłady. Pierwszy to typowy „frankenstein”, którego ChatGPT generuje domyślnie. Drugi to czysty, kompilowalny kod w Pine Script v5 z poprawną logiką.
Chłam od ChatGPT (nie kompiluje się i halucynuje):
//@version=5
strategy("AI Hallucination Strategy", overlay=true)
// Błąd 1: funkcja ta.custom_adaptive_rsi nie istnieje w Pine Script
rsi_val = ta.custom_adaptive_rsi(close, 14, 80, 20)
// Błąd 2: błędna sygnatura (ta.supertrend przyjmuje factor oraz atrPeriod, bez source)
// a wynik-krotka został przypisany do pojedynczej zmiennej
st_val = ta.supertrend(close, 3.0, 10)
// Błąd 3: lookahead_on bez przesunięcia [1] - w historii EMA jest pobierana z przyszłości
daily_ema = request.security(syminfo.tickerid, "D", ta.ema(close, 200), barmerge.gaps_off, barmerge.lookahead_on)
if (ta.crossover(rsi_val, 50) and close > daily_ema)
// Błąd 4: strategy.entry nie ma parametru risk_level
strategy.entry("Buy", strategy.long, risk_level=1.5)Działający pro-kod w Pine Script v5:
//@version=5
strategy("Clean Quantitative Strategy", overlay=true, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=10)
// Typowane parametry wejściowe
rsi_len = input.int(14, title="RSI Length", minval=1)
st_factor = input.float(3.0, title="Supertrend Factor", step=0.1)
st_period = input.int(10, title="Supertrend Period", minval=1)
// 1. Standardowy RSI
rsi_val = ta.rsi(close, rsi_len)
// 2. Supertrend zwraca linię oraz kierunek (-1 = trend wzrostowy, 1 = trend spadkowy)
[st_line, st_dir] = ta.supertrend(st_factor, st_period)
plot(st_line, "Supertrend", color = st_dir < 0 ? color.green : color.red)
// 3. Dzienna EMA bez spoglądania w przyszłość i bez przerysowywania:
// wartość poprzedniego ZAMKNIĘTEGO dnia ([1]) + lookahead_on - standardowy bezpieczny wzoriec
daily_ema = request.security(syminfo.tickerid, "D", ta.ema(close, 200)[1], barmerge.gaps_off, barmerge.lookahead_on)
// Sygnały tylko na potwierdzonym (zamkniętym) barze
long_condition = barstate.isconfirmed and ta.crossover(rsi_val, 50) and close > daily_ema and st_dir < 0
short_condition = barstate.isconfirmed and ta.crossunder(rsi_val, 50) and close < daily_ema and st_dir > 0
// Wejście w przeciwnym kierunku automatycznie odwraca pozycję
if (long_condition)
strategy.entry("Long", strategy.long)
if (short_condition)
strategy.entry("Short", strategy.short)Checklista: jak filtrować bzdurny kod od AI
Jeśli używasz sieci neuronowej jako czeladnika do pisania kodu, oto kilka zasad, które zaoszczędzą Ci setki godzin i mnóstwo nerwów:
- Zmuś AI do pisania wyłącznie w Pine Script v5. Jawnie wskazuj w prompcie: „Używaj ściśle Pine Script v5. Zabrania się używania funkcji bez prefiksów ta. i request. Zabrania się wymyślania niestandardowych metod”.
- Szukaj funkcji-widm w Reference Manual. Jeśli widzisz w kodzie nieznaną funkcję typu ta.something(), nie len się wrzucić jej do oficjalnego podręcznika TradingView. W 90% przypadków jej tam nie ma.
- Sprawdzaj request.security. Zawsze patrz na argumenty. Jeśli nie ma tam barmerge.lookahead_off, Twój backtest to piękna bajka, która nie ma nic wspólnego z rzeczywistością.
- Zmuś AI do komentowania każdej linijki. Kiedy sieć neuronowa wyjaśnia logikę konkretnego operatora, rzadziej halucynuje z wymyślonymi nazwami funkcji.
Zarządzanie ryzykiem: gdzie rzeczywistość weryfikuje „neuro-graale”
Nawet jeśli kod od ChatGPT skompilował się idealnie i nie zawiera błędów składniowych, pamiętaj o mechanice rynkowej:
- Poślizg cenowy (slippage) i prowizje. Sieci neuronowe podczas testowania strategii nigdy nie uwzględniają spreadu ani prowizji giełdy. Na 1-minutowym interwale skrypt z 1000 transakcji dziennie pokaże kosmos na papierze, a w rzeczywistości oddasz giełdzie cały depozyt w formie prowizji maker/taker. W ustawieniach strategii zawsze ręcznie uwzględniaj prowizję (minimum 0.05% na transakcję) oraz poślizg rzędu 2–3 ticków.
- Dynamiczny stop loss. Zapomnij o stałych take profitach na poziomie 1% lub 2%. Rynek zmienia zmienność codziennie. Zawsze przypinaj zlecenia ochronne do bieżącej zmienności przez ATR: Stop Loss Price = Entry Price ± (ta.atr(14) × 1.5)
Można i trzeba używać ChatGPT w tradingu, ale wyłącznie jako szybkiego pomocnika składniowego do rutynowych operacji. Gdy tylko oddajesz sieci neuronowej projektowanie samej architektury i logiki wskaźników, masz gwarancję otrzymania zestawu halucynacji, pięknych wykresów z przyszłości oraz zmyślonych funkcji, za które rynek każe Ci potem zapłacić z własnej kieszeni.