ошибка "zero divide" - страница 2

 
xeon >>:


поставте перед делением условие проверки ноля, наподобии:

и тогда не будет возникать ошибки.


Большое спасибо! Bед правда по всем правилам математики.. Bсе верно :)

 

Следите за типами переменных. Если вы комбинируете int  и  double, то в результате неправильного приведения типов в формулах в mql бывают трудноуловимые ошибки и деление на 0.

Лучше все инты поменять на даблы.

 

Анука мне подскажите чего он зерует.

Забыл сказать. Зерует если индикатор прикреплён к графику при открытии терминала. 

 

int start()
  {
 double needed_lot=MathFloor(AccountFreeMargin()/MarketInfo(Symbol(),MODE_MARGINREQUIRED)/MarketInfo(Symbol(),MODE_LOTSTEP))*MarketInfo(Symbol(),MODE_LOTSTEP);
 
   return(0);
   
  }
 
eevviill:

Анука мне подскажите чего он зерует.

Забыл сказать. Зерует если индикатор прикреплён к графику при открытии терминала. 

 

 

Сделайте так:

int start()
  {
   static bool _fl=TRUE;
   if( _fl )
     {
      Print("MARGINREQUIRED:",MarketInfo(Symbol(),MODE_MARGINREQUIRED));
      Print("LOTSTEP:",MarketInfo(Symbol(),MODE_LOTSTEP));
      _fl=FALSE;
     }
 double needed_lot=MathFloor(AccountFreeMargin()/MarketInfo(Symbol(),MODE_MARGINREQUIRED)/MarketInfo(Symbol(),MODE_LOTSTEP))*MarketInfo(Symbol(),MODE_LOTSTEP);
 
   return(0);
   
  }

 

и понаблюдайте за записями в журнале.

 
Contender:

 

Сделайте так:

 

и понаблюдайте за записями в журнале.

Что ж тут наблюдать. 0 показывает.

Пришлось перед строкой ставить

if(MarketInfo(Symbol(),MODE_MARGINREQUIRED)==0) return(0);

 

Разработчики исправляйте!

Если ещё перед первым тиком маркет инфо не имеет данных, то пусть -1 возвращает. 

 
eevviill:

Что ж тут наблюдать. 0 показывает.

Пришлось перед строкой ставить

if(MarketInfo(Symbol(),MODE_MARGINREQUIRED)==0) return(0);

 

Разработчики исправляйте!

Если ещё перед первым тиком маркет инфо не имеет данных, то пусть -1 возвращает. 

не надо return(0), надо паузу, пока подключение к счёту происходит, секунд 10-20.
 
evillive:
не надо return(0), надо паузу, пока подключение к счёту происходит, секунд 10-20.

А если больше будет подлючастя?

1)А как только первый тик будет то маркетинфо уже не 0 будет. 

2)В индикаторе нету паузы. 

 
Хотя в индикаторе и нельзя вызывать Sleep(), но можно запоминать время старта индикатора и делать проверку - если не прошло 15-20 секунд - значит нужно выходить из расчетов, например по return(0).
 
зачем флудить. У меня лучший вариант. Я просто прошу разработчиков чтобы маркет перед первым тиком -1 возвращал, а не 0.
 
eevviill:
зачем флудить. У меня лучший вариант. Я просто прошу разработчиков чтобы маркет перед первым тиком -1 возвращал, а не 0.
Лучший вариант - проверять TERMINAL_CONNECTED, он 0, пока терминал не подключился.