Jak otworzyć tylko 1 zamówienie, gdy 2 wykresy dają ten sam sygnał?
Pokaż wyniki od 1 do 4 z 4

Wątek: Jak otworzyć tylko 1 zamówienie, gdy 2 wykresy dają ten sam sygnał?

  1. #1
    1 Załącznik(i) Witam, uruchamiam to samo EA na wielu grafikach, wykonuje się i porządkuje, gdy spełnione są warunki przy otwarciu nowej świecy. Ale czasami więcej niż jedna para daje sygnał w tym samym czasie, co skutkuje dwoma otwartymi kolejnościami dokładnie w tym samym czasie, jak pokazano na rysunku.
    Czy mimo to można temu zaradzić i zapobiec realizacji jednego z nakazów?



  2. #2

    Cytat Zamieszczone przez ;
    Witam, uruchamiam to samo EA na wielu grafikach, wykonuje się i porządkuje, gdy spełnione są warunki przy otwarciu nowej świecy. Ale czasami więcej niż jedna para daje sygnał w tym samym czasie, co skutkuje dwoma otwartymi kolejnościami dokładnie w tym samym czasie, jak pokazano na rysunku. Czy mimo to można temu zaradzić i zapobiec realizacji jednego z nakazów? {obraz}
    Oba EA działają w różnych wątkach i są wykonywane asynchronicznie. Jeśli otwierają pozycje dokładnie w tym samym czasie, musisz zmusić je do synchronicznego wykonania za pomocą muteksu.Utwórz muteks. Gdy sygnał otwarcia zostanie spełniony, niech każdy EA pozyska muteks. Po nabyciu mutexu sprawdź, czy otwarte zamówienie już istnieje. Jeśli tak, nie otwieraj kolejnego. Ponieważ tylko jeden EA może pozyskać muteks w danym momencie, EA próbujący go pozyskać będzie musiał poczekać na EA, który jest jego właścicielem. W ten sposób EA nie działają już równolegle, co jest warunkiem wstępnym osiągnięcia tego, czego chcesz. Pracującą implementacją jest
    https://github.com/rosasurfer/mt4-mq...fLib1.mq4#L315(robi o wiele więcej rzeczy niż potrzebujesz), rzeczywisty przypadek użycia
    https://github.com/rosasurfer/mt4-mq...ller.mq4#L1030, wiersze 1049-1051 nigdy nie są wykonywane przez więcej niż dokładnie jeden EA (zachowanie synchroniczne zamiast asynchronicznego).
    https://www.mql5.com/en/docs/globals...setonconditionjest twoim przyjacielem i punktem wyjścia do śledztwa.

  3. #3

    Cytat Zamieszczone przez ;
    {cytat} Oba EA działają w różnych wątkach i są wykonywane asynchronicznie. Jeśli otworzą pozycje dokładnie w tym samym czasie, musisz zmusić je do synchronicznego wykonania za pomocą muteksu. Utwórz muteks. Gdy sygnał otwarcia zostanie spełniony, niech każdy EA pozyska muteks. Po nabyciu mutexu sprawdź, czy otwarte zamówienie już istnieje. Jeśli tak, nie otwieraj kolejnego. Ponieważ tylko jeden EA może pozyskać muteks w danym momencie, EA próbujący go pozyskać będzie musiał poczekać na EA, który jest jego właścicielem. W ten sposób EA nie działają już równolegle, warunek wstępny...
    Ok dziękuję. Więc mutex z moich badań to zewnętrzny plik mqh, prawda?

  4. #4

    Cytat Zamieszczone przez ;
    {cytat} Ok, dziękuję. Więc mutex z moich badań to zewnętrzny plik mqh, prawda?
    Może to być dowolny zasób dostępny przez język programowania ze zdefiniowanym sposobem zarządzania dostępem. W dużym uproszczeniu jest to licznik zliczający liczbę dostępów do zasobu. Taki zasób można też nazwać semaforem, a muteks to specjalny semafor: taki, który ma wzajemny wyłączny dostęp. Oznacza to, że jest to licznik z maksymalną liczbą jednoczesnych dostępów równym 1. Jeśli jeden blok kodu pozyskuje zasób, żaden inny blok kodu nie może tego zrobić (wzajemne wykluczenie). Wszyscy inni muszą poczekać, aż kod, który jest właścicielem zasobu, zwolni go. Nazwij to zamkiem, jeśli chcesz. W MQL możesz użyć uchwytu okna, uchwytu pliku, specjalnej zmiennej lub w przypadku mojego frameworka jest to zwykły ciąg MQL przechowywany w wykresie. GlobalVariableSetOnCondition() umożliwia utworzenie mechanizmu blokowania przy użyciu zmiennej globalnej jako zasobu, do którego można zarządzać dostępem. Wyszukaj GlobalVariableSetOnCondition i zablokuj na forum MQL5, jest kilka przykładowych implementacji. GlobalVariableSetOnCondition() jest częścią MQL specjalnie do tego celu, nic więcej. Ze starej dokumentacji MQL4: Funkcja zapewnia atomowy dostęp do zmiennej globalnej, dzięki czemu może służyć do zapewnienia semafora do interakcji kilku ekspertów pracujących jednocześnie w ramach jednego terminala klienta.

Uprawnienia umieszczania postów

  • Nie możesz zakładać nowych tematów
  • Nie możesz pisać wiadomości
  • Nie możesz dodawać załączników
  • Nie możesz edytować swoich postów
  •  
Używamy cookies
Używamy cookies, aby jak najlepiej dostosować witrynę do Twoich potrzeb. Kontynuowanie przeglądania tej strony, oznacza zgodę na używanie plików cookies. Aby uzyskać więcej informacji zapoznaj się z naszą Polityką Prywatności.