Zagadka kodowania błędów z zerowym podziałem
Pokaż wyniki od 1 do 4 z 4

Wątek: Zagadka kodowania błędów z zerowym podziałem

  1. #1
    2 Załącznik (s) Witaj,

    Mam problem z zerowym błędem dzielenia.
    Pracuję nad prostym EA tylko dla praktyki,
    Skompilował się bez błędów, ale gdy próbowałem go w egy testerze, ciągle otrzymywałem zero błędów dzielenia w dzienniku.
    Dodałem Getlasterror z instrukcjami, aby wydrukować, gdzie pojawia się błąd pokazujący linię w kodzie
    Jak widać z załącznika
    Ostatnia linia przed początkiem powrotu Wpisuję if (GetLastError () gt; 0) Drukuj (wiersz 137);
    I skończyłem w pierwszej linii po starcie
    if (GetLastError () gt; 0) Drukuj (wiersz 53); i tu właśnie wystąpił błąd.
    Oznacza to, że nie wystąpił błąd, gdy trafił zwrot, ale zaraz po starcie wystąpił błąd.
    Innymi słowy poza moim kodem! Jak to się może stać?
    Czy to problem z egy testerem, czy zrobiłem coś głupiego?
    Z góry dziękuję


    Wstawiony kod/ --------------------------------------------- --------------------- /| HigherHi LowerLo.mq4 |/| Keith |/| http://www.metaquotes.net |/ ----------------------------------------------- ------------------- # prawa autorskie Keith #property link http://www.metaquotes.net/--- parametry wejściowe extern int MagicNumber = 1; extern int StopLoss = 50; extern int TakeProfit = 100; extern int DecimalPip = 4; extern int MaxSlippage = 5; extern double RiskPerTrade = 1; podwójny Pip;/ ----------------------------------------------- ------------------- /| funkcja inicjalizacji eksperta |/ ----------------------------------------------- ------------------- int init () {//----/Obliczanie dziesiętnej liczby dziesiętnej int dziesiętnej = 4; Pip = 1; for (int a = 1; alt; = DecimalPip; a ) {Pip = Pip * 0.1; }/---- return (0); }/ ---------------------------------------------- -------------------- /| ekspercka funkcja deinicjalizacji |/ ----------------------------------------------- ------------------- int deinit () {//----/---- return (0); }/ ---------------------------------------------- -------------------- /| funkcja startu eksperta |/ ----------------------------------------------- ------------------- int start () {//---- if (GetLastError () gt; 0) Drukuj (wiersz 53); jeśli (High # 91; 1 # 93; gt; High # 91; 2 # 93; Low # 91; 1 # 93; gt; Low # 91; 2 # 93;)/Kup Ciąg sygnałowy Sygnał = Kup; if (GetLastError () gt; 0) Drukuj (linia 57); jeśli (Wysoki # 91; 1 # 93; lt; Wysoki # 91; 2 # 93; Niski # 91; 1 # 93; lt; Niski # 91; 2 # 93;)/Sprzedaj sygnał sygnału = Sprzedaj; if (GetLastError () gt; 0) Drukuj (wiersz 61);/---------------------------------- Sprawdź, czy transakcja jest już ot z bieżącą parą int STicket = 0 ; int BTicket = 0; for (int x = OrdersTotal () - 1; xgt; = 0; x--) {OrderSelect (x, SELECT_BY_POS, MODE_TRADES); if (OrderType () lt; = OP_SELL OrderMagicNumber () == MagicNumber) STicket = OrderTicket (); if (OrderType () lt; = OP_BUY OrderMagicNumber () == MagicNumber) BTicket = OrderTicket (); }/----- Jeśli STicket gt; 0, Sprzedaj handel już otwarty, Jeśli BTicket gt; 0 Kup handel otwarty, Jeśli oba 0, Brak bieżącego handlu/------------- ------------------- Umieść nowy handel? if (GetLastError () gt; 0) Drukuj (wiersz 76); if (STicket == 0 BTicket == 0)/Brak transakcji otwartych {if (Signal == Buy) {double ask = MarketInfo (Symbol (), MODE_ASK);/Pobierz aktualną cenę zapytania double StopLoss = Ask - StopLoss * Pip; double TakeProfit = Ask TakeProfit * Pip; if (GetLastError () gt; 0) Drukuj (linia 86);/---------------- Oblicz LotSize i sprawdź, czy jest to więcej niż minimum dozwolone przez broker double Step = MarketInfo (Symbol (), MODE_LOTSTEP); podwójnieLossLot = MathAbs (Ask- StopLoss)MarketInfo (Symbol (), MODE_TICKSIZE) * MarketInfo (Symbol (), MODE_TICKVALUE); int Lot = AccountEquity () * RiskPerTrade100LossLotStep; double LotSize = Krok * Lot; if (LotSize lt; MarketInfo (Symbol (), MODE_MINLOT)) Alert (Lotsize jest zbyt mały, aby handlować); inaczej OrderSend (Symbol (), OP_BUY, LotSize, Ask, MaxSlippage * PipPoint, StopLoss, TakeProfit * Pip, NULL, MagicNumber, 0,0); } if (Signal == Sell) {double bid = MarketInfo (Symbol (), MODE_BID);/Pobierz aktualną cenę ofertową StopLoss = Bid ​​ StopLoss * Pip; TakeProfit = Bid ​​-TakeProfit * Pip; if (GetLastError () gt; 0) Drukuj (Linia 106);/---------------- Oblicz LotSize i sprawdź, czy jest to więcej niż minimum dozwolone przez broker, jeśli (GetLastError () gt; 0) Drukuj (wiersz 108); Krok = MarketInfo (Symbol (), MODE_LOTSTEP); LossLot = MathAbs (Bid- StopLoss)MarketInfo (Symbol (), MODE_TICKSIZE) * MarketInfo (Symbol (), MODE_TICKVALUE); Lot = AccountEquity () * RiskPerTrade100LossLotStep; LotSize = Krok * Lot; if (LotSize lt; MarketInfo (Symbol (), MODE_MINLOT)) Alert (Lotsize jest zbyt mały, aby handlować); else OrderSend (Symbol (), OP_SELL, LotSize, Bid, MaxSlippage * PipPoint, StopLoss, TakeProfit * Pip, NULL, MagicNumber, 0,0); }} if (GetLastError () gt; 0) Drukuj (wiersz 121);/--------------------- Sprawdź, czy trzeba zamknąć transakcję, jeśli (Sygnał == Kup STicketgt; 0)/otwórz sprzedaż wymaga obrotu {OrderSelect (STicket , SELECT_BY_TICKET); OrderClose (STicket, OrderLots (), MarketInfo (OrderSymbol (), MODE_ASK), 50, Violet); } if (Sygnał == Sprzedaj BTicketgt; 0)/handel otwarty zakup wymaga zamknięcia {OrderSelect (BTicket, SELECT_BY_TICKET); OrderClose (BTicket, OrderLots (), MarketInfo (OrderSymbol (), MODE_BID), 50, Violet); } if (GetLastError () gt; 0) Drukuj (wiersz 137);/---- return (0); }/ ---------------------------------------------- --------------------
    https://www.forex-instant.com/attach...8495297788.mq4

    https://www.forex-instant.com/crypto...notifiion.html

  2. #2
    Cześć Gumrai, są problemy z twoimi zmiennymi: 1. W wejściach używasz StopLoss i TakeProfit, aby określić odległość w pipsach, wtedy używasz dokładnie tych samych nazw zmiennych, aby określić poziomy na podstawie tych odległości: extern int StopLoss = 50; extern int TakeProfit = 100; double StopLoss = Ask - StopLoss * Pip; double TakeProfit = Ask TakeProfit * Pip; 2. double ask = MarketInfo (Symbol (), MODE_ASK); double StopLoss = Ask - StopLoss * Pip; ask nie jest tym samym co Ask - chociaż w twoim przypadku tak jest, ale wtedy nie potrzebujesz dodatkowej zmiennej, którą myślę :-) 3. OrderSend (Symbol (), OP_BUY, LotSize, Ask, MaxSlippage * PipPoint, StopLoss, TakeProfit * Pip, NULL, MagicNumber, 0,0); Używasz tutaj mnożnika pip, którego nie potrzebujesz, jeśli poprawisz zmienne w punkcie 1. Kiedy je poprawię, zerowe błędy dzielenia zniknęły. Mam nadzieję że to pomoże,

  3. #3
    Cytat Zamieszczone przez ;
    Cześć, są problemy z twoimi zmiennymi: 1. W wejściach, których używasz StopLoss i TakeProfit, aby określić odległość w pipsach, używasz dokładnie tych samych nazw zmiennych, aby określić poziomy na podstawie tych odległości: extern int StopLoss = 50; extern int TakeProfit = 100; double StopLoss = Ask - StopLoss * Pip; double TakeProfit = Ask TakeProfit * Pip; 2. double ask = MarketInfo (Symbol (), MODE_ASK); double StopLoss = Ask - StopLoss * Pip; pytaj nie jest tym samym co Ask - chociaż w twoim przypadku tak jest, ale wtedy nie potrzebujesz dodatkowej zmiennej ...
    Bardzo ci za to dziękuję
    Głupia ze mnie zmiana globalnej zmiennej w kodzie. Dzięki tobie nauczyłem się dzisiaj cennej lekcji

  4. #4
    Rozwiązuję ten problem. 1 stycznia 2014 r. o godzinie 00:00 GMT Opublikuję rozwiązanie w osobnym temacie. Bądź tam wszystko.

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.