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:
13 cze 2022, 15:25
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
Ale chyba alert ma być w EA, nie?
Masz funkcję SendMail(), a w MT4 konfigurujesz swój email w Narzędzia/Opcje/EMail.
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 »

Jest przyczyna, były źle opisane warunki pętli for
Poniżej zapisane poprawnie:

Kod: Zaznacz cały


	datetime NowTime = TimeCurrent();
  	Print("Teraz jest = ",NowTime);
   
  	 for(int i = 59; i>0; i--)
   
 	 	 {
 	 	 
 	   		  Print("badamy czas", NowTime - i);
   
  		}	
  		 
 
Czyli da się wykonywać działania na TimeCurrent(), gdzie wartość 1 oznacza sekundę. Jak się cieszę, bo już głowiłem się, jak w tym języku wykonywane są działania na zmiennych typu datetime.
Gitara - szkoda że przez błąd w argumentach pętli for zawiesiłem się na temacie przez trzy dni.
Natomiast nie udało się zastosować zmiennych typu datetime jako argumentów pętli for.
Nie znalazłem też przykładów na to, tutaj zawiedziony jestem, bo byłby to prostszy sposób na sprawdzenie, czy warunki X zaistniały w przeszłości

Pytanie, jak teraz sprawdzić wartość bool dla każdej badanej sekundy?
Tutaj potrzeba zdefiniować tablicę wewnątrz pętli?
Coś w stylu:

Kod: Zaznacz cały

bool WasSignal [i];

Jakoś nie spotkałem się z tablicami ze zmiennymi typu bool...
Czy to w ogóle ma zastosowanie? Dokumentacja mówi, że można.

Czy nie trzeba tu tablicy?
Czy w MQL4 da się zapisać warunek przerwania pętli jako S&&L == true ?
Można stosować różne zmienne w argumentach tej samej pętli ?
Czy zawsze ma być ta zmienna, zdefiniowana jako pierwszy argument ?

Cholercia, 4 rano a ja mam takie rozkminy, a nic nie napisałem prawie. Nie spodziewałem się, że funkcje daty i czasu zajmą mi najwięcej czasu.

Chyba doszedłem do rozdziału dotyczącego tworzenia własnych funkcji, a miałem nadzieję że nie nastąpi to tak szybko, przynajmniej nie w momencie gdy mam jeszcze spore braki w innych rozdziałach

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

EventSetTimer(1);  // timer sekundowy OnInit()

void OnTimer() {}

EventKillTimer(); //OnDeinit()
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:
16 cze 2022, 10:44

Kod: Zaznacz cały

EventSetTimer(1);  // timer sekundowy OnInit()

void OnTimer() {}

EventKillTimer(); //OnDeinit()
Dzięki !!!

W dokumentacji nie znajduję odpowiedzi na swoje pytania i nie rozumiem w jaki sposób ta funkcja miałaby wykonać, to co mam na myśli.

Czy byłbyś tak uprzejmy i powiedział, czy to co zamierzam zrobić jest wykonalne, bo może wcześniej chciałem iść drogą naokoło:

Myślałem o sprawdzaniu prawdziwości warunku 60 razy w pętli.

Dzisiaj natomiast, pomyślałem o funkcji OnTimer()

Czy nie nadać EventSetTimer(60) i nie sprawdzić warunku w obrębie 60 sekund:

Kod: Zaznacz cały

int OnInit()
	 
	  {
		//--- create timer
   			EventSetTimer(60);
   
		//---
   		return(INIT_SUCCEEDED);
  	}
  	
 void OnTimer()
 
 	{
 
 		bool BUY == false;
 		bool SELL == false;
 	
	}
	



Ale wtedy pojawiłby się problem, że wartość bool byłaby identyczna w obrębie 60s, a o rozwiązaniu tego problemu właśnie myślę!


Czy rozwiązaniem będzie pętla wewnątrz OnTimer()? z SetTimer 1s?
Oczywiście po uprzednim przywołaniu zmiennych typu bool ?

Widzę, że są gotowe funkcje, gdzie można sprawdzić czas otwarcia pozycji.
Niestety nie widzę funkcji, która sprawdza, czas, kiedy został wysłany Alert.




EDIT: Czy w ogóle jest możliwe tutaj działanie w taki sposób jak mam na myśli?
Wydawało mi się to oczywiste, że czas jest kolejnym parametrem i mogę sprawdzać true lub false w każdym momencie historii od 1970 do 3000 czy jakośtam.
I jeśli czas == TimeCurrent()-i && bool S || L == true, wtedy Bool CzyWysłaćMaila = false


EDIT2: Nie spodziewałem się, że to aż takie trudne. Skoro chodzi o maila to pewnie skończy się na EventSetTimer(60) - nie muszę mieć sygnału co do sekundy w końcu.
Ale i tak problem wróci w przyszłości, bo będę dążył do budowania EA wrażliwego na sygnały pojawiające się w obrębie sekund, tak więc ten Bar 1M to trochę obszerny zakres notowań :D :D :D

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 »

EventSetTimer(60) wykonuje pętlę OnTimer() co 60 sekund.
EventSetTimer(1) wykonuje pętlę OnTimer() co 1 sekundę.

Jest jeszcze bool EventSetMillisecondTimer(
int milliseconds // number of milliseconds
);

Nie wiem co ty z tym "i" ?

W pętli OnTimer() możesz co sekundę sprawdzać swoje warunki i zwracać jakąś zmienną, albo dwie zmienne, które potem będą wykonywać to co potrzeba w OnTick().
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 »

To "i" miało odejmować warość licznika pętli od TimeCurrent() :D :D :D
Następnie w pętli miała być sprawdzona warość zmiennej bool w określonym czasie (poprzez TimeCurrent()-i)

Ale wiesz co?
Ja podejrzewam, że zbytnio jeszcze sobie upraszczam niektóre zagadnienia.

Pewnie tutaj trzeba skorzystać z gotowych bibliotek, albo dokładniej opisać strukturę czasu.
Nie chcę siedziedź nad tym tematem teraz, bo to mnie spowolniło we wdrażaniu strategii.

Ustawię EventSetTimer(60) i będzie problem z głowy, a do tematu czasu wrócę poźniej.

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:
16 cze 2022, 16:57

W pętli OnTimer() możesz co sekundę sprawdzać swoje warunki i zwracać jakąś zmienną, albo dwie zmienne, które potem będą wykonywać to co potrzeba w OnTick().

No i to mam właśnie na myśli.
Można sprawdzać warunki w przyszłości, a ja chciałem sprawdzic warunki w bardzo niedawnej przeszłości

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, 16:08
Widzę, że są gotowe funkcje, gdzie można sprawdzić czas otwarcia pozycji.
Niestety nie widzę funkcji, która sprawdza, czas, kiedy został wysłany Alert.
Żeby sprawdzić czas wysłania alertu trzeba ten czas zapisać.
Albo ustawić zmienną na ten czas, i resetować ją zgodnie z jakimiś założeniami/warunkami.
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:
16 cze 2022, 17:06
ninjaproject pisze:
16 cze 2022, 16:57

W pętli OnTimer() możesz co sekundę sprawdzać swoje warunki i zwracać jakąś zmienną, albo dwie zmienne, które potem będą wykonywać to co potrzeba w OnTick().

No i to mam właśnie na myśli.
Można sprawdzać warunki w przyszłości, a ja chciałem sprawdzic warunki w bardzo niedawnej przeszłości
MT4 archiwizuje dane minimum M1, ticków nie archiwizuje, więc nie sprawdzisz ticków w historii, chyba, że będziesz je zapisywał w pliku .csv i odczytywał.
To jest, de facto, tak jakbyś sam konstruował wykres tickowy.
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:
16 cze 2022, 17:10

MT4 archiwizuje dane minimum M1, ticków nie archiwizuje, więc nie sprawdzisz ticków w historii, chyba, że będziesz jest zapisywał w pliku .csv i odczytywał.

Bardzo możliwe, że będę potrzebował nauczyciela MQL4 ;)

Okaże się, jakie problemy napotkam w najbliższej przyszłości

Na razie trochę narwany jestem, bo zależy mi na jak najdokładniejszym wprowadzeniu w życie swojej strategii, a w tym momencie bardziej zależy mi na sygnałach, niż na egzekwowaniu tych sygnałów przez EA.

I prawdopodobnie wcielenie najpilniejszych spraw w życie to kwestia następnego tygodnia.
I tak jestem negatywnie zaskoczony, ze w tym tygodniu tego nie ogarnąłem, a zaraz mam delegację na kilka dni :(

Później zobaczę jak mi idzie dalsza nauka, gdy nie odczuwam presji związanej z wcieleniem w życie swoich zamierzeń.
I czy w ogóle zechcę iść w aż tak specjalistyczną dziedzinę jak MQL4

ODPOWIEDZ