Скачать MetaTrader 5

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

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
MetaQuotes ID, что это? Узнай из статьи!
Robertas
30
Robertas 2010.02.16 23:00  
xeon >>:


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

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


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

Vadim Baklanov
3918
Vadim Baklanov 2010.02.18 10:22  

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

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

Vasyl Nosal
18544
Vasyl Nosal 2014.10.14 05:18  

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

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

 

int start()
  {
 double needed_lot=MathFloor(AccountFreeMargin()/MarketInfo(Symbol(),MODE_MARGINREQUIRED)/MarketInfo(Symbol(),MODE_LOTSTEP))*MarketInfo(Symbol(),MODE_LOTSTEP);
 
   return(0);
   
  }
Sergey Gridnev
4955
Sergey Gridnev 2014.10.14 06:22  
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);
   
  }

 

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

Vasyl Nosal
18544
Vasyl Nosal 2014.10.14 07:25  
Contender:

 

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

 

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

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

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

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

 

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

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

Vitalie Postolache
12124
Vitalie Postolache 2014.10.14 07:27  
eevviill:

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

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

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

 

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

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

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

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

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

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

Карпутов Владимир
203
Карпутов Владимир 2014.10.14 08:24  
Хотя в индикаторе и нельзя вызывать Sleep(), но можно запоминать время старта индикатора и делать проверку - если не прошло 15-20 секунд - значит нужно выходить из расчетов, например по return(0).
Vasyl Nosal
18544
Vasyl Nosal 2014.10.14 09:11  
зачем флудить. У меня лучший вариант. Я просто прошу разработчиков чтобы маркет перед первым тиком -1 возвращал, а не 0.
Vitalie Postolache
12124
Vitalie Postolache 2014.10.14 11:03  
eevviill:
зачем флудить. У меня лучший вариант. Я просто прошу разработчиков чтобы маркет перед первым тиком -1 возвращал, а не 0.
Лучший вариант - проверять TERMINAL_CONNECTED, он 0, пока терминал не подключился.
12
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий