MQL4, funkcja zaznaczania zleceń (które zostały otwarte ręcznie)

O jezykach programowania w platformach i nie tylko.
mientek
Uczestnik
Uczestnik
Posty: 2
Rejestracja: 06 lis 2022, 13:08

MQL4, funkcja zaznaczania zleceń (które zostały otwarte ręcznie)

Nieprzeczytany post autor: mientek »

Witam.
Programuję w MQL4 bota do handlu na giełdzie. Bot generalnie działa od kilku tygodni, nawet już zdążył zarobić, ale cały czas go udoskonalam.
Tym razem mam problem i nie wiem jak go rozwiązać, mianowicie:
Jeżeli EA otworzy pozycję, to automatycznie ma nad nią kontrolę (cały czas ją "sprawdza" i wie kiedy ewentualnie zamknąć).
Natomiast jeżeli ja otworzę pozycję ręcznie, to pozycja ta nie jest kontrolowana przez EA (a w momencie kiedy EA uzna, że są dobre warunki do otwarcia pozycji, to otwiera raz jeszcze, a tego nie chcemy).

Generalnie chciałbym to zrobić tak, aby EA po włączeniu najpierw sprawdziło, czy są już otwarte jakieś pozycje.
Jeżeli nie ma, to standardowo czekamy na określone warunki do otwarcia.
Jeżeli jest już jakaś pozycja, to nie otwiera kolejnej tylko przejmuje kontrolę nad tą otwartą.

Mój pomysł jest taki, żeby na starcie EA użyć funkcji OrdersTotal i zadać warunek jeżeli OrdersTotal > 0, to wiadomo, że jakaś pozycja jest już otwarta
(a tak przy okazji, moje EA działa na kilku instrumentach finansowych. Czy funkcja OrdersTotal pokaże mi ilość zleceń ogólnie z całego terminala, czy tylko z tego instrumentu, na którym działa EA?)
Następnie funkcja OrderSelect, zaznaczanie pozycji.
I teraz najtrudniejsze. Jak użyć funkcji OrderSelect, żeby zaznaczyć pozycję, która została otwarta nie przez EA, a ręcznie?
Jeżeli pozycję otwiera EA, to z automatu pobiera ticket lub magic number, który jest potrzebny by program "kontrolował" zlecenie
A jak pobrać ticket lub magic numer pozycji, jeżeli ta została otwarta ręcznie? Tylko tej wiedzy mi potrzeba, jak użyć poprawnie funkcji OrderSelect, a z resztą już sobie poradzę.

Dodam że mam uruchomione 4 EA na 4 instrumentach jednocześnie, więc czasami mam w terminalu i 4 otwarte pozycje na raz.

Awatar użytkownika
ninjaproject
Maniak
Maniak
Posty: 4944
Rejestracja: 30 lip 2019, 13:15

Re: MQL4, funkcja zaznaczania zleceń (które zostały otwarte ręcznie)

Nieprzeczytany post autor: ninjaproject »

mientek pisze:
06 lis 2022, 13:27
Witam.
Programuję w MQL4 bota do handlu na giełdzie. Bot generalnie działa od kilku tygodni, nawet już zdążył zarobić, ale cały czas go udoskonalam.
Tym razem mam problem i nie wiem jak go rozwiązać, mianowicie:
Jeżeli EA otworzy pozycję, to automatycznie ma nad nią kontrolę (cały czas ją "sprawdza" i wie kiedy ewentualnie zamknąć).
Natomiast jeżeli ja otworzę pozycję ręcznie, to pozycja ta nie jest kontrolowana przez EA (a w momencie kiedy EA uzna, że są dobre warunki do otwarcia pozycji, to otwiera raz jeszcze, a tego nie chcemy).
Generalnie chciałbym to zrobić tak, aby EA po włączeniu najpierw sprawdziło, czy są już otwarte jakieś pozycje.
Jeżeli nie ma, to standardowo czekamy na określone warunki do otwarcia.
Jeżeli jest już jakaś pozycja, to nie otwiera kolejnej tylko przejmuje kontrolę nad tą otwartą.
To się potrzebujesz zdecydować co EA ma robić i jeżeli ma zarządzać wszystkimi pozycjami, to nie możesz funkcji EA filtrować przez magic, tylko musi sprawdzać wszystkie pozycje.
mientek pisze:
06 lis 2022, 13:27
Mój pomysł jest taki, żeby na starcie EA użyć funkcji OrdersTotal i zadać warunek jeżeli OrdersTotal > 0, to wiadomo, że jakaś pozycja jest już otwarta
(a tak przy okazji, moje EA działa na kilku instrumentach finansowych. Czy funkcja OrdersTotal pokaże mi ilość zleceń ogólnie z całego terminala, czy tylko z tego instrumentu, na którym działa EA?)
OrdersTotal() zwraca ilość wszystkich otwartych pozycji.
mientek pisze:
06 lis 2022, 13:27
Następnie funkcja OrderSelect, zaznaczanie pozycji.
I teraz najtrudniejsze. Jak użyć funkcji OrderSelect, żeby zaznaczyć pozycję, która została otwarta nie przez EA, a ręcznie?
Jeżeli pozycję otwiera EA, to z automatu pobiera ticket lub magic number, który jest potrzebny by program "kontrolował" zlecenie
A jak pobrać ticket lub magic numer pozycji, jeżeli ta została otwarta ręcznie? Tylko tej wiedzy mi potrzeba, jak użyć poprawnie funkcji OrderSelect, a z resztą już sobie poradzę.
https://docs.mql4.com/trading/orderselect
Trejder, Mentor/trener, aka. Dadas, fx-technik, obecnie ninjaproject.
Programuję wskaźniki i EA do MetaTrader 4/5.

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

Re: MQL4, funkcja zaznaczania zleceń (które zostały otwarte ręcznie)

Nieprzeczytany post autor: grzegrzyw »

Pozycje otwierane ręcznie otwieraj przy pomocy skryptu lub utwórz w EA buttony do ręcznego otwierania pozycji i wtedy możesz im nadać dowolny magic numer lub komentarz i na tej podstawie możesz zlecić co EA ma robić z tymi ręcznymi zleceniami.

mientek
Uczestnik
Uczestnik
Posty: 2
Rejestracja: 06 lis 2022, 13:08

Re: MQL4, funkcja zaznaczania zleceń (które zostały otwarte ręcznie)

Nieprzeczytany post autor: mientek »

grzegrzyw pisze:
06 lis 2022, 22:59
Pozycje otwierane ręcznie otwieraj przy pomocy skryptu lub utwórz w EA buttony do ręcznego otwierania pozycji i wtedy możesz im nadać dowolny magic numer lub komentarz i na tej podstawie możesz zlecić co EA ma robić z tymi ręcznymi zleceniami.
To inaczej.
Mam odpalone 4 instrumenty finansowe i na każdym z nich pracuje jeden EA.
Załóżmy że każdy z EA otworzył jedną pozycję, mam 4 otwarte pozycje.
Teraz przypadek losowy- brak prądu, brak internetu, restart komputera, zawiecha windowsa. Cokolwiek, co przerwie działanie EA.

Teraz odpalam na nowo kompa oraz odpalam MT4. Mam 4 otwarte pozycje, nad którymi EA stracił kontrolę.
Jak odzyskać numery ticket tych pozycji?
Lub w jaki sposób odfiltrować je odpowiednio z terminala funkcją orderselect(), aby znów do każdego EA "włożyć" kontrolowanie odpowiedniej pozycji z odpowiedniego instrumentu finansowego.

Awatar użytkownika
ninjaproject
Maniak
Maniak
Posty: 4944
Rejestracja: 30 lip 2019, 13:15

Re: MQL4, funkcja zaznaczania zleceń (które zostały otwarte ręcznie)

Nieprzeczytany post autor: ninjaproject »

mientek pisze:
08 lis 2022, 21:00
grzegrzyw pisze:
06 lis 2022, 22:59
Pozycje otwierane ręcznie otwieraj przy pomocy skryptu lub utwórz w EA buttony do ręcznego otwierania pozycji i wtedy możesz im nadać dowolny magic numer lub komentarz i na tej podstawie możesz zlecić co EA ma robić z tymi ręcznymi zleceniami.
To inaczej.
Mam odpalone 4 instrumenty finansowe i na każdym z nich pracuje jeden EA.
Załóżmy że każdy z EA otworzył jedną pozycję, mam 4 otwarte pozycje.
Teraz przypadek losowy- brak prądu, brak internetu, restart komputera, zawiecha windowsa. Cokolwiek, co przerwie działanie EA.

Teraz odpalam na nowo kompa oraz odpalam MT4. Mam 4 otwarte pozycje, nad którymi EA stracił kontrolę.
Jak odzyskać numery ticket tych pozycji?
Lub w jaki sposób odfiltrować je odpowiednio z terminala funkcją orderselect(), aby znów do każdego EA "włożyć" kontrolowanie odpowiedniej pozycji z odpowiedniego instrumentu finansowego.
Przecież podałem ci link, tam wszystko jest napisane!
https://docs.mql4.com/trading/orderselect
Przez OrderSelect pobierasz wszystkie info o pozycjach.
https://docs.mql4.com/trading
Można też przez C Trade.

Masz dwa parametry, za pomocą których przypisujesz pozycje do EA:
OrderMagicNumber() i OrderComment().
Co jest w tym niezrozumiałego?

Zasadniczo ideą EA jest zarządzanie pozycjami.
Można zarządzać wszystkimi pozycjami z jednego EA, albo tylko tymi z danego instrumentu.
W jaki sposób EA rozpoznaje, że dana pozycja należy do danego instrumentu?
Przez pętlę for i OrderSelect(), w której wyszukuje OrderSymbol().
I wykonuje zarządzanie if(OrderSymbol()==_Symbol).
Tak samo jest z wszystkimi pozostałymi parametrami transakcji.
W OrderSend() przypisujesz transakcjom m.in. MagicNumber i comment.
Trejder, Mentor/trener, aka. Dadas, fx-technik, obecnie ninjaproject.
Programuję wskaźniki i EA do MetaTrader 4/5.

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

Re: MQL4, funkcja zaznaczania zleceń (które zostały otwarte ręcznie)

Nieprzeczytany post autor: grzegrzyw »

Miałem Ci odpisać, ale lepiej odemnie zrobił to Darek, więc się nie będę produkować. Masz wszystko podane jak na tacy.

ODPOWIEDZ