Proszę o pomoc z niestandardowym kodem funkcji
Pokaż wyniki od 1 do 7 z 7

Wątek: Proszę o pomoc z niestandardowym kodem funkcji

  1. #1
    Cześć, każdy może mi powiedzieć, gdzie mój kod jest zły.
    Więc chcę stworzyć funkcję zamykającą wszystkie otwarte zlecenia (bez względu na rodzaj zlecenia) po osiągnięciu docelowego zysku, ale jakoś EA zamyka tylko kupno lub tylko zamyka sprzedaż po osiągnięciu docelowego zysku.
    Oto kod:

    Wstawiony kod void close(bool akumulacja, podwójny cel){ if (accumulation == true){ double orderProfit = 0; for (int i=0; ilt;OrdersTotal(); i ){ if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == true){ orderProfit = OrderProfit(); if (orderProfit gt;= target){ for (int ic=0; iclt;OrdersTotal(); ic ){ if (OrderSelect(ic, SELECT_BY_POS) == true){ if (OrderType() == 0){ bool tutup = OrderClose(OrderTicket(), OrderLots(), Bid, 0, clrGreen); komen(Zamknij WSZYSTKIE karena TARGET, 255, 255, 255); } if (OrderType() == 1){ bool tutup = OrderClose(OrderTicket(), OrderLots(), Ask, 0, clrGreen); komen(Zamknij WSZYSTKIE karena TARGET, 255, 255, 255); } } } } } } } }

  2. #2

    Cytat Zamieszczone przez ;
    {quote} Podczas zamykania zleceń musisz: 1/Uruchom pętlę w odwrotnej kolejności ... for(int ic= OrdersTotal()-1; ict;= 0; ic--) lub 2/Zweryfikuj po pętli że wszystkie powiązane zamówienia zostały zamknięte Ponieważ w pętli ic , gdy zamówienie jest zamykane, pula całkowitych zamówień staje się nieprawidłowa i nie można znaleźć najnowszych zamówień w puli Nie jestem pewien, czy moje angielskie wyjaśnienie jest w porządku ... ale to jest to!
    Masz rację! Problemem jest kolejność pętli, ponieważ jeśli użyjesz logiki ic , spowoduje to bałagan w OrdersTotal. Próbuję przeciwnej pętli i zadziałało! Wielkie dzięki! Jak najszybciej zamknę ten wątek.

  3. #3

    Cytat Zamieszczone przez ;
    ... if (OrderSelect(ic, SELECT_BY_POS) == true)
    Również lepiej jest dodać MODE_TRADES w wyborze kolejności, tak jak to zrobiłeś w pierwszej pętli.

  4. #4

    Cytat Zamieszczone przez ;
    {cytat} Masz na myśli tak, prawda? To jest moja pierwsza wersja kodu, pierwotnie wygląda tak: void close(bool akumulacja, podwójny cel){ if (accumulation == true){ double orderProfit = 0; for (int i=0; ilt;OrdersTotal(); i ){ if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == true){ orderProfit = OrderProfit(); } } if (orderProfit gt;= target){ for (int ic=0; iclt;OrdersTotal(); ic ){ if (OrderSelect(ic, SELECT_BY_POS) == true){ if (OrderType() == 0){ bool tutup = OrderClose(OrderTicket(), OrderLots(), Bid, 0, clrGreen); komen(Zamknij WSZYSTKIE...
    Podczas zamykania zleceń należy: 1/Uruchomić pętlę w odwrotnej kolejności... Wstawić kod for(int ic= OrdersTotal()-1; ict;= 0; ic--) lub 2/Zweryfikować po pętli, że wszystkie powiązane zamówienia zostały zamknięte Ponieważ w pętli ic , gdy zamówienie jest zamykane, pula całkowitych zamówień staje się nieprawidłowa i nie można znaleźć najnowszych zamówień w puli Nie jestem pewien, czy moje angielskie wyjaśnienie jest w porządku ... ale Otóż ​​to!

  5. #5

    Cytat Zamieszczone przez ;
    Cześć, każdy może mi powiedzieć, gdzie mój kod jest zły. Więc chcę stworzyć funkcję zamykającą wszystkie otwarte zlecenia (bez względu na rodzaj zlecenia) po osiągnięciu docelowego zysku, ale jakoś EA zamyka tylko kupno lub tylko zamyka sprzedaż po osiągnięciu docelowego zysku. Oto kod: void close(bool akumulacja, podwójny cel){ if (accumulation == true){ double orderProfit = 0; for (int i=0; ilt;OrdersTotal(); i ){ if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == true){ orderProfit = OrderProfit(); if (orderProfit gt;= target){ for (int ic=0; iclt;OrdersTotal(); ic ){ if (OrderSelect(ic,...
    Nie umieszczaj drugiej pętli wywołującej OrdersTotal() wewnątrz pierwszej pętli. Uruchom pierwszą pętlę dla sumy P/L ... Następnie, jeśli P/L jest na poziomie docelowym lub wyższym, uruchom drugą pętlę zamykającą wszystkie twoje zamówienia.

  6. #6

    Cytat Zamieszczone przez ;
    {cytat} Nie umieszczaj drugiej pętli wywołującej OrdersTotal() wewnątrz pierwszej pętli. Uruchom pierwszą pętlę dla sumy P/L ... Następnie, jeśli P/L jest na poziomie docelowym lub wyższym, uruchom drugą pętlę zamykającą wszystkie twoje zamówienia.
    Masz na myśli tak, prawda? To jest moja pierwsza wersja kodu, oryginalnie wygląda tak: Wstawiony kod void close(bool akumulacja, double target){ if (accumulation == true){ double orderProfit = 0; for (int i=0; ilt;OrdersTotal(); i ){ if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == true){ orderProfit = OrderProfit(); } } if (orderProfit gt;= target){ for (int ic=0; iclt;OrdersTotal(); ic ){ if (OrderSelect(ic, SELECT_BY_POS) == true){ if (OrderType() == 0){ bool tutup = OrderClose(OrderTicket(), OrderLots(), Bid, 0, clrGreen); komen(Zamknij WSZYSTKIE karena TARGET, 255, 255, 255); } if (OrderType() == 1){ bool tutup = OrderClose(OrderTicket(), OrderLots(), Ask, 0, clrGreen); komen(Zamknij WSZYSTKIE karena TARGET, 255, 255, 255); } } } } } } I próbowałem to zmienić z powrotem na tę wersję i nic się nie zmienia, tylko kupuj zamknięte zlecenia lub sprzedaj zamknięte zlecenia

  7. #7

    Cytat Zamieszczone przez ;
    {cytat} Masz rację! Problemem jest kolejność pętli, ponieważ jeśli użyjesz logiki ic , spowoduje to bałagan w OrdersTotal. Próbuję przeciwnej pętli i zadziałało! Wielkie dzięki! Jak najszybciej zamknę ten wątek.
    Świetny!

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.