Radzenie sobie z „Nieprawidłową ceną”, „Ponowną wyceną”, „Serwer zajęty” w MT4
Pokaż wyniki od 1 do 3 z 3

Wątek: Radzenie sobie z „Nieprawidłową ceną”, „Ponowną wyceną”, „Serwer zajęty” w MT4

  1. #1
    W środowisku ea na żywo w zeszłym tygodniu przegapiłem kilka wpisów w zaprogramowanym czasie z powodu nieprawidłowej ceny (błąd 129), która pochodziła głównie z rynku, który odszedł od mojej ceny wejścia poza zestaw poślizgu.

    ea jest zaprogramowany do handlu tylko pod warunkiem i tylko w ramach przydzielonego słupka/minutę, więc nie wysłał ponownie zlecenia, aby uzyskać wypełnienie po błędzie 129.

    Jak mogę tego uniknąć, nie uzyskując przypadkowo większej liczby wypełnień niż zamierzono?

    e jest zaprogramowany do jednoczesnego wysyłania zarówno kupna, jak i sprzedaży. Kilka razy wypełniono tylko jedną stronę. Potrzebuję go, aby wypełniał obie strony CAŁY CZAS, gdy generowany jest sygnał.

    Oto podstawowa procedura zakupu i zmiany, które wprowadziłem w celu ponownego wysłania zamówienia po błędzie 129. (Logika strony sprzedaży jest taka sama).

    Myślę, że to zadziała… JEDNAK obawiam się, że przy tym kodzie istnieje możliwość, że wypełni się 2 zakupami lub 2 sprzedażami zamiast 1 każdego.

    Rozumiem, że mogę zapętlić i wyszukać (OrderType() == OP_BUY), kiedy próbowałem tego, oryginalne zamówienie nie zostało wysłane ani wypełnione.

    Jak mogę sprawić, by to działało zgodnie z przeznaczeniem i zawsze wypełniało się 1 kupnem i 1 sprzedażą po błędzie 129, i nie przypadkowo wypełniało się 2 zakupami lub 2 sprzedażami?

    Kod poniżej:
    **************************

    anuluj fKup1()
    {//RefreshRates();
    while(IsTradeContextBusy()) Sleep(100);
    Odśwież stawki();
    int wynik = OrderSend(Trade,OP_BUY,Lots,Ask,MaxSlippage,0,0,Op en LONG 1B,Magic1B,0,Blue);
    int check = GetLastError();
    if(check != 0) { Print(Błąd wysyłania zamówienia!!! Kod błędu: , check, , ErrorDescription(check)); if (((check == 129) || (check == 138) || (check == 4) || (check == 137)) (OrdersTotal() lt; 2)) fBuy1();}
    Print(NormalizeDouble(AccountMargin(),2), MR,/, NormalizeDouble(AccountFreeMargin(),2), FM Dostępne,/Około AE: , NormalizeDouble(AccountEquity(),2),/M %: , NormalizeDouble (AccountInfoDouble(ACCOUNT_MARGIN_LEVEL),2), % );
    }

  2. #2
    Oczywiście odpowiedź brzmi: dlaczego po prostu tego nie przetestujesz i zobaczysz, co się stanie. TAk. Rozumiem, że powyższy nowy kod to LIVE. Jednak e w wolnym tygodniu dokonuje tylko dwóch wpisów, aw pracowitym tygodniu może 8 lub 12 wpisów. Również błędy nie są generowane dla każdego zestawu transakcji, więc trudno jest wiedzieć, kiedy to nastąpi. Zastanawiałem się, czy ktoś ma pomysły na prawidłowe obejście tych (typów) błędów, pamiętając o moich parametrach powyżej. Z góry dziękuję.

  3. #3
    zgaduję, że nie zidentyfikowano żadnego rzeczywistego rozwiązania - zawsze istnieje ryzyko, że nie będziesz w stanie wypełnić żądanej ceny. Zrobiłem koszyk zamówień i użyłem timera zdarzenia, aby ponawiać próbę raz na sekundę do maksymalnej liczby prób, zanim się poddam - ale jeśli cena się zmieni, musisz albo przenieść się z nią, albo mieć nadzieję, że cofnie się w maksymalnej liczbie prób. (5 zgodnie z kodem). Możesz zobaczyć kod tutaj:
    https://www.forex-instant.com/bitcoi...er-winner.htmlEA używa eventów - niestety MQ4 nie obsługuje eventów w egy testerze. W każdym razie utwórz dwa koszyki zamówień, jeden do kupna, a drugi do sprzedaży, a po ich wypełnieniu (indywidualnie) wyczyść wypełnione zamówienie i miej nadzieję, że oba zostaną wypełnione w maksymalnej liczbie prób.

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.