Вложений: 2 Привет,
У меня есть небольшая проблема с ошибкой деления на ноль.
Я работаю над простым советником только для практики,
Он скомпилирован без ошибок, но когда я попробовал его в тестере egy, в журнале я получал ошибку деления на ноль.
Я добавил Getlasterror с инструкциями для печати, где происходит ошибка, показывающая строку в коде
Как видно из приложения
Самую последнюю строку перед возвращением Start я положил if (GetLastError () gt; 0) Print (строка 137);
И я оказался на 1-й линии после старта
if (GetLastError () gt; 0) Print (строка 53); и именно здесь произошла ошибка.
Это означает, что при возврате не было ошибок, но сразу после запуска произошла ошибка.
Другими словами вне моего кода! Как это может случиться?
Это проблема с тестером egy или я сделал глупость?
заранее спасибо
Inserted Code/ ------------------------------------------------------------------ /| HigherHi LowerLo.mq4 |/| Keith |/| http://www.metaquotes.net |/ ------------------------------------------------------------------ #property copyright Keith #property link http://www.metaquotes.net /--- input parameters extern int MagicNumber=1; extern int StopLoss = 50; extern int TakeProfit = 100; extern int DecimalPip=4; extern int MaxSlippage=5; extern double RiskPerTrade = 1; double Pip;/ ------------------------------------------------------------------ /| expert initialization function |/ ------------------------------------------------------------------ int init() {/---- /Calculate Pip decimal int decimal = 4; Pip= 1; for (int a = 1; alt;= DecimalPip; a ) { Pip = Pip*0.1; }/---- return(0); }/ ------------------------------------------------------------------ /| expert deinitialization function |/ ------------------------------------------------------------------ int deinit() {/---- /---- return(0); }/ ------------------------------------------------------------------ /| expert start function |/ ------------------------------------------------------------------ int start() {/---- if(GetLastError()gt;0) Print(Line 53); if(High#91;1#93;gt;High#91;2#93; Low#91;1#93;gt;Low#91;2#93;) /Buy Signal string Signal = Buy ; if(GetLastError()gt;0) Print(Line 57); if(High#91;1#93;lt;High#91;2#93; Low#91;1#93;lt;Low#91;2#93;) /Sell Signal Signal = Sell ; if(GetLastError()gt;0) Print(Line 61); /----------------------------------Check if a trade is already open with current pair 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() ; } /-----If STicket gt;0,Sell trade already open, If BTicket gt;0 Buy trade open, If both 0, No current trade /--------------------------------Place new Trade? if(GetLastError()gt;0) Print(Line 76); if(STicket==0 BTicket==0) /No trades open { if (Signal == Buy) { double ask =MarketInfo(Symbol(),MODE_ASK);/Get current ask price double StopLoss = Ask - StopLoss*Pip; double TakeProfit = Ask TakeProfit*Pip; if(GetLastError()gt;0) Print(Line 86); /----------------Calculate LotSize and check that is more than minimum allowed by broker double Step = MarketInfo(Symbol(), MODE_LOTSTEP); double LossLot = MathAbs( Ask- StopLoss)/MarketInfo(Symbol(), MODE_TICKSIZE)*MarketInfo(Symbol(), MODE_TICKVALUE) ; int Lot = AccountEquity( )*RiskPerTrade/100LossLot/Step ; double LotSize = Lot * Step; if(LotSize lt; MarketInfo(Symbol(), MODE_MINLOT)) Alert (Lotsize is too small to trade) ; else OrderSend(Symbol(),OP_BUY,LotSize,Ask,MaxSlippage* Pip/Point,StopLoss,TakeProfit *Pip,NULL,MagicNumber,0,0); } if (Signal == Sell) { double bid =MarketInfo(Symbol(),MODE_BID);/Get current bid price StopLoss = Bid StopLoss*Pip; TakeProfit = Bid -TakeProfit*Pip; if(GetLastError()gt;0) Print(Line 106); /----------------Calculate LotSize and check that is more than minimum allowed by broker if(GetLastError()gt;0) Print(Line 108); Step = MarketInfo(Symbol(), MODE_LOTSTEP); LossLot = MathAbs( Bid- StopLoss)/MarketInfo(Symbol(), MODE_TICKSIZE)*MarketInfo(Symbol(), MODE_TICKVALUE) ; Lot = AccountEquity( )*RiskPerTrade/100LossLot/Step ; LotSize = Lot * Step; if(LotSize lt; MarketInfo(Symbol(), MODE_MINLOT)) Alert (Lotsize is too small to trade) ; else OrderSend(Symbol(),OP_SELL,LotSize,Bid,MaxSlippage *Pip/Point,StopLoss,TakeProfit *Pip,NULL,MagicNumber,0,0); } } if(GetLastError()gt;0) Print(Line 121); /---------------------Check if need to close trade if (Signal == Buy STicketgt;0) /open sell trade needs closing { OrderSelect(STicket,SELECT_BY_TICKET); OrderClose(STicket,OrderLots( ) ,MarketInfo(OrderSymbol( ),MODE_ASK) ,50,Violet); } if (Signal == Sell BTicketgt;0) /open buy trade needs closing { OrderSelect(BTicket,SELECT_BY_TICKET); OrderClose(BTicket,OrderLots( ) ,MarketInfo(OrderSymbol( ),MODE_BID) ,50,Violet); } if(GetLastError()gt;0) Print(Line 137);/---- return(0); }/ ------------------------------------------------------------------
https://www.forex-russian.com/attach...8495297788.mq4
https://www.forex-russian.com/crypto...notifiion.html