Kontynuujemy cykl poświęcony podstawom języka programowania MQL. Tematem dzisiejszego odcinka będą funkcje, czyli zestawy instrukcji do wykonania, które można wywołać jednym krótkim poleceniem. Funkcje znacznie ułatwiają pracę i skracają długość kodu.
Budowa funkcji
Zanim zajmiemy się funkcjami w MQL, przypomnijmy sobie, jak wyglądała prosta funkcja liniowa w matematyce: f(x)=ax+b, gdzie a i b to stałe, a x to zmienna/parametr. Gdy podajemy funkcji wartość parametru x, ta zwróci nam określoną wartość. Gdyby parametry a i b miały wartości odpowiednio 2 i 0, to dla x=2, funkcja zwróciłaby nam wartość 4. Funkcje w MQL działają podobnie, tzn. dostają pewne parametry wejściowe (x=2), wykonują na nich określone działania (instrukcje) i zwracają wynik. Jeżeli owe działania są bardzo często wykonywane przez nasz algorytm inwestycyjny, to dzięki funkcjom nie musimy za każdym razem wypisywać wszystkich instrukcji w kodzie. Wystarczy wywołać samą nazwę funkcji.
Jak zbudowana jest funkcja? Z dwóch części – nagłówka i ciała. Aby to klarownie wytłumaczyć, załóżmy, że tworzymy funkcję, która będzie zamieniać dolary na złote według stałego kursu 3,5 zł za dolara. Parametrem w takiej funkcji będzie ilość dolarów (ile_dolarow). Przyjmijmy, że nasza funkcja nazywać się będzie „konwerter". Jej nagłówek będzie wyglądał następująco: double konwerter (double ile_dolarow). Czytelnicy, którzy czujnie śledzili poprzednie odcinki cyklu, zauważą podobieństwo do sposobu deklarowania zmiennych. Najpierw bowiem podaliśmy typ zwracanej przez funkcję zmiennej, czyli „double", a potem wpisywaliśmy jej nazwę (zasady nazewnictwa funkcji są takie same jak przy zmiennych). W naszym przykładzie wartość w złotych może być liczbą niecałkowitą, dlatego właśnie użyliśmy tego typu zmiennej. W nawiasach okrągłych z kolei mamy zadeklarowany parametr – jego typ (również double, bo możemy mieć np. 3,5 dolara) oraz jego nazwę. Nagłówek informuje nas więc o typach zmiennych wejściowych i zwracanych oraz o nazwie funkcji. Warto tutaj zauważyć, że o ile nawiasy kwadratowe zarezerwowane są dla zmiennych tablicowych, o tyle okrągłe właśnie dla funkcji (łatwiej będzie je dzięki temu rozpoznawać w kodzie).
Jak można się domyślić, w ciele funkcji umieścimy instrukcje do wykonania. Owe instrukcje muszą się zamykać w nawiasach klamrowych i każda instrukcja kończy się średnikiem. W naszym przykładzie ciało wyglądałoby następująco: { return ile_dolarow*3.5;}. W ciele użyliśmy polecenia „return", które zwróci funkcji „konwerter" wynik obliczeń.