Wszystkie pytania dozwolone początkujących programistów

O jezykach programowania w platformach i nie tylko.
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:
09 maja 2022, 16:53

Mam w związku powyższym taką kwestię:
Chciałbym badać bieżącą świecę i potrzebuję parametru iHighest oraz iLowest.

Czy można zbadać tę wartość dla świecy o indeksie 0, czy tylko 1?
Czyli, czy tą wartość dostanę dopiero po narysowaniu się świecy?
Próbowałem już iHighest w Sell, ale niestety nie zadziałało


Edit: Dobra, nie popatrzyłem jakie ma parametry iHighest. Napisane jest, że można zbadać indeks 0, także sam sobie odpowiadam na pytanie. Posta zostawiam wraz z kodem,
A po jakie licho iHighest() i iLowest()?
To są funkcje dla badania cen najwyższej i najniższej z zakresu świec, nie z jednej świecy.
Masz High[0] i Low[0] i wiecej nie potrzeba dla świecy bieżącej widocznego interwału.
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:
09 maja 2022, 17:24
Mistyfikator pisze:
09 maja 2022, 16:53

Mam w związku powyższym taką kwestię:
Chciałbym badać bieżącą świecę i potrzebuję parametru iHighest oraz iLowest.

Czy można zbadać tę wartość dla świecy o indeksie 0, czy tylko 1?
Czyli, czy tą wartość dostanę dopiero po narysowaniu się świecy?
Próbowałem już iHighest w Sell, ale niestety nie zadziałało


Edit: Dobra, nie popatrzyłem jakie ma parametry iHighest. Napisane jest, że można zbadać indeks 0, także sam sobie odpowiadam na pytanie. Posta zostawiam wraz z kodem,
A po jakie licho iHighest() i iLowest()?
To są funkcje dla badania cen najwyższej i najniższej z zakresu świec, nie z jednej świecy.
Masz High[0] i Low[0] i wiecej nie potrzeba dla świecy bieżącej widocznego interwału.
Faktycznie.
Ale dobrze wiedzieć o tych iHighest i iLowest.
Przydadzą się pewnie z czasem, jak zacznę tworzyć bardziej złożone EA

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

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

Nieprzeczytany post autor: Mistyfikator »

Z góry przepraszam, że dokładnie nie przestudiowałem jeszcze funkcji czasu i znowu przychodzę zapewne bez jakiejś podstawowej wiedzy.
Pardon, dużo wiedzy i nowości ostatnio, więc niestety odbywa się to kosztem dokładności mojej nauki.
Ale będę utrwalał wszystko ponownie, taką formę nauki wybrałem - na praktyce.

Kwestia jest taka, że dzisiaj piszę bardzo proste EA, którego zadaniem będzie wysyłanie alertów, jeśli pojawi się sygnał kupna/sprzedaży.
Problem jest taki, że sygnał trwa zazwyczaj przez niecałą minutę, a jako że alerty będą wysyłane mailowo, chodzi mi o to aby poprzestało na wysłaniu jednego maila a nie np 50!

Pomyślałem o ujęciu tego w pętlę w OnInit, która sprawdzi prawdziwość warunków kilkadziesiąt sekund wstecz:

Kod: Zaznacz cały


int OnInit()
  {
  
      for (datetime i=TimeCurrent(); i<=TimeCurrent()-75; i--)

        {
        Print("Badany czas to ", i); 
        bool S = false; bool L = false;
        }
//---
   
//---
   return(INIT_SUCCEEDED);
  }
  
  

Co tu jest nie tak?
Pewnie trzeba jakoś dodatkowo skonwertować ten czas?
Czy nie mozna używać danych datetime jako licznika pętli?
No, ale skoro wszystko się kompiluje i nie wyświetla błędów?
Bo jednostki czasu chyba użyłem dobrej?
Pewnie coś po chamsku uprościłem jako początkujący "programista" :D ?

A może to coś nie tak w OnInit ?
Widzę że OnInit ma postać int
A czy nie może to być inny typ danych?

A może po prostu ubrać to w void OnInit(){}?

Na razie nie badałem tego pod kątem funkcji, bo odkryłem że problem tkwi gdzieś indziej:
Wstawiałem tę pętlę w OnTick() również, i tam także nie wyświetla mi wartości czasu z pętli.
Tak więc stawiam na jakąś konwersję

A może ktoś ma namiary na gotową funkcję, która sprawdzi prawdziwość bool wstecz ?

Edit:
StringToTime?
O to chodzi?

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 »

OnInit() działa tylko raz, kiedy jest EA, lub wskaźnik inicjowany. Nie działa w innych wypadkach, więc kiedy EA pracuje, to OnInit() nic nie robi.
Poza tym, to bym radził zdefiniować zmienną, np. bool WyslanoEMail=false; i gdy sie pojawi sygnał, to wysłać email i ustawić WyslanoEMail=true; i po np. ustalonym czasie ponownie zresetować WyslanoEMail=false;
Ostatnio zmieniony 13 cze 2022, 15:17 przez ninjaproject, łącznie zmieniany 1 raz.
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:
13 cze 2022, 15:12
OnInit() działa tylko raz, kiedy jest EA, lub wskaźnik inicjowany. Nie działa w innych wypadkach, więc kiedy EA pracuje, to OnInit() nic nie robi.
OnInit() to tylko ew. opcja.
Jak coś, wstawię to w OnTick() .

Tylko, że w OnTick() powyższa pętla również nie wyświetla mi TimeCurrent()-1 :(

A może TimeCurrent() zwraca czas w postaci Y,DD,MM,itd ?
A trzeba to mierzyć jako sekundy od 1970 ?
Tylko mi się nie chce wierzyć w to, że tak to działa....

Bo jak dotąd MQL4 zaskakiwał mnie raczej ułatwieniami

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 »

Poza tym, to bym radził zdefiniować zmienną, np. bool WyslanoEMail=false; i gdy sie pojawi sygnał, to wysłać email i ustawić WyslanoEMail=true; i po np. ustalonym czasie ponownie zresetować WyslanoEMail=false;
Trejder, Mentor/trener, aka. Dadas, fx-technik, obecnie ninjaproject.
Programuję wskaźniki i EA do MetaTrader 4/5.

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:
13 cze 2022, 15:14
ninjaproject pisze:
13 cze 2022, 15:12
OnInit() działa tylko raz, kiedy jest EA, lub wskaźnik inicjowany. Nie działa w innych wypadkach, więc kiedy EA pracuje, to OnInit() nic nie robi.
OnInit() to tylko ew. opcja.
Jak coś, wstawię to w OnTick() .

Tylko, że w OnTick() powyższa pętla również nie wyświetla mi TimeCurrent()-1 :(

A może TimeCurrent() zwraca czas w postaci Y,DD,MM,itd ?
A trzeba to mierzyć jako sekundy od 1970 ?
Tylko mi się nie chce wierzyć w to, że tak to działa....

Bo jak dotąd MQL4 zaskakiwał mnie raczej ułatwieniami
Tak to działa.
Żeby sformatować czas trzeba użyć TimeToStruct().
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:
13 cze 2022, 15:17
Poza tym, to bym radził zdefiniować zmienną, np. bool WyslanoEMail=false; i gdy sie pojawi sygnał, to wysłać email i ustawić WyslanoEMail=true; i po np. ustalonym czasie ponownie zresetować WyslanoEMail=false;
Hmmm, to rozumiem, że maile też mają być z poziomu EA ?
To zmienia postać rzeczy, bo ja zamierzałem tę kwestię rozwiązać z poziomu powiadomień MT4.
W sensie, że w razie wyświetlenia alertu na MT4 uruchomionym na VPS, wysyła mi powiadomienie email

Ale nie sprawdzałem jeszcze, czy tak się da. Bo wydawało mi się to oczywiste.
EA wyświetla alert ===>>> EA wysyła email, jeśli pojawi się alert

I o takim rozwiązaniu myślałem raczej. Szkopuł w tym, aby to był jeden alert a nie dwadzieścia lub trzydzieści

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:
13 cze 2022, 15:19

Tak to działa.
Żeby sformatować czas trzeba użyć TimeToStruct().


Czyli TimeCurrent() ma postać string, i mam to przekonwertować na datetime, żeby uzyć tego jako licznika w pętli i żeby działało przede wszystkim ?

No nic, dzisiaj muszę w końcu opanować ten rozdział MQL4. To podstawa

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:
13 cze 2022, 15:30
ninjaproject pisze:
13 cze 2022, 15:19

Tak to działa.
Żeby sformatować czas trzeba użyć TimeToStruct().


Czyli TimeCurrent() ma postać string, i mam to przekonwertować na datetime, żeby uzyć tego jako licznika w pętli i żeby działało przede wszystkim ?

No nic, dzisiaj muszę w końcu opanować ten rozdział MQL4. To podstawa
Nie wiem dokładnie o co tobie chodzi?
Ja bym pewnie napisał coś w stylu:

Kod: Zaznacz cały

if(Sygnal==Costam&&TimeCurrent()<=Time[0]+JakasWartosc)
 {
 WykonajTo();
 }
Trejder, Mentor/trener, aka. Dadas, fx-technik, obecnie ninjaproject.
Programuję wskaźniki i EA do MetaTrader 4/5.

ODPOWIEDZ