Помогите найти ошибку в формуле или логике

 
Добрый день.
Пишу индикатор...
 while(pos>=0)
{
dHigh = High[pos];
dLow = Low[pos];
dOpen = Open[pos];
dClose = Close[pos];
dVolume = Volume[pos];
dCandle = (dHigh-dLow)*100000;
dResult = dCandle;

ExtMapBuffer1[pos]= dResult;

pos--;

}


При таком выводе все выводит на график.

Как только пытаюсь добавить в формулу "деление", график пустой...

while(pos>=0)
{
dHigh = High[pos];
dLow = Low[pos];
dOpen = Open[pos];
dClose = Close[pos];
dVolume = Volume[pos];
dCandle = (dHigh-dLow)*100000;
dResult = dVolume/dCandle;

ExtMapBuffer1[pos]= dResult;

pos--;

}


Помогите понять где ошибка

 

Не глядя на Ваш код, при делении может быть два косяка:

-деление на ноль;

-ожидание увидеть дробное число при делении целочисленного типа.


Решение: всегда перед делением проверять знаменатель на неравенство нулю, и если хотите получить double, то надо явно указывать этот тип.

double a;

int b=1,c=2;

//.....

if(c!=0) a=(double)b/c;
Если не указать (double)b, то вместо 0.5 получим 0.0, поскольку здесь округление до целого происходит отбрасыванием дробной части. А так Вы явно говорите, что b теперь не int, а double.
 
Aleksei Stepanenko:

Не глядя на Ваш код, при делении может быть два косяка:

-деление на ноль;

-ожидание увидеть дробное число при делении целочисленного типа.


Решение: всегда перед делением проверять знаменатель на неравенство нулю, и если хотите получить double, то надо явно указывать этот тип.

Если не указать (double)b, то вместо 0.5 получим 0.0, поскольку здесь округление до целого происходит отбрасыванием дробной части. А так Вы явно говорите, что b теперь не int, а double.
Начало где задаются переменные - все имеют тип double:

double dHigh , dLow , dResult, dOpen, dClose, dVolume, dCandle;
 

> dHigh-dLow

На графиках бывают пустые свечки с одинаковыми хаями и лоями, что даёт нулевой диапазон и ошибку при делении. От них надо страховаться, только для вещественных лучше не  dHigh-dLow != 0, а fabs(dHigh-dLow) < _Point.

Ещё - если индюк в основном окне, значения таких преобразований запросто могут улетать далеко вверх или вниз и их просто не будет видно.

 
SeriousRacoon:

> dHigh-dLow

На графиках бывают пустые свечки с одинаковыми хаями и лоями, что даёт нулевой диапазон и ошибку при делении. От них надо страховаться, только для вещественных лучше не  dHigh-dLow != 0, а fabs(dHigh-dLow) < _Point.

Ещё - если индюк в основном окне, значения таких преобразований запросто могут улетать далеко вверх или вниз и их просто не будет видно.

Ты просто Золотце! спасибо большое!