Potrzebujesz ręki kodującej MA cross EA
Strona 1 z 2 12 OstatniOstatni
Pokaż wyniki od 1 do 10 z 15

Wątek: Potrzebujesz ręki kodującej MA cross EA

  1. #1
    Próbuję nauczyć się kodować doradców ekspertów, więc dostałem coś prostego na początek.

    Chodzi o to, aby EA otworzyła długą pozycję, gdy cena przekroczy MA z dołu.

    Następnie, gdy cena spadnie i przekroczy MA z góry, pozycja długa zostanie zamknięta, a krótka zostanie ot.

    Pomysł wydaje się prosty, a poniższy kod wydaje się być właściwy, ale nic się nie dzieje.

    Czy ktoś może wskazać mi, gdzie jest mój błąd?




    extern double Lots = 0,01;
    extern int Slippage = 7;
    zewnętrzny ciąg komentarz = MA_Template;
    extern int MagicNumber = 0;
    /////////////////////////////////
    int ThisBarTrade = 0;
    int Position = 0;

    int init () {
    CalcPosition ();
    }

    int start () {
    podwójne MA;


    bool closed = false;
    if (ThisBarTrade! = Bars) {
    MA = iMA (NULL, 0,5,0,0,0,0);

    //Kup warunek
    if (MA gt; = Bid ​​Bid;; 0) {
    CalcPosition ();
    if (Pozycja lt; 0) {
    if (CloseSingleSell () == false) return (0);/błąd, ale może spróbować jeszcze raz
    }
    if (OpenSingleBuy () == false) return (0);/brak zakupu, ale może spróbować ponownie
    ThisBarTrade = Bary;
    }
    //Warunek sprzedaży
    if (MA lt;; = Ask Position gt; = 0) {
    CalcPosition ();
    if (pozycja gt; 0) {
    if (CloseSingleBuy () == false) return (0);/błąd, ale może spróbować jeszcze raz
    }
    if (OpenSingleSell () == false) return (0);/brak sprzedaży, ale może spróbować ponownie
    ThisBarTrade = Bary;
    }
    }
    }
    // ----------------------------------------------- -------------------

    void CalcPosition () {
    Pozycja = 0;
    for (int i = 0; i lt; OrdersTotal (); i ) {
    OrderSelect (i, SELECT_BY_POS, MODE_TRADES);
    if (OrderSymbol () == Symbol ()) {
    if (OrderType () == OP_BUY) Pozycja = 1;
    if (OrderType () == OP_SELL) Pozycja - = 1;
    }
    }
    }

    bool CloseSingleBuy () {
    bool zamknięty;
    for (int i = 0; i lt; OrdersTotal (); i ) {
    OrderSelect (i, SELECT_BY_POS, MODE_TRADES);
    if (Symbol () == OrderSymbol () MagicNumber == OrderMagicNumber ()) {
    if (OrderType () == OP_BUY) {
    while (! IsTradeAllowed ()) Sleep (MathRand ()10);
    RefreshRates ();
    closed = OrderClose (OrderTicket (), OrderLots (), Bid, Slippage, White);
    Drukuj (próba zamknięcia pojedynczego zamówienia # i );
    if (closed == -1) {
    return (false);
    } else {
    return (true);
    }
    }
    }
    }
    return (false);
    }

    bool CloseSingleSell () {
    bool zamknięty;
    for (int i = 0; i lt; OrdersTotal (); i ) {
    OrderSelect (i, SELECT_BY_POS, MODE_TRADES);
    if (Symbol () == OrderSymbol () MagicNumber == OrderMagicNumber ()) {
    if (OrderType () == OP_SELL) {
    while (! IsTradeAllowed ()) Sleep (MathRand ()10);
    RefreshRates ();
    closed = OrderClose (OrderTicket (), OrderLots (), Ask, Slippage, White);
    Drukuj (próba zamknięcia pojedynczego zamówienia zamówienia # i pytanie);
    if (closed == -1) {
    return (false);
    } else {
    return (true);
    }
    }
    }
    }
    return (false);
    }

    bool OpenSingleBuy () {
    if (Position! = 0) return (false);
    int ticket = -1;
    while (! IsTradeAllowed ()) Sleep (MathRand ()10);
    RefreshRates ();
    ticket = OrderSend (Symbol (), OP_BUY, Partie, Pytaj, Poślizg, 0.0, 0.0, komentarz kup, MagicNumber, 0, Lime);
    if (ticket lt; 0) {
    Drukuj (nie można otworzyć OpenSingleBuy, błąd #, GetLastError ());
    return (false);
    } else {
    Drukuj (złożone zamówienie z OpenSingleBuy);
    return (true);
    }
    return (false);
    }

    bool OpenSingleSell () {
    if (Position! = 0) return (false);
    int ticket = -1;
    while (! IsTradeAllowed ()) Sleep (MathRand ()10);
    RefreshRates ();
    ticket = OrderSend (Symbol (), OP_SELL, Partie, Bid, Slippage, 0.0, 0.0, comment sell, MagicNumber, 0, Lime);
    if (ticket lt; 0) {
    Drukuj (niepowodzenie OpenSingleSell, błąd #, GetLastError ());
    return (false);
    } else {
    Drukuj (Pomyślnie złożono zamówienie za pomocą OpenSingleSell);
    return (true);
    }
    return (false);
    }

  2. #2
    Próbuję czegoś prostszego, ale wciąż nie ma sukcesu. Celem jest sprawienie, aby EA kupowało, gdy 1SMA i 15SMA mają tę samą wartość (krzyż), ale nadal nie jest to możliwe. Każda pomoc będzie naprawdę doceniana./Deklaracja podwójna _Moving_Avarage; double _Moving_Avarage_2; bool _Compare; bool _buy; int start () {//Poziom 1 _Moving_Avarage = iMA (Symbol (), 0,15,0,0,0,0); _Moving_Avarage_2 = iMA (Symbol (), 0,1,0,0,0,0); _Compare = 0 == 0;/Poziom 2, jeśli (_Compare! __ isExist (0)) _ buy = OrderSend (Symbol (), 0,0,1, MarketInfo (Symbol (), MODE_ASK), 100,200,0, __ STRATEGY_MAGIC 0) gt; = 0; return (0); }/Usługi bool __selectOrderByMagic (int __magic) {for (int __i = 0; __ ilt; OrdersTotal (); __ i ) {if (OrderSelect (__ i, SELECT_BY_POS, MODE_TRADES) OrderMagicNumber () == __ STRATEGY_MAGIC __ magic) return (true) ;} return (false);} bool __isExist (int __magic) {return (__ selectOrderByMagic (__ magic));

  3. #3
    1) Prawie nigdy nie mają tej samej wartości. Aby wykryć krzyż, należy sprawdzić, czy poprzedni pasek ma szybką wartość powyżej niskiej wartości, a bieżący pasek to szybka wartość poniżej niskiej wartości (w przypadku krótkich pozycji). 2) Istnieją już istniejące przykłady. Użyj ich.

  4. #4

    Cytat Zamieszczone przez ;
    1) Prawie nigdy nie mają tej samej wartości. Aby wykryć krzyż, należy sprawdzić, czy poprzedni pasek ma szybką wartość powyżej niskiej wartości, a bieżący pasek to szybka wartość poniżej niskiej wartości (w przypadku krótkich pozycji). 2) Istnieją już istniejące przykłady. Użyj ich.
    Cześć RR dzięki za informację. Mój oryginalny pomysł polegał na tym, aby znaleźć dokładny moment, w którym CENA przechodzi przez SMA. Używam 1SMA jako proxy, ponieważ nie wiem, jak zdefiniować aktualną cenę na pasku. Jeśli nie masz nic przeciwko, żeby mi odpowiedzieć. Dlaczego widzimy (wizualnie) krzyż na ekranie, ale EA go nie widzi. Czy istnieje przedział cenowy, który mogę zdefiniować, który emulowałby mniej więcej to, co widzę w czasie rzeczywistym? Dzięki

  5. #5
    To, co widzi EA, to zbiór liczb. Jak tłumaczysz wzorzec wizualny na zbiór liczb?

  6. #6
    Kod pocztowy za pomocą tagów kodu i prawdopodobnie uzyskasz dodatkową pomoc. Nie przejrzałem twojego kodu, ponieważ został on sformatowany przez redaktora. Oto przykład tego, co możesz zrobić: Wstawiony kod #define CROSS_UP 1 #define CROSS_DOWN 2 int my_ticket; int start () {if (ma_crossover (1) == CROSS_UP) my_ticket = OrderSend (Symbol (), OP_BUY, 1, Ask, 3, Ask-10 * Point, Ask 10 * Point); if (ma_crossover (1) == CROSS_DOWN) my_ticket = OrderSend (Symbol (), OP_SELL, 1, Bid, 3, Bid-10 * Point, Ask 10 * Point); }/----------------------------------------------- -------------------/ma_crossover ()/Return 1 on cross up. Return 2 on cross down/------------------------------------------- ----------------------- int ma_crossover (int pos) {double ma1_current, ma1_previous, ma2_current, ma2_previous; ma1_current = iMA (NULL, 0,5,0, MODE_SMA, PRICE_CLOSE, pos); ma1_previous = iMA (NULL, 0,5,0, MODE_SMA, PRICE_CLOSE, pos 1); ma2_current = iMA (NULL, 0,21,0, MODE_SMA, PRICE_CLOSE, pos); ma2_previous = iMA (NULL, 0,21,0, MODE_SMA, PRICE_CLOSE, pos 1);/Przekieruj, jeśli (ma1_currentgt; ma1_previous ma2_currentlt; ma2_previous) return (CROSS_UP);/Cross down, jeśli (ma1_currentlt; ma1_previous ma2_currentgt; ma2_previous) return (CROSS_DOWN); return (0); }

  7. #7

    Cytat Zamieszczone przez ;
    To, co widzi EA, to zbiór liczb. Jak tłumaczysz wzorzec wizualny na zbiór liczb?
    Dokładnie, dlatego mam problem z kodem. Miałem wrażenie, że aby metatrader mógł malować MA przechodząc inną lub krzyżującą się cenę, liczby powinny być takie same w momencie krzyża. Si jeśli iMA wysyła współrzędne do osi X i Y do malowania, a pasek jest malowany w funkcji ceny w tym samym czasie, a X, Y koordynuje w mojej głowie iMA i Bid lub Ask (lub iMA i iMA w przypadek krzyżówki MA) powinien mieć tę samą wartość w tym konkretnym momencie. Ale myślę, że to nie działa w ten sposób.

  8. #8
    Bardzo rzadko zdarza się, aby dwa różne MA miały dokładnie taką samą wartość. Więc sprawdzasz względny ruch MA.

  9. #9

    Cytat Zamieszczone przez ;
    Kod pocztowy za pomocą tagów kodu i prawdopodobnie uzyskasz dodatkową pomoc. Nie przejrzałem twojego kodu, ponieważ został on sformatowany przez redaktora. Oto przykład tego, co możesz zrobić: [code] #define CROSS_UP 1 #define CROSS_DOWN 2 int my_ticket; int start () {if (ma_crossover (1) == CROSS_UP) my_ticket = OrderSend (Symbol (), OP_BUY, 1, Ask, 3, Ask-10 * Point, Ask 10 * Point); if (ma_crossover (1) == CROSS_DOWN) my_ticket = OrderSend (Symbol (), OP_SELL, 1, Bid, 3, Bid-10 * Point, Ask 10 * Point); }/----------------------------------------------- -------------------/...
    Dzięki za wejście. Zepsułem całą nitkę, gdy wspomniałem słowa MA CROSS. Moim początkowym punktem było znalezienie kodu, który mógłby znaleźć wartość MA, a cena Bid lub Ask została namalowana na pasku. Niż miałbym zlecenie uruchamiane przy dokładnym zaznaczeniu MA i pasek przecinał się nawzajem. Zacząłem używać 2 MA jednego z nich ustawionego na 1 tak jak proxy dla powyższego wyjaśnienia, ponieważ nie wiem, jaki kod podaje cenę w czasie rzeczywistym.

  10. #10

    Cytat Zamieszczone przez ;
    Bardzo rzadko zdarza się, aby dwa różne MA miały dokładnie taką samą wartość. Więc sprawdzasz względny ruch MA.
    Więc kiedy przekroczy 2 MA. Jak metatrader maluje piksele na ekranie. Kiedy piksele z liczbami dla kolorów itp. Są generowane do malowania. Gdzieś te same współrzędne X, Y (liczby) są generowane. Liczby powinny się zgadzać w danym czasie, inaczej MA nigdy nie przekroczyłoby. Dobrze?

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.