Wszystkie pytania dozwolone początkujących programistów

O jezykach programowania w platformach i nie tylko.
blashka
Stały bywalec
Stały bywalec
Posty: 41
Rejestracja: 27 lis 2020, 18:12

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

Nieprzeczytany post autor: blashka »

Szymon_P pisze:
08 kwie 2021, 13:44
Witam, czy mógłby ktoś pomóc w rozwiązaniu problemu? Jak zapisać, żeby EA sprawdzał zadane warunki o konkretnej godzinie i po niej podejmował dalsze akcje? Innymi słowy analizę ma zacząć dopiero o 12 pomimo uruchomienia np o 10.
Dodaj warunek:
If(Hour() >= 12)

Szymon_P
Stały bywalec
Stały bywalec
Posty: 60
Rejestracja: 31 paź 2015, 22:35

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

Nieprzeczytany post autor: Szymon_P »

Dziękuję za szybką odpowiedź. Mam jeszcze jedno pytanie.
Zapisałem coś takiego:

void OnTick()
{
if (Hour()>=19 && Minute()>=05)
Print ("Próba uruchamiania o czasie XXX");
}

Załóżmy, że zamiast "Print", EA ma obliczyć założone dane i chciałbym to przerwać wykorzystując tylko wynik np. zmienną X. W chwili obecnej na każdym ticku wykonuje obliczenia pomimo tego, że wynik i tak się już nie zmieni.

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 »

Szymon_P pisze:
08 kwie 2021, 18:12
Dziękuję za szybką odpowiedź. Mam jeszcze jedno pytanie.
Zapisałem coś takiego:

void OnTick()
{
if (Hour()>=19 && Minute()>=05)
Print ("Próba uruchamiania o czasie XXX");
}

Załóżmy, że zamiast "Print", EA ma obliczyć założone dane i chciałbym to przerwać wykorzystując tylko wynik np. zmienną X. W chwili obecnej na każdym ticku wykonuje obliczenia pomimo tego, że wynik i tak się już nie zmieni.
EA zawsze wykonuje obliczenia i resztę działań, gdy przychodzą ticki, oczywiście wewnątrz funkcji OnTick().
Jeżeli nie ma ich wykonywać, to potrzebny jakiś warunek, który by zapobiegał wykonywaniu danego obliczenia.
Twój warunek tylko ogranicza wykonywanie przed godziną 19:05, a po niej będzie wykonywać na każdym ticku, aż do czasu, kiedy Hour() będzie < 19, ponieważ taki jest warunek.
Kod nigdy nie jest mądrzejszy od kodera.
Trejder, Mentor/trener, aka. Dadas, fx-technik, obecnie ninjaproject.
Programuję wskaźniki i EA do MetaTrader 4/5.

Szymon_P
Stały bywalec
Stały bywalec
Posty: 60
Rejestracja: 31 paź 2015, 22:35

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

Nieprzeczytany post autor: Szymon_P »

To, że funkcja będzie się wykonywała cały czas od danej godziny to rozumiem. Nie mogę jej ograniczyć np. od 19:05 do 19:06 bo może zaistnieć sytuacja, że włączę EA np. o 19:50 i w tym przypadku nie wykona już tych obliczeń o które mi chodzi. Teraz pytanie w jaki sposób mam zapisać warunek, żeby funkcja zwróciła mi wynik obliczeń A,B i zakończyła obliczanie danego zadania? Zakładamy, że EA obliczył wartości A,B (zamiast Print). Do dalszych obliczeń potrzebuję już tylko A i B więc funkcję, która mi to obliczyła mogę już "wyłączyć" i przejść do kolejnych obliczeń.
Mam jeszcze pytanie co do zapisu
if (Hour()>=Time1)
W parametrach EA wprowadzam godzinę w formacie 19:05. W jaki sposób mogę ten czas zapisać w powyższym warunku?

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 »

Szymon_P pisze:
08 kwie 2021, 22:05
To, że funkcja będzie się wykonywała cały czas od danej godziny to rozumiem. Nie mogę jej ograniczyć np. od 19:05 do 19:06 bo może zaistnieć sytuacja, że włączę EA np. o 19:50 i w tym przypadku nie wykona już tych obliczeń o które mi chodzi. Teraz pytanie w jaki sposób mam zapisać warunek, żeby funkcja zwróciła mi wynik obliczeń A,B i zakończyła obliczanie danego zadania? Zakładamy, że EA obliczył wartości A,B (zamiast Print). Do dalszych obliczeń potrzebuję już tylko A i B więc funkcję, która mi to obliczyła mogę już "wyłączyć" i przejść do kolejnych obliczeń.
Nie bardzo rozumiem o co chodzi...
Jeżeli obliczam np. 2x2, to po prostu obliczam.
To nie ma znaczenia, że obliczanie następuje za każdym tickiem.
Inna opcja, to jeżeli jakaś zmienna potrzebuje być obliczona tylko raz, ponieważ się nie zmienia, to wystarczy ją obliczyć w OnInit().
Szymon_P pisze:
08 kwie 2021, 22:05
Mam jeszcze pytanie co do zapisu
if (Hour()>=Time1)
W parametrach EA wprowadzam godzinę w formacie 19:05. W jaki sposób mogę ten czas zapisać w powyższym warunku?

Kod: Zaznacz cały

input string Time1 = "19:50";

datetime dtTime1 = StrToTime(Time1);  // returns the current date with the given time
if(TimeCurrent()>=dtTime1)
Trejder, Mentor/trener, aka. Dadas, fx-technik, obecnie ninjaproject.
Programuję wskaźniki i EA do MetaTrader 4/5.

Szymon_P
Stały bywalec
Stały bywalec
Posty: 60
Rejestracja: 31 paź 2015, 22:35

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

Nieprzeczytany post autor: Szymon_P »

Już wyjaśniam🙂 załóżmy, że potrzebne mi zmienne obliczone na podstawie danych z przedziału czasowego 4-8. O 8 EA ma zadecydować na podstawie tego zakresu co dalej. Jeśli włączę EA o godzinie 7, a funkcja będzie w OnInit to obliczenia nie będą prawidłowe. Druga sprawa to wynik wyświetlam za pomocą Print więc zaśmieca mi terminal bo na każdym tricku wyskakuje pomimo tego, że już się nie zmieni.

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 »

Szymon_P pisze:
09 kwie 2021, 07:59
Już wyjaśniam🙂 załóżmy, że potrzebne mi zmienne obliczone na podstawie danych z przedziału czasowego 4-8. O 8 EA ma zadecydować na podstawie tego zakresu co dalej. Jeśli włączę EA o godzinie 7, a funkcja będzie w OnInit to obliczenia nie będą prawidłowe. Druga sprawa to wynik wyświetlam za pomocą Print więc zaśmieca mi terminal bo na każdym tricku wyskakuje pomimo tego, że już się nie zmieni.
A po co Print()?
Print() służy do sprawdzania błędów i poprawności wykonania szczególnie funkcji związanych z otwieraniem, modyfikowaniem i zamykaniem pozycji, a także do sprawdzania innych działań, gdy testujemy dany kod. Te od sprawdzania innych działań możemy potem usunąć.
EA ma samo pracować, lub ew. wspierać trejdera.
Jeżeli EA ma odczytywać np. najwyższe High i najniższe Low z przedziału od 4:00 do 8:00, to to właśnie ma robić, na każdym ticku.
Nie potrzeba tego wyrzucać przez Print().
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 »

PS. Generalnie, jakby dobrze pomyślał, to można napisać taki kod, co by tylko raz odczytywał te dane.
Trochu będzie kombinacji, ale się da.

Może napisz konkretnie co te twoje EA ma robić, bo gwarantuję, że Ameryki nie odkryłeś!
Trejder, Mentor/trener, aka. Dadas, fx-technik, obecnie ninjaproject.
Programuję wskaźniki i EA do MetaTrader 4/5.

blashka
Stały bywalec
Stały bywalec
Posty: 41
Rejestracja: 27 lis 2020, 18:12

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

Nieprzeczytany post autor: blashka »

A gdyby obliczył sobie na początku to co chce za pomocą funkcji OnStart() a potem pobrał wynik do dalszych obliczeń? OnStart() policzy mu to w momencie gdy spełnią się warunki czy w momencie odpalenia robota?

grzegrzyw
Gaduła
Gaduła
Posty: 334
Rejestracja: 11 mar 2012, 19:43

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

Nieprzeczytany post autor: grzegrzyw »

Wystarczy:
if ( Hour()==8 ) {oblicz to co potrzebuję}

ODPOWIEDZ