Wszystkie pytania dozwolone początkujących programistów

O jezykach programowania w platformach i nie tylko.
Mistyfikator
Pasjonat
Pasjonat
Posty: 932
Rejestracja: 05 lip 2021, 20:35

Re: Wszystkie pytania dozwolone początkujących programistów

Nieprzeczytany post autor: Mistyfikator »

EventKillTimer()

Tutaj to zrobię.

Będzie zmienna bool WysłanoMaila - bardzo dobry pomysł,
SetTimer na 60 i nie będzie opcji aby wysłało mi 50 maili pod rząd

Dzięki za podpowiedź

Awatar użytkownika
ninjaproject
Maniak
Maniak
Posty: 4944
Rejestracja: 30 lip 2019, 13:15

Re: Wszystkie pytania dozwolone początkujących programistów

Nieprzeczytany post autor: ninjaproject »

Mistyfikator pisze:
16 cze 2022, 19:15
EventKillTimer()

Tutaj to zrobię.

Będzie zmienna bool WysłanoMaila - bardzo dobry pomysł,
SetTimer na 60 i nie będzie opcji aby wysłało mi 50 maili pod rząd

Dzięki za podpowiedź
Źle. EventKillTimer() jest w OnDeinit(const int reason).
Więc, to nic ci nie da.
Trejder, Mentor/trener, aka. Dadas, fx-technik, obecnie ninjaproject.
Programuję wskaźniki i EA do MetaTrader 4/5.

Mistyfikator
Pasjonat
Pasjonat
Posty: 932
Rejestracja: 05 lip 2021, 20:35

Re: Wszystkie pytania dozwolone początkujących programistów

Nieprzeczytany post autor: Mistyfikator »

Dobra, to inaczej:

Kod: Zaznacz cały


bool L = false;
bool S = false;
bool DO_NOT_SEND_MAIL = true ;

int
 OnInit()
  {
//--- create timer
   EventSetTimer(2);
   
//---
   return(INIT_SUCCEEDED);
   
  }

void OnTimer()
  {
  
      if ( ( L == true ) || (  S == true) )
         {  DO_NOT_SEND_MAIL == true ;}
      else
         { }
//---
   
  }
  
SetTimer na 2 ze względu, aby EA zdołało wygenerować email, zanim warunek DO_NOT_SEND_MAIL zmieni się na true

Można tak? W dokumentacji są instrukcje warunkowe w tej funkcji, jako przykład.

Kompiluje się, tylko pytanie czy działać będzie z całym programem.
Dzisiaj już nie zdążę z tematem, bo rano pobudka i dopiero od poniedziałku działam znowu.
Najchętniej zarwałbym kolejną nockę, bo zaczynam trybić.

Muszę od razu od poniedziałku ostro się wziąć do roboty, bo w tym tygodniu nie dość że na rynkach tylko zmiotło mnie z planszy przed prawdziwą rozgrywką, to nie napisałem EA wysyłającego email :(
Wiem, że już istnieje dokładnie to czego potrzebuje, ale nie w tym istota rzeczy, bo mam cele programistyczne również

Zasadniczo, mogłem to napisać. Niestety podszedłem od niewłaściwej strony do zagadnienia czasu i straciłem czas na stworzenie sobie problemu, który nie istnieje.
Jeśli się nie mylę, to chciałem opisać dwuwymiarową przestrzeń, gdzie pierwszy wymiar to bool IS_SIGNAL_NOW, a drugi to time.

A okazuje się, że nie trzeba było!
Bo skoro sygnał pojawia się równo na początku minuty, a znika na początku następnej to wystarczy wykorzystać OnTimer() sekundowy.

Wow, po raz drugi od początku swojej nauki MQL4 chciałem napisać funkcję, którą ten język ma wbudowaną!
Tak więc wolne chwile, w oczekiwaniu na sygnały wejścia będę spędzał na dokładniejszym studiowaniu dokumentacji, bo wiele rozdziałów tylko przejrzałem i nie zastanowiłem się jakie możliwości dają zawarte w nich zagadnienia !

Awatar użytkownika
ninjaproject
Maniak
Maniak
Posty: 4944
Rejestracja: 30 lip 2019, 13:15

Re: Wszystkie pytania dozwolone początkujących programistów

Nieprzeczytany post autor: ninjaproject »

Mistyfikator pisze:
16 cze 2022, 23:15
Bo skoro sygnał pojawia się równo na początku minuty, a znika na początku następnej to wystarczy wykorzystać OnTimer() sekundowy.
Chwila, moment!
Wykres nie rysuje się zgodnie z czasem komputera, tylko zgodnie z tickami.
Wynika z tego, że mogą i występują sytuacje, że już jest nowa minuta, a świeca jeszcze nie zaczyna się rysować, bo nie ma jeszcze nowych ticków. Dlatego badanie warunków świecowych co minuta przez timer nie ma sensu. Zapodałem ci kiedyś funkcję IsNewBar(), którą możesz sobie przepisać do konkretnego interwału, jeżeli potrzeba, np. M1.
Badając warunki wejścia co IsNewBar(PERIOD_M1), na przykład, email będzie wysłany tylko raz.
Niepotrzebne są inne komplikacje.
Trejder, Mentor/trener, aka. Dadas, fx-technik, obecnie ninjaproject.
Programuję wskaźniki i EA do MetaTrader 4/5.

Mistyfikator
Pasjonat
Pasjonat
Posty: 932
Rejestracja: 05 lip 2021, 20:35

Re: Wszystkie pytania dozwolone początkujących programistów

Nieprzeczytany post autor: Mistyfikator »

Okej kumam

Już mam tę funkcję

Absolutnie byłem przekonany, że się nie przyda !!!
I do dzisiaj się nie przydała, bo inaczej blokowałem możliwość wywalania kilkudziesięciu zleceń naraz

Faktycznie będzie łatwiej

Dzięki !!!!


***

Włąsnie sobie przypomniałem, dlaczego nie stosowałem funkcji IsNewBar ()
Nie chciałem czekać na sygnał, bo zauważyłem że baaardzo to spowalnia sygnały

Ale na świecy M1 to IsNewBar zmienia postać rzeczy

Mistyfikator
Pasjonat
Pasjonat
Posty: 932
Rejestracja: 05 lip 2021, 20:35

Re: Wszystkie pytania dozwolone początkujących programistów

Nieprzeczytany post autor: Mistyfikator »

Wprowadzanie danych datetime jako extern.
Ładnie się to wszystko wyświetla po wprowadzeniu:

Kod: Zaznacz cały


datetime START_HOUR ;
datetime END_HOUR ;

datetime CLOSE_HOUR ;

Jednak szukam sposobu na usunięcie rzędu lat i miesięcy.
Podobno się nie da zrobić tego w prosty sposób.

Myślę więc o rozwiązaniu w stylu:

Kod: Zaznacz cały


extern string START_HOUR = "23:00";
extern string END_HOUR = "19:30";
extern string CLOSE_TIME = "19:59";

A później zrzutować string to time.

No ale takie rozwiązanie bardzo mi się nie podoba, jako że extern datetime dają wspaniałą możliwość edycji zmiennych czasu przy pomocy tabeli.

Czy trzeba grzebać w strukturze czasu?
Mam na myśli wstawienie Year and Month wartości aktualnego roku i miesiąca.

Pytanie, czy taki zabieg pozwoli wyświetlać w inputs wyłącznie współrzędne godziny i minuty ?
Jakoś nie chce mi się uwierzyć w to, że w MQL4 nie ma gotowego rozwiązania na to.

Jako że mam swoje rozwiązanie na tą kwestię (trudno, w ostateczności w extern będą dane string), wolałbym nie siedzieć nad szczegółami jak w/w.
Postanowiłem jednak poruszyć w/w kwestię na forum, bo temat jest bardzo nurtujący.

Awatar użytkownika
ninjaproject
Maniak
Maniak
Posty: 4944
Rejestracja: 30 lip 2019, 13:15

Re: Wszystkie pytania dozwolone początkujących programistów

Nieprzeczytany post autor: ninjaproject »

Kod: Zaznacz cały

StrToTime(TimeToStr(dt,TIME_DATE)+" "+START_HOUR);
Trejder, Mentor/trener, aka. Dadas, fx-technik, obecnie ninjaproject.
Programuję wskaźniki i EA do MetaTrader 4/5.

Mistyfikator
Pasjonat
Pasjonat
Posty: 932
Rejestracja: 05 lip 2021, 20:35

Re: Wszystkie pytania dozwolone początkujących programistów

Nieprzeczytany post autor: Mistyfikator »

ninjaproject pisze:
30 cze 2022, 16:41

Kod: Zaznacz cały

StrToTime(TimeToStr(dt,TIME_DATE)+" "+START_HOUR);
Hmmm, pewnie nie rozgryzłem, co masz na myśli. Albo nie potrafię od razu konwertować zmiennych w inputs...

Kompilator nie przyjmuje StrToTime w extern.
Datetime mogło zostać tylko zadeklarowane jako zmienna.

Na późniejszym etapie programu już nie mam problemu z pomijaniem roku i miesiąca...

Cała istota sprawy polega właśnie na tym, aby użyć formatu danych datetime w inputs i definiować je przy pomocy tej tabelki.

Jeśeli nie zrozumiałem powyższego kodu to pardon.
Obiecuję, że spróbuję to jeszcze skumać

****

Ale wiesz co, widzę że np takie rzeczy się robi :


https://docs.mql4.com/basis/types/integer/enumeration


Co myślisz o ENUM dla osobno: godzin, minut i sekund. W celu, aby użytkownik z poziomu interfejsu miał dostęp do tych parametrów ?
Bo tablic słyszałem, że nie można w inputs

To też będzie spoko wyglądało w interfejsie.

Boję się żeby niepotrzebnie nie komplikować kodu.
Dotąd dość często się okazywało, że to co chciałem zrobić było możliwe do wykonania znacznie szybszą drogą.
Ostatnio zmieniony 30 cze 2022, 17:21 przez Mistyfikator, łącznie zmieniany 1 raz.

Awatar użytkownika
ninjaproject
Maniak
Maniak
Posty: 4944
Rejestracja: 30 lip 2019, 13:15

Re: Wszystkie pytania dozwolone początkujących programistów

Nieprzeczytany post autor: ninjaproject »

Nie w inputs!
W inputs dajesz stringi.
Potem te stringi wstawiasz w formułkę.

No i nie używaj już extern tylko używaj input!

Odnośnie list enum, to co? Chcesz zrobi listę zawierającą wszystkie godziny i minuty?
Taka lista zwraca numerator pozycji w tej liście, więc musisz potem ponownie do każdego numeru przypisać czas, no i masz dwa razy tyle roboty.
Trejder, Mentor/trener, aka. Dadas, fx-technik, obecnie ninjaproject.
Programuję wskaźniki i EA do MetaTrader 4/5.

Mistyfikator
Pasjonat
Pasjonat
Posty: 932
Rejestracja: 05 lip 2021, 20:35

Re: Wszystkie pytania dozwolone początkujących programistów

Nieprzeczytany post autor: Mistyfikator »

ninjaproject pisze:
30 cze 2022, 17:19
Nie w inputs!
W inputs dajesz stringi.
Potem te stringi wstawiasz w formułkę.

No i nie używaj już extern tylko używaj input!
Ech, tego się obawiałem że to jedyne wyjście.

Czemu inputs ?

Extern daje fajną możliwość ingerencji w zmienne bez konieczności ponownego uruchamiania EA.
Bo z dokumentacji wynika, że to jest różnica pomiędzy inputs a extern.

Ale przyznam, że uwierzyłem na słowo.



****

Spróbuję też rozwiązania z ENUM. Ale muszę siąść do kompa :D :D :D

ODPOWIEDZ