Przeniesienie wskaźnika z Pine Script do MQL5
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
- Wybierz jeden symbol i interwał oraz okres kilku tygodni.
- Wyeksportuj z TradingView godziny i ceny strzałek, a z MT5 odczyt z buforów (skrypt, nie ręcznie).
- Porównaj listy. Brak strzałki po jednej stronie to zwykle indeks, godzina lub HTF.
- 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
- AI pisze bota MT5: co działa, a co trzeba pilnować
- Python i AI: skrypty do analizy wyników MT5
- Kodowanie plików MQL5: UTF-8 kontra UTF-16
- Pojęcia z artykułu: słowniczek, skorowidz
Ostrzeżenie: handel CFD i forex wiąże się z wysokim ryzykiem utraty kapitału. Artykuł ma charakter edukacyjny i nie jest rekomendacją inwestycyjną.