Słownik poleceń MQL4-Uruchamianie programów-Uruchamianie programów na wykresie w Edukacja-Forex - bossa.pl
2017.08.18, godz. 22:05
baner_ZAGRANICA_479x59_B.jpg
kontakt

Uruchomienie programu na wykresie

W momencie umieszczenia naszego programu EA, wskaźnika, skryptu na wykresie następuje uruchomienie dyrektyw preprocesora, które zostały opisane we wcześniejszych punktach oraz zainicjowanie zmiennych globalnych. Następnie uruchomiona zostaje funkcja specjalna init(), a dopiero po zakończeniu się wykonania funkcji init() uruchomiona zostaje funkcja specjalna start(), a usuwając program z wykresu wywołana zostaje funkcja deinit(). Należy podkreślić, że funkcje specjalne init() oraz deinit() wykonują się jednorazowo natomiast funkcja start() wykonuje się za każdym razem zmiany wartości kwotowań na wykresie. Wyjątkiem jest skrypt, w którym funkcja start() uruchamiana jest jednorazowo i nie ma obowiązku uruchamiania funkcji init(), deinit() ponieważ wszystkie operacje można umieścić w funkcji start().

 

Oprócz jednorazowego wywoływania funkcji init(), deinit() wykonują się one także, gdy zmieniamy symbol na wykresie, przełączamy się po między rachunkami, dokonujmy kompilacji programu który znajduje się na wykresie.

 

Funkcje init() oraz deinit() nie powinny zawierać skomplikowanych obliczeń. Służą głównie do inicjalizacji i deinicjalizacji wartości początkowych parametrów, zmiennych. Funkcja deinit() musi zakończyć się w ciągu 2,5 sekundy, a jeśli to nie nastąpi to automatycznie zostanie to wymuszone przez terminal, wówczas możemy utracić dane, jeśli np. umieściliśmy zapis danych historycznych całego wykresu, które mogą się wykonywać ponad 2,5 sekundy. W celu weryfikacji ewentualnych błędów kończenia programu możemy korzystać z opisywanej już funkcji UninitializeReason(). Wyjątkiem od reguły wymuszenia zamknięcia programu są skrypty, ponieważ może się zdarzyć iż skrypt wykonuje się bardzo długo, albo co gorsze jest w nim zawarta nieskończona pętla co powoduje zawieszenie się programu, ponieważ skrypt nigdy nie przejdzie do wywołania funkcji deinit(). W celu usunięcia zawieszonego skryptu możemy po prostu zamkną wykres lub uruchomić inny skrypt na tym wykresie wymuszając usunięcie tego zawieszonego.

 

Jak już wiemy EA i wskaźniki wykonują funkcje start() za każdym razem po nadejściu nowych kwotowań, czasami może się tak zdarzyć, że zmienność rynku jest tak duża i kwotowania nadchodzą szybciej niż wykonują się obliczenia funkcji start(). Wówczas wszystkie nowe kwotowania zostają pominięte do czasu wykonania się funkcji start(). Uwaga dla programistów, którzy chcą, aby ich programowanie nie pomijało obliczeń nowych kwotowań lub pomijał o jak najmniej jest taka, aby jak najbardziej optymalizować wydajnościowo programy np. przez stosowanie jak najmniej zmiennych dynamicznych typu string lub dynamicznych tablic, także obiekty graficzne mogą wpływać na dłuższe wykonywania się obliczeń.

 

Funkcja start nie jest też wykonywana w momencie zmiany parametrów EA, wskaźnika przy otwartym oknie z parametrami.

 

Bardzo ważna uwaga szczególnie dla tych, którzy w praktyczny sposób korzystają z EA, wskaźników. Należy pamiętać, iż programy wykonywalne terminala uruchamiane są lokalnie i po zamknięciu terminala nie działają. Dopiero ponowne uruchomienie terminala powoduje uruchomienie EA, wskaźnika. Inaczej mówiąc programy nie są wykonywane, ani nie są przechowywane na serwerach MetaTrader.

 

Do sprawdzanie czy program w danym momencie nie jest zatrzymywany można wykorzystać funkcję IsStpped().

 

System operacyjny Windows na którym działa oprogramowanie MataTrader jest wielowątkowy, to znaczy wiele programów może jednocześnie działać, mieć dostęp do procesora, także oprogramowanie MetaTrader wykorzystuje te właściwości systemu operacyjnego. EA oraz skrypty wykonywane są w niezależnych wątkach, natomiast wskaźniki wykonywane są w ramach głównego wątku programu, a biblioteki w wątku, który je wywołał.
bos bank logo
Grupa kapitałowa
Nagroda specjalna i tytuł BROKERA ROKU 2015
Nagroda specjalna i tytuł BROKERA
ROKU 2015, przyznane przez GPW.

logo_FMR2017aktualny.jpg Finansowa Marka Roku: wyrazista marka promująca edukację, umocnienie pozycji lidera rynku kontraktów terminowych.

nagroda najlepszy dom maklerski 2015
Najwyższa ocena dla DM BOŚ w ankiecie czytelników Gazety Giełdy Parkiet 2015r.