- Agent testera nie widzi twoich plików
Tester uruchamia eksperta w osobnym katalogu agenta. Pliki, biblioteki i dane, które działają na wykresie, potrafią tam zniknąć bez sensownego komunikatu.
- Architektura eksperta
Dlaczego ekspert napisany w jednym OnTick nie da się rozwijać ani sprawdzić, i jak go rozdzielić na trzy niezależne części.
- Architektura obsługi błędów
Dwa równoległe światy błędów: lokalne kody wykonania i kody zwrotne serwera. Lepkie błędy w GetLastError, ponawianie z odstępem i decyzja, kiedy się poddać.
- Architektura wielosymbolowa: jeden ekspert zamiast dziesięciu
Dziesięć kopii eksperta na dziesięciu wykresach to antywzorzec. Jak zbudować silnik portfela sterowany z jednego wykresu i czym zastąpić OnTick.
- Buildy MetaTradera i zgodność kodu
MetaQuotes nie publikuje listy nowych funkcji języka. Kod z nowszą funkcją nie skompiluje się starszym edytorem, a preprocesor MQL5 nie pozwala tego obejść.
- Cykl życia obiektów: wirtualne destruktory i wskaźniki po delete
Brak słowa virtual przed destruktorem klasy bazowej sprawia, że destruktor klasy pochodnej nigdy się nie wykona. Plus wskaźniki wskazujące na nieistniejące obiekty i porządek niszczenia w OnDeinit.
- Dziennik, który da się czytać
Print bez dyscypliny daje tysiąc linii, z których nic nie wynika. Poziomy, kontekst w jednej linii i zapis do pliku, który otworzysz w arkuszu.
- Import DLL: Unicode kontra ANSI
Łańcuchy MQL5 są szerokoznakowe, a połowa funkcji WinAPI oczekuje bajtów. Kto odpowiada za bufor i skąd biorą się krzaki.
- Komunikacja między ekspertem a wskaźnikiem
Zmienne globalne terminala, bufory wskaźnika i zdarzenia niestandardowe. Trzy sposoby przekazania danych i ich koszty.
- Numer magiczny — do czego naprawdę służy
Numer magiczny jest wspólny dla rachunku, nie dla terminala. Kiedy trzeba go zmieniać, kiedy nie, i dlaczego sam nie wystarcza do rozpoznania własnej pozycji.
- Pamięć i wskaźniki: MQL5 to nie C++
Składnia przypomina C++, ale zarządzanie pamięcią działa inaczej. Kiedy obiekt ginie sam, a kiedy zostaje w pamięci do zamknięcia terminala.
- Poza MQL5: Python, C# i języki chmurowe
Kiedy język terminala przestaje wystarczać i co realnie kosztuje wyjście poza niego. Uczciwe porównanie trzech dróg razem z ich pułapkami.
- Struktury i klasy: kopia czy referencja
Struktura przekazana do funkcji jest kopiowana, obiekt klasy nie. Skąd biorą się zmiany, które znikają, i te, które pojawiają się nieoczekiwanie.
- Testy jednostkowe w MQL5
MQL5 nie ma frameworka testowego i nikt go tu nie używa. Pokazujemy działający mikroframework na sto linii i sposób pisania kodu, który da się testować.
- Wycieki uchwytów wskaźników
Uchwyt tworzony w OnTick wygląda niewinnie, a po godzinach pracy terminal zwalnia. Jak wykrywać i zamykać wycieki.