Problemy z kodowaniem lokalnych i globalnych zmiennych na mql4
Pokaż wyniki od 1 do 10 z 10

Wątek: Problemy z kodowaniem lokalnych i globalnych zmiennych na mql4

  1. #1
    2 Załącznik (-i) Cześć,
    Jestem całkiem nowy w mql4. Robiłem dobrze, ale ostatnio byłem całkowicie zaskoczony przez problem, który napotkałem. Zakodowałem prosty ea, który działa dobrze, gdy deklaruję zmienną lokalną dla buyorder
    int buyorder = OrderSend (Symbol (), OP_BUY, LotSize, Ask, 3,0,0, NULL, MagicNumber, 0, Green);

    if (buyordergt; 0)
    OrderModify (buyorder, OrderOpenPrice (), bsl, btp, 0, CLR_NONE);

    ale jeśli deklaruję buyorder jako zmienną globalną (i usuwam int), to nie działa. Po prostu modyfikuje zamówienia nieskończone. Dla mojego życia nie mogę zrozumieć, dlaczego tak się stanie, ponieważ zmienna globalna powinna być dostępna w dowolnym miejscu w programie, a jej wartość powinna być w stanie się zmienić. Mógłbym trzymać się zmiennej lokalnej, ale chcę rozszerzyć ea, aby wykonać wiele zamówień i użyć trailing stopów itp. I będę musiał użyć zmiennych globalnych. Załączam ea poniżej. Pierwsza wersja (zmienna lokalna) działa, druga (globalna) nie. Jeśli ktokolwiek mógłby mi pomóc, byłby to tak doceniane, że dosłownie spędziłem kilka dni próbując to wypracować. PS Dotyczy to również zmiennej sprzedawca.
    Dzięki

    https://www.forex-instant.com/attach...1727520325.mq4

    https://www.forex-instant.com/attach...1081469781.mq4

  2. #2

    Cytat Zamieszczone przez ;
    Cześć, jestem całkiem nowy w mql4. Robiłem dobrze, ale ostatnio byłem całkowicie zaskoczony przez problem, który napotkałem. Dla mojego życia nie mogę zrozumieć, dlaczego to ...
    Zacznij od wykonania prawidłowego wcięcia kodu. Formatowanie jest naprawdę słabe.
    https://en.wikipedia.org/wiki/Indent_styleNastępnie dołącz wszystkie instrukcje ifblocks w nawiasach klamrowych {}. Następnie zobaczysz, że używasz niezdefiniowanejniezainicjowanej zmiennej w jednym z programów. Kompilator nie powinien go pomyślnie skompilować. Lub, że zmienna nie jest aktualizowana w drugiej wersji. Proponowałbym także zdefiniowanie wszystkich zmiennych lokalnych u góry każdej funkcji i użycie nawiasów klamrowych do zamknięcia wszystkich bloków. Prawdopodobnie zapewniłoby to informację zwrotną za pośrednictwem kompilatora, że ​​coś jest nie tak. TLDR: Złe formatowanie kodu; Zagnieżdżanie instrukcji if bez nawiasów klamrowych; Inline variable declaration Tricking kompilatora w zatwierdzanie złego kodu; Kod nie działa zgodnie z oczekiwaniami.

  3. #3
    Kiedy deklarujesz zmienną lokalną, jest ona dostępna tylko podczas jednej instancji, od której zaczyna się {}. Za każdym razem, gdy uruchomi się {}, ponownie deklaruje zmienną. Patrząc na swój kod, zmienna buyorder jest wywoływana tylko wtedy, gdy nie ma otwartych zamówień BUY, a nowe zamówienie jest otwarte. Jeśli zamówienie istnieje, to zmienna buyorder jest pomijana przez instrukcje if i dlatego nie jest deklarowana, a więc procedura modyfikacji zamówienia nie jest wywoływana. tj. jeśli kupujący nie zostanie wezwany, to kupujący pozostaje niezadeklarowany lub ma wartość zerową lub zerową, jak kuporder gt; 0 to fałsz. W związku z tym brak modyfikacji zamówienia. Z drugiej strony, jeśli zadeklarujesz globalną zmienną, to buyorder zachowa wartości, a więc kod zapisany będzie próbował za każdym razem modyfikować, jak buyorder gt; 0 jest prawdziwe. Mam nadzieję, że to pomoże Fredowi

  4. #4
    Dzięki Fred, Dzięki Xaphod, Tak łatwo popełnić błąd z tym kodowaniem !! Zdecydowanie postaram się uczynić kodowanie bardziej czytelnym. Jeszcze raz dziękuję za Twój wkład!

  5. #5

    Cytat Zamieszczone przez ;
    Dzięki Fred, dzięki, tak łatwo popełnić błąd z tym kodowaniem !! Zdecydowanie postaram się uczynić kodowanie bardziej czytelnym. Jeszcze raz dziękuję za Twój wkład!
    Możesz zadzwonić do OrderModify tylko raz po zamówieniu. Wtedy nie ma znaczenia, czy zakup jest lokalny, czy globalny. Lokalny jest lepszy. Wstawiony kod int buyorder = 0; if (PreviousFastlt; PreviousSlow CurrentFastgt; CurrentSlow) {if (OpenOrdersThisPair (Symbol ()) == 0) {kuporder = OrderSend (Symbol (), OP_BUY, LotSize, Ask, 3,0,0, NULL, MagicNumber, 0, Zielony ); if (buyordergt; 0) {OrderModify (buyorder, OrderOpenPrice (), bsl, btp, 0, CLR_NONE); }}}

  6. #6

    Cytat Zamieszczone przez ;
    Nie mogę zrozumieć, dlaczego tak się stanie, ponieważ zmienna globalna powinna być dostępna w dowolnym miejscu
    To jest dokładny problem. To problem z zakresu. W obu przykładach instrukcje if (lt; buyordersellordergt; gt; 0) mają niewłaściwy zakres; z tą różnicą, że zakres zamawiającegosprzedawcy zmienia się wraz z przykładami, powodując zły efekt w drugim przykładzie. Zobacz przykładowy kod Xaphod w celu poprawnego określania zakresu. Jeśli mogę zapytać, w jakim języku używasz kodu?

  7. #7

    Cytat Zamieszczone przez ;
    {quote} To jest dokładny problem. To problem z zakresu. W obu przykładach instrukcje if (lt; buyordersellordergt; gt; 0) mają niewłaściwy zakres; z tą różnicą, że zakres zamawiającegosprzedawcy zmienia się wraz z przykładami, powodując zły efekt w drugim przykładzie. Zobacz przykładowy kod Xaphod w celu poprawnego określania zakresu. Jeśli mogę zapytać, w jakim języku używasz kodu?
    Cześć rockit! Właściwie to nie wiem jak programować, dużo czytałem i przejrzałem książkę mql4. Z powyższych przykładów rozumiem, że popełniłem błąd, ale nie jestem pewien, co masz na myśli, określając zakres. Dzięki!

  8. #8

    Cytat Zamieszczone przez ;
    {quote} Cześć! Właściwie to nie wiem jak programować, dużo czytałem i przejrzałem książkę mql4. Z powyższych przykładów rozumiem, że popełniłem błąd, ale nie jestem pewien, co masz na myśli, określając zakres. Dzięki!
    Mam na myśli zakreskontekst:
    https://en.wikipedia.org/wiki/Scope_(computer_science) Instrukcje if sprawdzające zlecenie kupnasprzedaży zostały umieszczone w niewłaściwym kontekście, ponieważ należały do ​​kontekstu (zakresu) innych (zewnętrznych) instrukcji if.

  9. #9
    Witaj, jak widać różnice między zmienną globalną i lokalną polegają na tym, że zmienna globalna może być używana przez więcej niż EA jednocześnie do przesyłania danych między EA a Indiors, lokalna zmienna jest znana tylko przez deklarację EA na niej. Mam nadzieję, że okaże się to przydatne

  10. #10

    Cytat Zamieszczone przez ;
    Witaj, jak widać różnice między zmienną globalną i lokalną polegają na tym, że zmienna globalna może być używana przez więcej niż EA jednocześnie do przesyłania danych między EA a Indiors, lokalna zmienna jest znana tylko przez deklarację EA na niej. Mam nadzieję, że okaże się to przydatne
    Terminologia jest niefortunna i może być myląca dla niektórych. Odwołujesz się do globalnej zmiennej terminalu klienta. Wcześniejsze posty odnoszą się do zmiennej globalscope, która może być używana tylko w EA itp., Gdzie jest zadeklarowana.

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.