Ошибка "zero divide".......... кто дурак????

 

Доброе время суток всем.

проявилась такая беда: запускаю скрипт, а он - не стартует пишет 2009.09.21 01:33:09 NewScript EURUSD,H4: zero divide

Скрипт - гарантированно рабочий... тк проявляется ошибка тока на платформе скачанной с ДЦ Альпари...... на другой платформе (FX-Start) - всё впорядке. на одних и техже валютных парах...... да и нету там деления на ноль.... там деление применяется только один раз во всем скрипте...... версия платформы 4.00 билд 225 в обоих случаях....

мож кто сталкивался с подобным?

зы: ОС - Виста.... но это опятьже спорный фактор ошибки.. тк. на другой платформе - всё работает от и до.....*SCRATCH*


 
Mrak писал(а) >>

Скрипт - гарантированно рабочий...

Не горячитесь... Дело не в платформе, а скорее котировках или просто их отсутствии... Что бы ответить конкретнее, нужен код, без него ломать голову на тему "Кто дурак?" - придется самому.

 

Посмотрите, нет ли где в коде деления на  Point, либо деления на какое-ниб аналогичное небольшое число?

Именно так было у меня (тож именно в АЛЬПАРИ) .

В моем коде было:

Comment ("Ширина канала = ",(Hbid-Lbid)/Point,
"АТР = ",iATR(NULL,Time_Fr,Per_ATR,0),"/",Lim_ATR);
И именно это кусочек 
(Hbid-Lbid)/Point
давал ошибку "zero divide" !

Хотя в др. мт4 (от др. ДЦ) ЭТОЙ  ошибки не было.

Видимо, при 5-значных котировках платформа мт4 считает величину Point пренебрежимо малой и при делении приравнивает к нулю.


 
rid >>:

Посмотрите, нет ли где в коде деления на  Point, либо деления на какое-ниб аналогичное небольшое число?

Именно так было у меня (тож именно в АЛЬПАРИ) .

В моем коде было:

И именно это кусочек  давал ошибку "zero divide" !

Хотя в др. мт4 (от др. ДЦ) ЭТОЙ  ошибки не было.

Видимо, при 5-значных котировках платформа мт4 считает величину Point пренебрежимо малой и при делении приравнивает к нулю.

в целом - да...

double marginreq=MarketInfo( Symbol(), MODE_MARGINREQUIRED);

double vol=(bal*0.1)/marginreq;

это и давало ошибку.....

вылечил так:

double marginreq=MarketInfo( Symbol(), MODE_MARGINREQUIRED);

marginreq=NormalizeDouble( marginreq,Digits);

double vol=(bal*0.1)/marginreq;
 
Mrak писал(а) >>

в целом - да...

это и давало ошибку.....

вылечил так:

marginreq=NormalizeDouble( marginreq,Digits);

интересно, а почему к Digits? :-)

 
Shu >>:

интересно, а почему к Digits? :-)

int Digits
Количество цифр после десятичной точки в цене текущего инструмента.
 

double NormalizeDouble( double value, int digits) 
Округление числа с плавающей запятой до указанной точности.
Рассчитываемые значения StopLoss, TakeProfit, а также значения цены открытия отложенных ордеров должны быть нормализованы с точностью, значение которой хранится в предопределенной переменной Digits. 
 


тупо сделал как хелп советовал...)))))))))

Причина обращения: