Wykrywanie brokerów ECN - Strona 2
Strona 2 z 2 PierwszyPierwszy 12
Pokaż wyniki od 11 do 15 z 15

Wątek: Wykrywanie brokerów ECN

  1. #11
    Próbuję zrobić coś trochę niekonwencjonalnego w programowaniu. Zasadniczo mówię EA, aby zignorował wszelkie błędy wyrzucone przez oryginalne żądanie OrderSend, a zamiast tego wyszukał handel za pomocą funkcji OrderSelect (). Jeśli to się powiedzie, EA wie, że handel istnieje. W przypadku wartości false, coś bardzo złego się stało ipowinno być obsługiwane za pomocą bardziej tradycyjnej obsługi błędów.

  2. #12
    1 Załącznik (y) Ron, Uruchomiłem załączony skrypt na obu
    http://global.fxdd.com/en/forex-trad...etatrader.htmli
    http://www.fxcm.com/metatrader.jsp. Wyniki dla FXDD: Skrypt utworzył dwa zlecenia: FXDD jest całkiem zadowolony z (niezerowego) TPSL, który zostanie utworzony z oryginalnym zamówieniem. --- W obu przypadkach FTicket zwrócił kolejność #, a GetLastError () zwróciło 0. --- W obu przypadkach skrypt nigdy nie dotarł do tej etykiety debugowania, a wartość ECNBroker została zwrócona niezmieniona jako false. Jeśli próbujesz utworzyć nowe zamówienie za pomocą MT4 (naciśnij klawisz F9), pola SLTP nie są wyszarzone, tj. Kolejny dowód, że FXDD pozwala na wprowadzanie SLTP wraz z zamówieniem rynkowym. Wyniki dla FXCM: skrypt utworzył tylko jedno zamówienie. --- Dla pierwszego SendOrder (), z niezerową SLTP, zwrócił -1 w FTicket, a GetLastError () zwrócił 130 (Invalid Stops). --- Dla drugiego SendOrder (), z zerowym SLTP, z radością złożył zamówienie, zwrócił kolejność # w FTicket, a GetLastError () zwrócił 0. --- W obu przypadkach skrypt nigdy nie osiągnął tutaj osiągniętego etykieta debugowania, a wartość ECNBroker została zwrócona w niezmienionej postaci jako false. Jeśli próbujesz utworzyć nowe zamówienie za pomocą MT4 (naciśnij klawisz F9), pola SLTP są wyszarzone, tj. Kolejny dowód, że FXCM NIE zezwala na wprowadzanie SLTP wraz z zamówieniem rynkowym. UWAGA: Funkcja d (), której używam do debugowania zamiast instrukcji Print (), po prostu wyprowadza wyniki do .....expertsfilesdebug.txt Podsumowanie: Wszystko zachowuje się dokładnie tak, jak bym się spodziewał. Uruchomiłem skrypt na GOMarkets i uzyskałem dokładnie taki sam wynik jak w FXCM. To tyle, ile mogę zrobić. Powodzenia, David
    https://www.forex-instant.com/attach...1846284676.mq4

  3. #13
    Cytat Zamieszczone przez ;
    Próbuję zrobić coś trochę niekonwencjonalnego w programowaniu. Zasadniczo mówię EA, aby zignorował wszelkie błędy wyrzucone przez oryginalne żądanie OrderSend, a zamiast tego wyszukał handel za pomocą funkcji OrderSelect (). Jeśli to się powiedzie, EA wie, że handel istnieje. W przypadku wartości false, coś bardzo złego się stało ipowinno być obsługiwane za pomocą bardziej tradycyjnej obsługi błędów.
    Problem polega na tym, że wykonywany kod nigdy nie osiąga instrukcji if (ECNBroker) ....... Jeśli zamówienie się nie powiedzie, po prostu zwraca FTicket = -1. Jeśli zamówienia zostaną pomyślnie złożone, OrderSelect () zwraca numer zamówienia w FTicket, a reszta kodu (w tym ECNBroker = true) nigdy nie zostanie wykonana. Zobacz moje komentarze poniżej w czerwonym kroju pisma. Jeśli coś przeoczyłem, przepraszam.
    Wstawiony kod extern bool ECNBroker = False; int SendOrder (string OpenSymbol, int OpenCommand, double OpenVolume, double OpenPrice, int OpenSlippage, double OpenStopLoss, double OpenTakeProfit, string OpenComment, int OpenMagicNumber, datetime OpenExpiration, color OpenColor) {int FTicket = -2; if (! ECNBroker) {FTicket = OrderSend (OpenSymbol, OpenCommand, OpenVolume, OpenPrice, OpenSlippage, OpenStopLoss, OpenTakeProfit, OpenComment, OpenMagicNumber, OpenExpiration, OpenColor); jeśli (FTicket == -1) {return (FTicket); # 91; color = Red # 93;/funkcja kończy się tutaj, jeśli złożenie zamówienia nie powiedzie się # 91;color # 93; } if (OrderTelect (FTicket, SELECT_BY_TICKET, MODE_TRADES)) {return (FTicket); # 91; color = Red # 93;/funkcja kończy się tutaj, jeśli złożenie zamówienia zakończyło się pomyślnie # 91;color # 93; } # 91; color = red # 93;/reszta kodu, od tego miejsca, nigdy nie zostanie wykonana ....... # 91;color # 93; else {ECNBroker = True; }} if (ECNBroker) {FTicket = OrderSend (OpenSymbol, OpenCommand, OpenVolume, OpenPrice, OpenSlippage, 0.0, 0.0, OpenComment, OpenMagicNumber, OpenExpiration, OpenColor); if (FTicket gt; 0) {OrderSelect (FTicket, SELECT_BY_TICKET, MODE_TRADES); OrderModify (FTicket, OrderOpenPrice (), OpenStopLoss, OpenTakeProfit, OrderExpiration (), CLR_NONE); } return (FTicket); }}

  4. #14
    Kilka myśli ... Kiedy broker ECN zawiedzie, ale nie zwraca -1, jak wygląda bilet nr? 0, taki sam dla każdego nieudanego obrotu lub zwykłego biletu nr? Może wrzucenie RefreshRates () bezpośrednio po OrderSend () może pomóc?

  5. #15
    Hanower ma rację, masz tam nieosiągalny kod. Otrzymasz 130 błędów z powrotem, jeśli jest brokerem ECN i dostarczysz SL ilub TP, gdy po raz pierwszy umieścisz transakcję za pomocą funkcji OrderSend (). Osobiście używam zmiennej extern, którą ustawia użytkownik, aby określić, czy jest to ECN czy nie. W zależności od tego, czego chcesz, możesz po prostu założyć, że jest to ECN. tj. wykonaj OrderSend () z 0.0 SL i TP, a następnie natychmiast wykonaj OrderModify z wartościami dla SL i TP. Będzie to działać zarówno dla brokerów ECN, jak i spoza ECN. Mam nadzieję że to pomoże.

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.