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:
30 kwie 2022, 01:13
Są jakiekolwiek szanse, że tester strategii MT4 będzie działał prawidłowo na historii, czy tracę czas?
Coś, co działało na aktualnym wykresie, na backtestach zwraca nieprawidłową wartość?

Wyskakuje błąd OrderSend130, to jest zły SL.
Próbowałem z normalizacją i bez.
oczywiście usunąłem multiTF ze strategii
Sprawdź jaki spread ustawiłeś w testerze.
Tam są, niestety, ograniczenia co do tego.
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 kwie 2022, 01:19

Sprawdź jaki spread ustawiłeś w testerze.
Tam są, niestety, ograniczenia co do tego.
Oki. Po weekendzie przetestuję. Niestety musiałem przerwać pracę na 2 dni, a szkoda, bo w fajny trans wszedłem i zaczęło do mnie wiele rzeczy docierać.

Zasadniczo przyjrzałem się temu co napisałem i logiczne się wydaje, żeby działało...

Zostało napisać cześć, która wstrzyma działanie EA na X godzin, po serii Y stratnych.
Jestem w robocie, ale myślę Jak to zrobić po weekendzie.

Gdyby chodziło o jakiś zakres czasu to byłoby łatwe.

Czy jest w MQL4 funkcja która zwraca wynik transakcji? (Czy były stratne, czy zyskowne)
Czy jest funkcja do czasowego przerwania działania EA i wznowienia po określonym czasie?
Pewnie wszystko da się rozwiązać, ale z chęcią posłucham pomysłów

Chciałem taki licznik, ale w ostateczności oprę to na procentowej wartości DD.
Ostatnio zmieniony 30 kwie 2022, 16:29 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 »

Mistyfikator pisze:
30 kwie 2022, 16:12
ninjaproject pisze:
30 kwie 2022, 01:19

Sprawdź jaki spread ustawiłeś w testerze.
Tam są, niestety, ograniczenia co do tego.
Oki. Po weekendzie przetestuję. Niestety musiałem przerwać pracę na 2 dni, a szkoda, bo w fajny trans wszedłem i zaczęło do mnie wiele rzeczy docierać.

Zasadniczo przyjrzałem się temu co napisałem i logiczne się wydaje, żeby działało...

Zostało napisać cześć, która wstrzyma działanie EA na X godzin, po serii Y stratnych.
Jestem w robocie, ale myślę Jak to zrobić po weekendzie.

Gdyby chodziło o jakiś zakres czasu to byłoby łatwe.

Czy jest w MQL4 funkcja która zwraca wynik transakcji? (Czy były stratne, czy zyskowne)

Chciałem taki licznik, ale w ostateczności oprę to na procentowej wartości DD.
OrderProfit() https://docs.mql4.com/trading/orderprofit
AccountProfit() https://docs.mql4.com/account/accountprofit
Trejder, Mentor/trener, aka. Dadas, fx-technik, obecnie ninjaproject.
Programuję wskaźniki i EA do MetaTrader 4/5.

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 »

Mistyfikator pisze:
30 kwie 2022, 16:12
Czy jest funkcja do czasowego przerwania działania EA i wznowienia po określonym czasie?
Jest funkcja Sleep
The function suspends execution of the current Expert Advisor or script within a specified interval.
void Sleep(
int milliseconds // interval
);
Parameters
milliseconds
[in] Delay interval in milliseconds.

Czas jaki chcesz uzyskać musisz zamienić na milisekundy

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 »

grzegrzyw pisze:
30 kwie 2022, 22:41
Mistyfikator pisze:
30 kwie 2022, 16:12
Czy jest funkcja do czasowego przerwania działania EA i wznowienia po określonym czasie?
Jest funkcja Sleep
The function suspends execution of the current Expert Advisor or script within a specified interval.
void Sleep(
int milliseconds // interval
);
Parameters
milliseconds
[in] Delay interval in milliseconds.

Czas jaki chcesz uzyskać musisz zamienić na milisekundy
To, chyba by zależało co jest naszym celem?
Można w inputs wpisać konkretne godziny i potem w kodzie po prostu dać warunek if().
Oczywiście, tu się kłaniają: https://docs.mql4.com/dateandtime
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 »

Przemyślałem temat, co prawda bez możliwości zrealizowania kodu. Ale przynajmniej jest idea na poniedziałek.

Myślę o tym, żeby EA na każdym ticku porównywało aktualny Account Balance z Account Balance z powiedzmy godziny 0:05 bieżącego dnia.

Jeśli DD osiągnie poziom powiedzmy 5% trzeba będzie włączyć funkcję Sleep do godziny 0:05 kolejnego dnia.

Chyba to jest najsensowniejsze rozwiązanie. Odwołanie się tylko do czasu nie wystarczy. Liczenie SL z rzędu jednak też raczej nie, bo będą w międzyczasie BE+, dużo mniejsze niż SL, więc taka funkcja nie uchroni konta przed zbyt dużym DD.

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:
01 maja 2022, 05:17
Przemyślałem temat, co prawda bez możliwości zrealizowania kodu. Ale przynajmniej jest idea na poniedziałek.

Myślę o tym, żeby EA na każdym ticku porównywało aktualny Account Balance z Account Balance z powiedzmy godziny 0:05 bieżącego dnia.

Jeśli DD osiągnie poziom powiedzmy 5% trzeba będzie włączyć funkcję Sleep do godziny 0:05 kolejnego dnia.

Chyba to jest najsensowniejsze rozwiązanie. Odwołanie się tylko do czasu nie wystarczy. Liczenie SL z rzędu jednak też raczej nie, bo będą w międzyczasie BE+, dużo mniejsze niż SL, więc taka funkcja nie uchroni konta przed zbyt dużym DD.
No to, po pierwsze, masz zdefiniowaną godzinę, czyli masz

Kod: Zaznacz cały

input string   CheckBalanceHour = "00:05";

Przeliczasz tą godzinę na czas MT4

Kod: Zaznacz cały

StrToTime(TimeToStr(dt,TIME_DATE)+" "+CheckBalanceHour )
Badasz

Kod: Zaznacz cały

if(Time[0]>StrToTime(TimeToStr(dt,TIME_DATE)+" "+CheckBalanceHour ))
wewnątrz tego warunku, który zablokował pracę EA, bo DD > 5%. Do tego się przyda jakaś zmienna np.

Kod: Zaznacz cały

bool DDmax=false;
, którą przełączysz

Kod: Zaznacz cały

if(DD>=MaxDDPct) DDmax=true;

Oczywiście, musisz zresetować DDmax do false o CheckBalanceHour.
O godzinie CheckBalanceHour nadajesz zmiennej wartość AccountBalance(), która się nie zmienia aż do następnego odczytu. Liczysz % zysku/straty.
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 »

grzegrzyw pisze:
29 kwie 2022, 09:55

Wszystkie ceny muszą być znormalizowane. Jeśli cena będzie miała więcej miejsc po przecinku, niż przewiduje specyfikacja instrumentu, to transakcja nie zostanie wykonana.
Dalej nie rozumiem, dlaczego należy normalizować cenę SL i TP.
Edit/ A może inaczej: rozumiem, że są sytuacje, kiedy należy to robić, ale zastanawiam się czy zawsze jest to konieczne.
Jeśli Ask i Bid są już znormalizowane jako predefiniowalne, a wartości, które należy odjąć/dodać aby uzyskać cenę SL i TP są zmiennymi inputs, które są ustalone dla całego programu w formacje np: 20.00, to jakie jest ryzyko, że program uzyska wartość o większej liczbie miejsc po przecinku? Skoro jedyne działania, jakie wykonuję na tych zmiennych to dodawanie i odejmowanie?

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:
02 maja 2022, 22:52
grzegrzyw pisze:
29 kwie 2022, 09:55

Wszystkie ceny muszą być znormalizowane. Jeśli cena będzie miała więcej miejsc po przecinku, niż przewiduje specyfikacja instrumentu, to transakcja nie zostanie wykonana.
Dalej nie rozumiem, dlaczego należy normalizować cenę SL i TP.
Jeśli Ask i Bid są już znormalizowane jako predefiniowalne, a wartości, które należy odjąć/dodać aby uzyskać cenę SL i TP są zmiennymi inputs, które są ustalone dla całego programu w formacje np: 20.00, to jakie jest ryzyko, że program uzyska wartość o większej liczbie miejsc po przecinku? Skoro jedyne działania, jakie wykonuję na tych zmiennych to dodawanie i odejmowanie?
Tu nie chodzi o ryzyko, tylko o sposób w jaki MT4 wyrzuca cenę.
Z resztą, czytaj tutaj: https://docs.mql4.com/convert/normalizedouble
Po to jest dokumentacja.
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 »

Temat związany z programowaniem. Backtesty.
Gdzie obecnie ścignąć dane do backtestów. Przez F2 nie wchodzi mi na MT4.
Wyświetla się komunikat "There are no new data for a symbol".
Przydałoby się m1 dla S&P500 i NASDAQ. W sumie jakieś Majorsy i GOLD też.
Fajnie by było chociaż od początku roku, ale skoro to m1 albo przynajmniej m5, to wiem że może sporo zajmować przestrzeni.
Z góry dzięki. Z chęcią opiszę wyniki testów, szkoda żeby VPS stał bezczynnie w weekend

ODPOWIEDZ