Zapytania o cenę to OrderSend() i OrderModify() i OrderClose().Mistyfikator pisze: ↑28 kwie 2022, 11:43EA ma przefiltrować wszystkie moje otwarte pozycje, celem sprawdzenia, czy ich wartość SL jest większa od ceny otwarcia. Wtedy otwiera kolejną pozycję, ale SL>Openprice jest jedynym warunkiem otwarcia 2, 3, 4, 5...itd pozycjininjaproject pisze: ↑28 kwie 2022, 08:19To while jest do kitu.Mistyfikator pisze: ↑28 kwie 2022, 01:08Właśnie!Kod: Zaznacz cały
while(OrdersTotal<1) {//tu zaczynamy obliczenia wskaźników }
Intrygowało mnie to Magic Number!
Miałem nadzieję, że to jest to
Ja napisałem sobie taką funkcję OrdersTotalPerSymbol().
Oczywiście w niej mam wszystkie warunki, według których chcę filtrować pozycje.
No bo, OrdersTotal() to liczba wszystkich pozycji pływających, więc zasadniczo nieprzydatne to jest, jeżeli EA ma obsługiwać tylko swoje transakcje.
Inaczej mówiąc, OrdersTotal() jest potrzebne, żeby przeszukać wszystkie otwarte pozycje, ale trzeba je przefiltrować.
Poza tym, to EA już działa w pętli, która jest wywoływana OnTick(), więc ono ma robić obliczenia wskaźników OnTick(). Ta pętla while jest zbędna w tym miejscu.
Transakcji nie obsłużysz inaczej niż OnTick(), więc nie ma sensu, żeby wskaźniki były liczone, kiedy ticków nie ma, np. w OnTimer().
Ale zanim to zrobi, ma sprawdzic czy liczba otwartych pozycji jest mniejsza od 1.
Bo jeżeli jest mniejsza od 1, to jedynym zadaniem EA jest obliczanie SMA i czekanie na sygnał kupna/sprzedaży. Dopiero brak otwartych pozycji powinien rozpocząć obliczanie średnich kroczących. O ile to jest konieczne, ale mówiłeś coś pod wątkiem z mojego dziennika o wysyłąniu zapytania o cenę do brokera, tak więc pomyślałęm o rozwiązaniu, które to ograniczy.
OrderModify() może generować najwięcej zapytań w opcji Trailing Stop.
Poza tym, to wszelkie obliczenia bazują zawsze na danych historycznych w MT4, no i tickowych na świecy bieżącej. Nie widzę żadnej potrzeby dla takiej pętli while, a funkcję liczącą transakcje otwarte stosuję dla otwierania transakcji pod zadanym warunkiem.