Деление на ноль

 

Здравствуйте.

Возникает некоторое недоразумение, помогите разобраться.

В ниже представленном коде

double GetSizeLot()
  {
   double tmp,tml,sBalance=AccountBalance(),sMinLot=MarketInfo(Symbol(),MODE_MINLOT),sMargin=MarketInfo(Symbol(),MODE_MARGINREQUIRED);
//---- select
   tmp=MathMax(1,MathFloor((sBalance*(Risk/100))/(sMargin*sMinLot))); 
   tml=MathMin(tmp,MathFloor(sBalance/(sMargin*sMinLot))); 
//---- return lot size
   double sizeLot=MathMax(sLot,tml*sMinLot);
   return(sizeLot);
   }

иногда при запуске советника, возникает ошибка "Деление на ноль" со ссылкой на выделенную строку. И далее просто не торгует, хотя запуск и компиляцию проходит успешно.

Причем происходит это обычно в начале новой недели, или с запуском терминала после рестарта, при переключении таймфрейма, но не всегда, а как придется, может и по 20 раз нормально, а потом раз и ошибка. В чем тут может быть дело, ранее такого не наблюдалось вообще, есть какие мысли поэтому поводу и как их решить?.

ЗЫ. Ошибка вылетает на ECN счете в Альпари.

 

А Print() использовать не пробовали.

например

Print("sMargin", sMargin);
 
Vinin:

А Print() использовать не пробовали.

например


Не пробовал. Сейчас попробую поиграться. Спасибо.

 

---------------------------

По разному игрался с Print.

Выдает значение sMargin 0. Ничего не понимаю.

Т.е. получается надо менять эту функцию на альтернативную?

 
konovalov:

---------------------------

По разному игрался с Print.

Выдает значение sMargin 0. Ничего не понимаю.

Т.е. получается надо менять эту функцию на альтернативную?


Попробуйте сначала объявить переменные, а после присвоить им значения.

ЗЫ Вместо sBalance*(Risk/100), я бы использовал sBalance*Risk*0.01

 
tara:


Попробуйте сначала объявить переменные, а после присвоить им значения.

ЗЫ Вместо sBalance*(Risk/100), я бы использовал sBalance*Risk*0.01


Спасибо. Приму к сведению.