Thursday 21 December 2017

Forex ordersend error 130


Jak pokonać błąd Ordersend Error 130 w MetaTrader 4 Popularny popyt, sprawdzone strategie, jak pokonać każdego algorytmika, najgorszy koszmar 8211 Błąd 130 Skąd bierze się ten błąd Co oznacza dla twojego eksperta Jak znaleźć część kodu to powoduje błąd. Zajmujemy się tym wszystkim i więcej8230 Na początek formalna definicja od naszego przyjaciela, Dokumentacja MQL4: That8217s right To wszystko, co dostajesz z MetaQuotes. A reszta8230 Go figure Ordersend Error 130 jest krótko wspomniana w innych sekcjach dokumentacji. Jednak nie ma dokładnego przewodnika po tym, co 8220Invalid Stops8221 faktycznie oznacza i jak sobie z tym poradzić, być może, najczęstszym problemem w programowaniu Forex. Ale nie martwcie się, dlaczego napisałem ten artykuł. Let8217 przeżywają to razem. Milczący zabójca So8230 uruchomiłeś swojego eksperta, a8230 nic się nie dzieje. Brak zamówień KUP, brak zamówień SPRZEDAŻY, brak oczekujących zamówień, nawet komunikatów o błędach w dziennikach 8230. Tylko cisza. Postanawiasz poczekać kilka godzin tygodniowo, a nic tak naprawdę nie zmienia 8211 wykresów, ale nie widać żadnego zysku. To może trwać wiecznie8230 Prawdziwy powód jest prosty 8211, tak naprawdę otrzymujesz ERRINVALIDSTOPS (co jest właściwym terminem technicznym dla problemu), ale nie możesz go zobaczyć. That8217s, ponieważ 130 to cichy zabójca. Zimnokrwisty morderca twojego mózgu i wewnętrzny spokój Nie ma sposobu, aby wykryć ten błąd za pomocą logów eksperta doradcy, a nawet dzienników terminali. Jedynym sposobem, aby go złapać, jest dodanie do kodu właściwych mechanizmów bezpieczeństwa. Oto przykład, który możesz zaadaptować do swojego kodu: To, co tutaj robimy, bierze numer biletu i funkcja OrderSend () zwraca i sprawdza, czy jest mniejsza niż zero. Jeśli tak, to jest to sygnał z MetaTrader 4 informujący nas, że wystąpił problem z żądaniem. Kod błędu jest następnie drukowany na ekranie przy użyciu Alert () i wbudowanej funkcji GetLastError (). Ten kod wyświetli wyskakujące okno, takie jak na obrazku u góry tego artykułu. Uwaga: możesz użyć funkcji Print () zamiast Alert (), aby przekierować wiadomość bezpośrednio do dziennika EA8217s, zamiast wyświetlać ją na ekranie. Core of Ordersend Error 130 Invalid stops to prawdziwe imię sprawcy, z którym mamy do czynienia dzisiaj. Co właściwie oznacza nieprawidłowe zatrzymanie w MetaTrader 4? Dla zlecenia rynkowego (KUPUJ lub SPRZEDAJ) nieprawidłowe zatrzymania oznaczają, że zlecenie StopLoss andor TakeProfit nie było możliwe do ustawienia dla twojego zamówienia. Dlatego, ponieważ żądanie nie może być zrealizowane tylko częściowo, zamówienie nie zostało wykonane w ogóle Dla zlecenia oczekującego (KUP STOP, KUP OGRANICZENIE, SPRZEDAJ STOPĘ lub SPRZEDAJ LIMIT) nieprawidłowe zatrzymania oznaczają, że (1) wystąpiły problemy z SLTP (tak jak powyżej) LUB (2) problem dotyczył ceny wejścia, którą podałeś dla samego zamówienia Jak widać, problem dotyczy zawsze jednej (lub wielu) cen, które twój robot Forex określił w swoim żądaniu serwer handlu. Teraz, gdy znamy naszych wrogów, 8211 let8217 pokonali je 1) StopLoss amp TakeProfit to ceny Istnieje kilka możliwych przyczyn błędów ERRINVALIDSTOPS, a jedną z częstszych wśród początkujących jest określanie StopLoss i TakeProfit w pipsach zamiast rzeczywistych poziomów cen. W ten sposób: Należy jednak zachować ostrożność Niektóre urządzenia EA8217 mają już moduły, które wykrywają liczbę cyfr po przecinku i automatycznie dostosowują parametry wejściowe. W takich sytuacjach pomnożenie wejść przez 10 może w rzeczywistości prowadzić do błędnego działania. Uwaga: Zamierzam opublikować osobny artykuł, w którym omówimy, jak stworzyć własne moduły do ​​wykrywania liczby cyfr po przecinku 3) Brokerzy ECN Konta ECN mają swoją specyfikę. Jedną z nich jest 8211, gdy handlujesz za pośrednictwem brokera ECN, nie możesz ustawić StopLoss andor TakeProfit z Twoim zleceniem rynkowym (KUP lub SPRZEDAĆ). Jeśli spróbujesz zrobić to 8211, otrzymasz błąd 130. Oczywiście musisz ustawić StopLoss (i być może TakeProfit) dla swojego zamówienia, a to musi zostać wykonane jak najszybciej po wykonaniu zlecenia. Spróbuj tego kodu: Możesz dodać tę funkcję do swojego kodu (na samym końcu), a następnie użyć go zamiast OrderSend () w głównym kodzie. Ta funkcja dodaje dodatkowy krok w procesie wysyłania zlecenia rynkowego. Najpierw wysyła żądanie wykonania zlecenia rynkowego rozbierając stopLoss i TakeProfit. Następnie modyfikuje nowo otwarte zlecenie rynkowe, dodając pożądane SL i TP. Istnieje oczywiście ryzyko, że zamówienie zostanie zrealizowane, ale modyfikacja zakończy się niepowodzeniem. Jednak w takim przypadku funkcja natychmiast powiadomi przedsiębiorcę, że stopLoss i TakeProfit nie zostały ustawione. Możesz zmodyfikować tę funkcję zgodnie ze swoimi potrzebami i stylem handlu. 4) Poziomy Stopu Stopu to mechanizm dla brokerów, który chroni się przed niektórymi zmiennościami i ryzykami związanymi z płynnością. W prostych słowach nie będziesz mógł ustawić limitu StopLoss, TakeProfit lub innego oczekującego zlecenia bliżej niż z góry ustalona liczba Pipsów do aktualnej ceny rynkowej. Aby dowiedzieć się, jaki poziom Stopu dotyczy konkretnej pary walutowej, należy nacisnąć CTRLU na klawiaturze, wybrać żądaną parę walutową i kliknąć przycisk 8220Properties8221, jak pokazano na poniższej ilustracji: W tym przykładzie Stop Level dla AUDUSD wynosi 3 Pipsy . Oznacza to, że nie będziesz mógł ustawić StopLoss dla swojego zamówienia bliżej niż 3 Pipsy do ceny, przy której zamówienie zostanie otwarte. Oznacza to również, że wszelkie oczekujące zamówienia będą musiały zostać ustalone co najmniej 3 Pipsy od aktualnej ceny rynkowej. Jeśli robot spróbuje złamać te zasady i ustawić StopLoss TakeProfit lub Zamówienie oczekujące w zakresie Stop Level, otrzyma błąd 130 82Invalid Stops8221. Pamiętaj tylko o poziomie Stop waluty, w której Twoje karty EA8217 handlują 8211 don8217t określają zbyt małe parametry StopLoss i TakeProfit. Warto również zauważyć, że bardziej egzotyczne pary walutowe mogą mieć znacznie bardziej znaczące poziomy Stop. Na przykład dla AUDNZD poziom Stop z tym samym brokerem, jak w powyższym przykładzie, wynosi 20 pipsów. Dla GBPSEK (British Pound vs Swedish Krone) 8211 it8217s 100 Pips. 5) Normalizacja debelów W przypadku niektórych brokerów można zauważyć, że z nieznanego powodu ceny Ask i Bid są przekazywane do tradera z dodatkowymi, pomijalnymi cyframi po przecinku. Na przykład: Zamiast 1.1606 broker dałby ci 1.160600001 Teraz to zjawisko nie ma wpływu na ręczny handel, ponadto, ponieważ terminal MT4 jest sztywno podłączony do wyświetlania pewnej liczby cyfr po przecinku dziesiętnym (4 lub 5) 8211, nie będziesz być w stanie zauważyć jakąkolwiek różnicę Jednak te 8216niezależne8217 cyfry po przecinku mogą mieć dramatyczny wpływ na doradców ekspertów, powodując823082308230, co jest prawdą. Nasz stary przyjaciel, OrderSend Error 130 Here8217s to strategia, której ja osobiście używam do ochrony moich robotów przed tym problemem: zgrabny mały trik pozwala na znormalizowanie (w prostych kategoriach 8211 rundy) wszelkich cen wprowadzanych do funkcji OrderSend (). W ten sposób odetniesz wszystkie cyfry 8216negligible8217 po kropce dziesiętnej. Wnioski Dzisiaj zobaczyliśmy, że może istnieć wiele (co najmniej 5) przyczyn błędu 130. Chociaż jest to kilka, podstawowe problemy są banalne i mogą być poprawione w ciągu kilku minut. Dlatego nie należy obawiać się błędu 130 Jeśli napotkasz tego sprawcę, to jest to tylko kwestia przejrzenia powyższej listy, znalezienia sytuacji, która dotyczy ciebie i zastosowania przepisanego rozwiązania. Mam nadzieję, że ten artykuł był przydatny. Daj mi znać, jeśli masz jakieś pytania, korzystając z poniższej sekcji komentarzy. Na co czekasz, JESZCZE ROZPOCZĘŁA SIĘ Z ADADEMIKIEM FOREX TRADINGS OrderSend (ciąg znaków symbol int cmd. Operacja podwójna objętość, objętość podwójna cena, cena int poślizgnięcie, poślizg, podwójna stoploss, stop loss, podwójny takeprofit, take profit string commentNULL, komentarz int magic0 , magiczny numer daty ważności, data ważności, kolor oczekujący, data ważności, kolor strzałki) w symbolu handlu. w rodzaju operacji. Może to być dowolne wyliczenie operacji handlowej. w liczbie partii. w Maksymalnym poślizgu ceny dla zamówień kupna lub sprzedaży. w Stop Stop loss. w Take profit profit. w Zamów komentarz tekstowy. Ostatnia część komentarza może zostać zmieniona przez serwer. w porządku magiczna liczba. Może być używany jako identyfikator zdefiniowany przez użytkownika. w zamówieniu czasu wygaśnięcia (tylko dla zamówień oczekujących). w kolorze strzałki otwierającej na wykresie. Brak parametru lub strzałka otwierająca wartość CLRNONE nie jest narysowana na wykresie. Zwraca numer biletu przypisanego do zamówienia przez serwer handlu lub -1, jeśli zawiedzie. Aby uzyskać dodatkowe informacje o błędzie, należy wywołać funkcję GetLastError (). Przy otwieraniu zlecenia rynkowego (OPSELL lub OPBUY), tylko aktualne ceny Bid (na sprzedaż) lub Ask (na zakup) mogą być używane jako cena otwarta. Jeśli operacja jest wykonywana z zabezpieczeniem innym niż bieżące, funkcja MarketInfo () musi być używana z parametrami MODEBID lub MODEASK w celu uzyskania najnowszych ofert dla tego zabezpieczenia. Nie można zastosować ceny obliczonej lub niezormowanej. Jeśli w wątku ceny nie ma żądanej ceny otwarcia lub nie została ona znormalizowana w zależności od liczby cyfr po przecinku dziesiętnym, zostanie wygenerowany błąd 129 (ERRINVALIDPRICE). Jeśli żądana cena otwarcia jest całkowicie nieaktualna, błąd 138 (ERRREQUOTE) zostanie wygenerowany niezależnie od parametru poślizgu. Jeśli żądana cena jest nieaktualna, ale obecna w wątku, zamówienie zostanie otwarte po aktualnej cenie i tylko wtedy, gdy aktualna cena mieści się w przedziale wahań cen. Poziomy StopLoss i TakeProfit nie mogą być zbyt zbliżone do rynku. Minimalną odległość poziomów stopu w punktach można uzyskać za pomocą funkcji MarketInfo () z parametrem MODESTOPLEVEL. W przypadku błędnego lub niezormowanego poziomu zatrzymania zostanie wygenerowany błąd 130 (ERRINVALIDSTOPS). Zerowa wartość parametru MODESTOPLEVEL oznacza brak jakichkolwiek ograniczeń minimalnej odległości dla Stop LossTake Profit lub fakt, że serwer handlu wykorzystuje niektóre mechanizmy zewnętrzne do dynamicznej kontroli poziomu, których nie można przetłumaczyć w terminalu klienta. W drugim przypadku GetLastError () może zwrócić błąd 130, ponieważ MODESTOPLEVEL jest w rzeczywistości tutaj cytowany. Przy składaniu oczekującego zamówienia cena otwarta nie może być zbyt zbliżona do rynku. Minimalną odległość oczekującej ceny od bieżącego rynku można uzyskać za pomocą funkcji MarketInfo () z parametrem MODESTOPLEVEL. W przypadku fałszywej ceny otwarcia zlecenia oczekującego zostanie wygenerowany błąd 130 (ERRINVALIDSTOPS). Stosowanie oczekującego terminu wygaśnięcia zamówienia można wyłączyć na niektórych serwerach handlowych. W takim przypadku, gdy w parametrze wygasania zostanie podana wartość niezerowa, zostanie wygenerowany błąd 147 (ERRTRADEEXPIRATIONDENIED). Na niektórych serwerach transakcyjnych całkowita liczba otwartych i oczekujących zamówień może być ograniczona. Jeśli ten limit zostanie przekroczony, żadne nowe zamówienie nie zostanie otwarte (lub nie zostanie złożone żadne zlecenie oczekujące), a serwer handlu zwróci błąd 148 (ERRTRADETOOMANYORDERS). -------------------------------------------------- ---------------- Funkcja uruchamiania programu skryptowego ------------------------------ ------------------------------------ void OnStart () --- uzyskać minimalny poziom zatrzymania double minstoplevel MarketInfo (Symbol (), MODESTOPLEVEL) Drukowanie (quotMinimum Stop Levelquot, minstofield, quot pointsquot) double price Ask --- obliczone ceny SL i TP muszą być znormalizowane double stoploss NormalizeDouble (Bid - minstoplevel Point. Digits) double takeprofit NormalizeDouble (Bid minstoplevel Point Cyfry) --- umieść zlecenie rynkowe, aby kupić 1 lot int ticket OrderSend (Symbol (), OPBUY, 1, cena, 3, stoploss, takeprofit, quotMy orderquot, 16384,0, clrGreen) if (ticketlt0) Drukuj (quotOrderSend failed z błędem quot. GetLastError ()) else Drukuj (quotOrderSend został pomyślnie dodany) --- Zmęczony otwarciem rozkazów w systemie testowym, a także otrzymaniem i błędem 130. Powiedziano mi, że nie można otwierać zamówień za pośrednictwem EAs tylko na koncie treningowym relacja na żywo. Oczywiście byłoby to szalone, aby przetestować je na żywo. Powiedzieli, że się w to zaglądają, cokolwiek to znaczy. Podsumowując, jeśli nie mogę tego przetestować, nie używam go. Możesz jednak uruchomić swoje EA na testerze strategii. ale to nie robi tego dla mnie, muszę się upewnić, że moje transakcje są realizowane z Oandą i jedynym sposobem, w jaki mogę to zrobić, jest najpierw wymiana na koncie demo. Testuję moją platformę metadanikową Oanda na Oanda. Jednak po prostu nie mogę otworzyć pozycji z Ordersend. Błąd Ordersend (130): lot-size: 0,1, Zapytaj: 1.3969, SL: 1.3899, TP: 1.4069 Co jest nie tak z zamówieniem, które później znalazłem i odpowiedzią, która zadziałała dla mnie, przejdź do: ToolsgtOptionsgtExpert Advisors TabgtCheck box, które mówi quotAllow Live Tradingquot i zapisz zmianę. Powinieneś dostać twarz uśmiechu w prawym górnym rogu wykresu. Konto, które handlujesz, musi być skonfigurowane jako konto MT4 w Oanda. tzn. możesz utworzyć konto podrzędne, a kiedy to zrobisz, ma opcję włączenia MT4. Mam nadzieję, że to pomaga komuś. Później znalazłem i odpowiedziałem, że pracował dla mnie, przejdź do: ToolsgtOptionsgtExpert Advisors TabgtCheck pole, które mówi quotAllow Live Tradingquot i zapisać zmiany. Powinieneś dostać twarz uśmiechu w prawym górnym rogu wykresu. Konto, które handlujesz, musi być skonfigurowane jako konto MT4 w Oanda. tzn. możesz utworzyć konto podrzędne, a kiedy to zrobisz, ma opcję włączenia MT4. Mam nadzieję, że to pomaga komuś. Nie ma to nic wspólnego z błędem 130.

No comments:

Post a Comment