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