EA robi obliczenia wtedy, gdy:
1. Komputer działa poprawnie i jest włączony.
2. Platforma MT4 jest otwarta.
3. Połączenie z internetem jest ustanowione poprawnie i działa prawidłowo.
4. Jest ustanowione poprawnie połączenie platformy MT4 z serwerem brokera.
5. EA jest poprawnie załadowane na wykresie.
Funkcja OnTick() [nie OnStart()!] wykonuje polecenia, gdy przychodzą ticki z serwera brokera.
Funkcja wykonuje te polecenia, które napisał programista.
Jeżeli programista ustalił warunki wykonania danej funkcji, czy obliczenia, to EA
wykona te obliczenia, kiedy będą ticki i kiedy warunki będą spełnione, i będzie te obliczenia wykonywał w każdej pętli OnTick() (to jest funkcja działająca w pętli aktywowanej przez ticki z serwera brokera).
Z tego, co pytający pisał, to u niego EA nie chodzi cały czas, tylko on go sam uruchamia.
I uruchamia go w niekonsekwentny sposób, czyli niekoniecznie o danej godzinie.
Samo to już jest nielogiczne, ponieważ po to się pisze EA z warunkami czasowymi, żeby ono samo zaczynało wykonywać działania, a nie żeby trejder go uruchamiał.
To są dwie sprzeczne rzeczy.
Ale, mniejsza o to...
Z tego powodu obliczanie jednorazowe w funkcji OnInit() nie może być stosowane, bo pytający pisał, że może odpalić EA wcześniej niż zakładany czas.
Żeby wykonać jakieś odczytanie danych i obliczenie jednorazowo należy określić zmienną wyniku i zmienną kontrolną czasu, np. I wtedy ustalić taki warunek, który zapobiegnie ponownemu obliczeniu jeżeli zmienna kontrolna nie spełnia warunku czasowego.
Należy powiązać zmienną wyniku z zmienną kontrolną.
Prostym rozwiązaniem byłoby ustawienie GlobalVariableSet() i np. w nazwie tej zmiennej zawrzeć string daty i czasu. Potem odczytywać ten string i kontrolować ten czas.
Tylko, jaki to miałoby sens?
Wystarczy po prostu wykonać obliczenie za każdym tickem.
Nie rozumiem tego problemu z Print(), bo to wydaje się nie mieć sensu.