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 »

rookie2 pisze:
06 lut 2021, 20:48
ninjaproject pisze:
05 lut 2021, 17:14
rookie2 pisze:
05 lut 2021, 12:53
@ninja, Ty lepiej ogarniasz MT4. Czemu indykator po każdym przełączeniu wykresu na inny TF np z m5 na m15 przeładowuje się. Po co to jest tak zrobione? Przez to zmienne globalne są inicjalizowane od nowa, i ustawiane są początkowe wartości a nie te co były ustawione między czasie, przed przełączeniem wykresu. Czemu to jest tak durnie zrobione? Wiem że jest API z funkcjami jak GlobalVariableSet itd, ale ciekawi mnie czemu tak to jest rozwiązane dziwnie.

Albo jak Ty do tego podchodzisz? Jak rozwiązujesz w MT4 problem zmiennych globalncyh w indyku żeby się nie resetowały po każdym przełączniu wykresu.
Jak mu nie zakodujesz usuwania przy zmianie Tf-u, np. to nie będzie usuwał.
Nic nie jest zrobione.
Tylko programista albo rozumie co robi, albo nie rozumie.
Jeżeli nie rozumie, to lepiej żeby nie programował zanim nie zrozumie.
https://docs.mql4.com/basis/function/events
https://www.mql5.com/en/docs/event_handlers/ondeinit

Trzeba rozumieć jak to działa i rozwiązywać problemy tak, żeby kod działał tak, jak programista chce.

A tak bardziej szczegółowo, to zapodaj kod.
Siadłem do kodowania na MT4, a wcześniej tylko kilka prostych EA zrobiłem na tym. Przyzwyczajony jestem do jforex, dlatego mam problem z ogarnięciem. W sumie te funkcje https://docs.mql4.com/globals jak się z nimi oswoiłem trochę to robią to co należy. I przy kilku instrumentach jak wrzucam indykator wtedy robię nazwę zmiennej + ChartSymbol() i mam dla każdego instrumentu ustawioną zmienną. I w sumie tego szukałem i o to pytałem, tylko na początku nie mogłem zatrybić że tutaj na MT4 jest inaczej, to fakt. Anyway. Dzięki za odpowiedź.
Są dwie prostsze funkcje:

Kod: Zaznacz cały

Symbol()
_Symbol
Jeżeli chodzi o zmienne globalne, te do wykorzystania np. przez inne wskaźniki, lub EA, czyli te definowane przez GlobalVariableSet(), to oczywiście, że należy w nazwie takiej zmiennej zawrzeć _Symbol, a nawet inny identyfikator, jeżeli potrzebny jest, i filtrować w ten sposób dla GlobalVariableGet().
Natomiast, dla zmiennych globalnych definiowanych wewnątrz danej funkcji OnCalculate() nie ma potrzeby dodawać _Symbol.
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 »

Panowie szybkie pytanie jak zmienić miejsce przechowywania plików w MT4? Gdy pobierają mi się dane do dziennika, strasznie dużo to waży a że mój dysk C nie jest pojemny, zapycha się i wyskakuje błąd. Używam MT4 od XTB, i szukałem po opcjach, nigdzie nie znalazłem ścieżki którą by można zmienić, ściągnąłem oryginalne , czyste MT4 i tam ową ścieżkę znalazłem ale nie można jej zmienić. Jakieś porady?

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 »

blashka pisze:
12 lut 2021, 10:58
Panowie szybkie pytanie jak zmienić miejsce przechowywania plików w MT4? Gdy pobierają mi się dane do dziennika, strasznie dużo to waży a że mój dysk C nie jest pojemny, zapycha się i wyskakuje błąd. Używam MT4 od XTB, i szukałem po opcjach, nigdzie nie znalazłem ścieżki którą by można zmienić, ściągnąłem oryginalne , czyste MT4 i tam ową ścieżkę znalazłem ale nie można jej zmienić. Jakieś porady?
Nie można.
To system Windows decyduje gdzie znajduje się Folder Danych, i to ma swoje uzasadnienie.
A ścieżkę do folderu danych przecież zawsze masz, gdy otworzysz folder danych...
Trejder, Mentor/trener, aka. Dadas, fx-technik, obecnie ninjaproject.
Programuję wskaźniki i EA do MetaTrader 4/5.

rookie2
Pasjonat
Pasjonat
Posty: 399
Rejestracja: 29 wrz 2020, 00:10

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

Nieprzeczytany post autor: rookie2 »

ninjaproject pisze:
12 lut 2021, 11:34
blashka pisze:
12 lut 2021, 10:58
Panowie szybkie pytanie jak zmienić miejsce przechowywania plików w MT4? Gdy pobierają mi się dane do dziennika, strasznie dużo to waży a że mój dysk C nie jest pojemny, zapycha się i wyskakuje błąd. Używam MT4 od XTB, i szukałem po opcjach, nigdzie nie znalazłem ścieżki którą by można zmienić, ściągnąłem oryginalne , czyste MT4 i tam ową ścieżkę znalazłem ale nie można jej zmienić. Jakieś porady?
Nie można.
To system Windows decyduje gdzie znajduje się Folder Danych, i to ma swoje uzasadnienie.
A ścieżkę do folderu danych przecież zawsze masz, gdy otworzysz folder danych...
Ale można zrobić aplikację działającą w tle, w dzienniku zadań windowsa, która liczyłaby czas spędzaany na komputerze każdego dnia, i uśredniony czas np z ostatnich 7 dni, czyli w jakich godzinach najczęściej siedzi user na kompie, wtedy ta aplikacja by działała. I mogła by sprawdzać rozmiar folderu i kopiować w tle pliki do jakiegoś innego folderu. To nie jest takie trudne, chociaż takie się może wydawać na początku.
W windowsie jest coś takiego jak task scheduler
https://www.windowscentral.com/how-crea ... windows-10
można tam ustawić uruchamianie się jakiegoś zadania
A jeśli chodzi o sckrypt to np
https://stackoverflow.com/questions/986 ... her-folder
Jak poszukać w necie pod hasłami to można ogarnać to wszystko https://stackoverflow.com/questions/128 ... e/12813951
I robisz plik .bat (już teraz nie pamiętam dokładnie jak to się robiło, ale dawniej pracowałem w branży automotive to tam pisałem tego typu skrypty na powershell i stawiałem w schedulerze w windowsie żeby mnie informowały o czymś albo coś tam liczyły cyklicznie itp)
W sumie w każdym innym jezyku tez można, ptyhon, java, c
Do tego można dodać okienko z informacją że zaraz nastąpi kopiowanie żeby nie wyłączać kompa https://stackoverflow.com/questions/774 ... batch-file
i tak dalej

Więc można to m.in w ten sposób zrobić jak z poziomu MT4 sie nie da.
https://www.myfxbook.com/members/rookie_t/pycha-kroczy-przed-upadkiem/7931743

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 »

rookie2 pisze:
12 lut 2021, 21:50
ninjaproject pisze:
12 lut 2021, 11:34
blashka pisze:
12 lut 2021, 10:58
Panowie szybkie pytanie jak zmienić miejsce przechowywania plików w MT4? Gdy pobierają mi się dane do dziennika, strasznie dużo to waży a że mój dysk C nie jest pojemny, zapycha się i wyskakuje błąd. Używam MT4 od XTB, i szukałem po opcjach, nigdzie nie znalazłem ścieżki którą by można zmienić, ściągnąłem oryginalne , czyste MT4 i tam ową ścieżkę znalazłem ale nie można jej zmienić. Jakieś porady?
Nie można.
To system Windows decyduje gdzie znajduje się Folder Danych, i to ma swoje uzasadnienie.
A ścieżkę do folderu danych przecież zawsze masz, gdy otworzysz folder danych...
Ale można zrobić aplikację działającą w tle, w dzienniku zadań windowsa, która liczyłaby czas spędzaany na komputerze każdego dnia, i uśredniony czas np z ostatnich 7 dni, czyli w jakich godzinach najczęściej siedzi user na kompie, wtedy ta aplikacja by działała. I mogła by sprawdzać rozmiar folderu i kopiować w tle pliki do jakiegoś innego folderu. To nie jest takie trudne, chociaż takie się może wydawać na początku.
W windowsie jest coś takiego jak task scheduler
https://www.windowscentral.com/how-crea ... windows-10
można tam ustawić uruchamianie się jakiegoś zadania
A jeśli chodzi o sckrypt to np
https://stackoverflow.com/questions/986 ... her-folder
Jak poszukać w necie pod hasłami to można ogarnać to wszystko https://stackoverflow.com/questions/128 ... e/12813951
I robisz plik .bat (już teraz nie pamiętam dokładnie jak to się robiło, ale dawniej pracowałem w branży automotive to tam pisałem tego typu skrypty na powershell i stawiałem w schedulerze w windowsie żeby mnie informowały o czymś albo coś tam liczyły cyklicznie itp)
W sumie w każdym innym jezyku tez można, ptyhon, java, c
Do tego można dodać okienko z informacją że zaraz nastąpi kopiowanie żeby nie wyłączać kompa https://stackoverflow.com/questions/774 ... batch-file
i tak dalej

Więc można to m.in w ten sposób zrobić jak z poziomu MT4 sie nie da.
Tak to można, nawet prościej.
Ale, nie o to pytał autor pytania.
Przypuszczam, że gdyby wiedział cokolwiek o programowaniu, to by nie pytał.

Zawsze można nawet z poziomu MQL4 napisać wskaźnik, który będzie zbierał dane i zapisywał w dowolnym folderze.
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 »

ninjaproject pisze:
12 lut 2021, 22:36
rookie2 pisze:
12 lut 2021, 21:50
ninjaproject pisze:
12 lut 2021, 11:34

Nie można.
To system Windows decyduje gdzie znajduje się Folder Danych, i to ma swoje uzasadnienie.
A ścieżkę do folderu danych przecież zawsze masz, gdy otworzysz folder danych...
Ale można zrobić aplikację działającą w tle, w dzienniku zadań windowsa, która liczyłaby czas spędzaany na komputerze każdego dnia, i uśredniony czas np z ostatnich 7 dni, czyli w jakich godzinach najczęściej siedzi user na kompie, wtedy ta aplikacja by działała. I mogła by sprawdzać rozmiar folderu i kopiować w tle pliki do jakiegoś innego folderu. To nie jest takie trudne, chociaż takie się może wydawać na początku.
W windowsie jest coś takiego jak task scheduler
https://www.windowscentral.com/how-crea ... windows-10
można tam ustawić uruchamianie się jakiegoś zadania
A jeśli chodzi o sckrypt to np
https://stackoverflow.com/questions/986 ... her-folder
Jak poszukać w necie pod hasłami to można ogarnać to wszystko https://stackoverflow.com/questions/128 ... e/12813951
I robisz plik .bat (już teraz nie pamiętam dokładnie jak to się robiło, ale dawniej pracowałem w branży automotive to tam pisałem tego typu skrypty na powershell i stawiałem w schedulerze w windowsie żeby mnie informowały o czymś albo coś tam liczyły cyklicznie itp)
W sumie w każdym innym jezyku tez można, ptyhon, java, c
Do tego można dodać okienko z informacją że zaraz nastąpi kopiowanie żeby nie wyłączać kompa https://stackoverflow.com/questions/774 ... batch-file
i tak dalej

Więc można to m.in w ten sposób zrobić jak z poziomu MT4 sie nie da.
Tak to można, nawet prościej.
Ale, nie o to pytał autor pytania.
Przypuszczam, że gdyby wiedział cokolwiek o programowaniu, to by nie pytał.

Zawsze można nawet z poziomu MQL4 napisać wskaźnik, który będzie zbierał dane i zapisywał w dowolnym folderze.
W jaki sposób można to zrobić? Aby zapisywał dane w innym folderze z poziomu kodu?

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 »

Tak samo jak wskaźnik, czy EA tworzy wykres offline.
Znajdź taki kod i zobacz jak to się robi.
Dla przykładu:
Spread_Recorder.mq4
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
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 »

Cześć, mam robota który wystawia zlecenie oczekujące które się wypełnia, i zostaje ono zamknięte ręcznie przez użytkownika a nie robota. Jak sprawdzić że zlecenie to zostało zamknięte ręcznie? Pozycje znajduje po tickecie, język MQL4.

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 »

blashka pisze:
23 lut 2021, 16:50
Cześć, mam robota który wystawia zlecenie oczekujące które się wypełnia, i zostaje ono zamknięte ręcznie przez użytkownika a nie robota. Jak sprawdzić że zlecenie to zostało zamknięte ręcznie? Pozycje znajduje po tickecie, język MQL4.
Jeżeli masz kod źródłowy, to dodaj do OrderSend() jakiś charakterystyczny OrderComment().
Wtedy będziesz widział, które pozycje były brane z tego EA.
Sam fakt, że pozycja była zamknięta ręcznie widać po braku jakiegokolwiek komentarza.
Pozycje zamykane z [SL], lub [TP] mają dokładnie takie komentarze.
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 »

ninjaproject pisze:
23 lut 2021, 17:11
blashka pisze:
23 lut 2021, 16:50
Cześć, mam robota który wystawia zlecenie oczekujące które się wypełnia, i zostaje ono zamknięte ręcznie przez użytkownika a nie robota. Jak sprawdzić że zlecenie to zostało zamknięte ręcznie? Pozycje znajduje po tickecie, język MQL4.
Jeżeli masz kod źródłowy, to dodaj do OrderSend() jakiś charakterystyczny OrderComment().
Wtedy będziesz widział, które pozycje były brane z tego EA.
Sam fakt, że pozycja była zamknięta ręcznie widać po braku jakiegokolwiek komentarza.
Pozycje zamykane z [SL], lub [TP] mają dokładnie takie komentarze.
Dzięki za pomysł, nie wziąłem pod uwagi że zamknięcie może zwracać pusty komentarz, ale niestety opornie to działa.
To jest testowy kod na którym to sprawdzałem. Warunek przed wypisaniem "Zamknięto ręcznie!" nie spełnia się i wypisuje tylko drugą część warunku z komentarzem "T"
Próbowałem też z warunkiem OrderComment()!="T" i też się nie spełnia, tak jakby ręczne zamknięcie nie zmieniało komentarza.

#property strict

int ticket;

int OnInit(){

ticket = OrderSend(_Symbol,OP_BUY, 0.01, Ask, 0,0,0,"T");



return(INIT_SUCCEEDED);
}

void OnTick(){

if(OrderSelect(ticket,SELECT_BY_TICKET)){

if(OrderComment()=="") {

printf("Zamknięto ręcznie!");

}else{
printf("OP_BUY comment: " + OrderComment());
}
}

}

ODPOWIEDZ