EN
Artykuły / 13.3 AI w tradingu
AI w tradinguszkic

Przeniesienie wskaźnika z Pine Script do MQL5

14.11.20264 min czytania

W skrócie: wskaźnik z TradingView da się przenieść do MT5 prawie linia po linii, ale cztery miejsca psują zgodność: kolejność indeksów, godziny w innej strefie, wyższy interwał (request.security) i różnica między świecą w toku a zamkniętą. Port jest udany dopiero wtedy, gdy strzałki na obu platformach pojawiają się na tych samych świecach.

Od czego zacząłem

Miałem wskaźnik w Pine Script: kanał z SMA liczonej z High i Low, EMA, Parabolic SAR, potwierdzenie kanałem SMA z wyższego interwału i strzałki BUY/SELL na zamkniętej świecy. Chciałem go w MT5, bo tylko tam może go czytać bot. Port robiłem z Claude Code, a kod Pine i MQL5 leżą obok siebie w repo (Indicators\botytradingowe\), więc można je porównać. Sygnał działa tak: zmiana strony SAR uzbraja wejście, a przez kilka kolejnych świec czekam na momentum (zamknięcie poprzedniej świecy za ekstremum jej poprzedniczki). Linie kanału i EMA muszą przy tym opadać (sprzedaż) albo rosnąć (kupno).

Odpowiedniki funkcji

Samą matematykę wskaźników przeniosłem do gotowych funkcji MT5. Tu nie ma ryzyka.

Pine Script MQL5
ta.sma(high, 50) i ta.sma(low, 50) iMA z ceną High i Low, tryb SMA
ta.ema(close, 34) iMA w trybie EMA, cena zamknięcia
ta.sar(start, krok, max) iSAR
hour(time, strefa) godzina z czasu serwera
request.security(...) uchwyty iMA na wyższym interwale i iBarShift
barstate.isconfirmed liczenie tylko na zamkniętej świecy

W MQL5 wartości kopiuje się do tablic z uchwytów, więc cały wskaźnik to głównie CopyBuffer i pętla po świecach.

Cztery miejsca, w których port się rozjeżdża

1. Kierunek indeksów. W Pine close[1] to poprzednia świeca, a indeks rośnie w przeszłość. W kopiowanych tablicach MT5 indeks zależy od tego, czy tablica jest szeregiem. Przy pętli od starych świec do nowych przeliczam indeks, na przykład k = rates_total - 1 - i. Pomyłka o jedną świecę nie wywołuje błędu, tylko przesuwa wszystkie strzałki.

2. Godziny. Pine bierze godzinę w wybranej strefie (u mnie domyślnie Londyn). W MT5 okno godzin liczę w czasie serwera brokera, co oznacza inne godziny na brokerach ze zmianą czasu wg USA i wg Europy. Szczegóły w artykule o zmianie czasu. Przy porównaniu z TradingView ustaw tam strefę serwera, nie Londyn.

3. Wyższy interwał. Pine pobiera go przez request.security, a wartość świecy HTF z [1] jest wartością zamkniętej świecy. W MT5 zamienia się to na pobranie wartości o jedną świecę HTF wstecz i dopasowanie świec bieżącego wykresu do świec HTF przez iBarShift. Gdy weźmiesz bieżącą, niezamkniętą świecę HTF, wskaźnik repainuje: sygnał, który widziałeś, znika po zamknięciu świecy HTF. Ten sam błąd wychodzi na backteście jako zbyt dobry wynik.

4. Świeca w toku. W Pine pilnuje tego barstate.isconfirmed. W MT5 strzałkę wyznaczam tylko dla zamkniętych świec, a przy odświeżaniu przeliczam kilka ostatnich, żeby nie zostawić śmieci po pierwszym tiku. Szczegóły różnic Testera i live opisuje artykuł o rozjazdach w kodzie bota.

Bufory dla bota

Cel portu był praktyczny: bot ma czytać wskaźnik przez iCustom. Z tego wynikają dwa wymagania. Poziomy SL i sygnały wyjścia wystawiam w osobnych buforach (bez rysowania), a parametry wskaźnika muszą mieć stabilną kolejność. Dlatego wskaźnik celowo nie ma grup inputów: grupy zmieniają kolejność parametrów przekazywanych do iCustom, więc bot dostałby inne ustawienia, niż myślisz. Szerzej o tym, co robi AI w kodzie bota, piszę w artykule AI pisze bota MT5.

Jak sprawdzić, że port jest wierny

  1. Wybierz jeden symbol i interwał oraz okres kilku tygodni.
  2. Wyeksportuj z TradingView godziny i ceny strzałek, a z MT5 odczyt z buforów (skrypt, nie ręcznie).
  3. Porównaj listy. Brak strzałki po jednej stronie to zwykle indeks, godzina lub HTF.
  4. Dopiero potem puść bota w Testerze.

[DO UZUPEŁNIENIA: ile rozjazdów (strzałek) wyszło przy pierwszym porównaniu i co je powodowało]

Checklista

  • odpowiedniki funkcji sprawdzone (cena High/Low, tryb średniej),
  • kierunek indeksów przetestowany na liście strzałek,
  • strefa godzin w TradingView ustawiona na serwer brokera,
  • HTF z ostatniej zamkniętej świecy,
  • strzałki tylko na zamkniętych świecach,
  • bufory dla bota bez grup inputów,
  • porównanie listy sygnałów TradingView i MT5 przed testem bota.

Powiązane

Ostrzeżenie: handel CFD i forex wiąże się z wysokim ryzykiem utraty kapitału. Artykuł ma charakter edukacyjny i nie jest rekomendacją inwestycyjną.

Dalej w rozdziale

164

MCP w MT5: asystent AI może zamknąć pozycję nawet przy wyłączonym Algo

Build 6316 terminala MT5 ma wbudowany serwer MCP z ponad 100 narzędziami, w tym handlem. Sprawdziłem na demo, co może zamknąć pozycje przy wyłączonym Algo Trading i jakie ustawienie to pilnuje.

314

AI pisze bota w MQL5: co działa, a co trzeba pilnować

Claude Code pisze i poprawia moje boty MT5. Bez zasad robi typowe błędy: dokłada kod na zapas, zgaduje, rusza pliki obok. Jak je ograniczam regułami w repo i skryptem kontrolnym.

317

AI jako analityk wyników backtestu: co mu oddaję, a co sprawdzam sam

Agent AI szybko zestawia wyniki testów, ale potrafi je też pewnie zinterpretować źle. Opisuję reguły, które narzuciłem: liczby tylko z pliku, wynik z wersją i ustawieniem, tabela top 10, test rok po roku.

318

Agent AI uruchamia testy w MT5: jak sprawdzić, czy test się naprawdę wykonał

Gdy Claude Code odpala backtesty za mnie, największe ryzyko to cichy błąd: stary wynik zamiast nowego, test, który się nie wystartował, mieszanka przebiegów w jednym logu. Jak to zabezpieczam.

319

Python i AI: skrypty do analizy wyników MT5, które zastąpiły arkusz

Zamiast ręcznie przepisywać wyniki z Testera do arkusza, mam skrypty w Pythonie pisane z agentem AI: baza wyników, porównanie dwóch przebiegów, sprawdzanie danych brokera. Jak do tego doszedłem i na co uważać.

320

Wskaźniki na TradingView w Pine Script: wskaźnik, strategia i alerty

Czym różni się wskaźnik od strategii w Pine Script, jak działają alerty i na co uważać w backteście TradingView, żeby wynik był porównywalny z MT5.