вопрос к программмерам - страница 2

 
marketeer:
Проверьте на деление на ноль.
это точно
 
marketeer:
Проверьте на деление на ноль.

даже если оно и есть, то индикатор ведь все равно вычисляет значение и рисует точку на графике...

 
mike3900:

даже если оно и есть, то индикатор ведь все равно вычисляет значение и рисует точку на графике...
в советнике кажется рисоваться вообще ничего не будет
 
sanyooooook:
в советнике кажется рисоваться вообще ничего не будет

никакой обработки такого варианта в коде нет... то есть все равно по любому этот алгоритм возвращает значение > 0 и < 100

а если бы в строке

DSS = delta/(HighRange - LowRange)*100.0;


HighRange - LowRange было равно 0 (что скорее всего где тут может быть 0), то он бы нарисовал точку на уровне нуля на графике

 
при делении на ноль индикатор, советник или скрипт прекращает свою работу и дальше вычисления не производятся(короче вылетает все), индикатор расчитается только до того места где произошло деление на ноль
 
sanyooooook:
при делении на ноль индикатор, советник или скрипт прекращает свою работу и дальше вычисления не производятся(короче вылетает все), индикатор расчитается только до того места где произошло деление на ноль

это правильно, но учитывая что он считает от большего бара в меньшему (от самого старшего по истории), то при первом же сбое он бы прекратил расчет и просто бы не дошел до того который соответствует сегодняшщему, чего вообще то не наблюдается))) на всех графиках он все считает норм
 

балин наконец то!!!!!

вот как я поменял:

int limit = Bars - Stochastic_period, Bar_OK;
double HighRange, LowRange;
double delta, MIT;
for (int i = limit; i >= 0; i--)
{
HighRange = High[iHighest(NULL,0,MODE_HIGH,Stochastic_period,i)];
LowRange = Low[iLowest(NULL,0,MODE_LOW,Stochastic_period,i)];
delta = Close[i] - LowRange;
if(HighRange - LowRange != 0)
{
MIT = delta/(HighRange - LowRange)*100.0;
MitBuffer[i] = smooth_coefficient * (MIT - MitBuffer[i+1]) + MitBuffer[i+1];
}
}

double DSS;
for (i = limit; i >= 0; i--)
{
HighRange = MitBuffer[ArrayMaximum(MitBuffer, Stochastic_period, i)];
LowRange = MitBuffer[ArrayMinimum(MitBuffer, Stochastic_period, i)];
delta = MitBuffer[i] - LowRange;
if(HighRange - LowRange != 0)
{
DSS = delta/(HighRange - LowRange)*100.0;
DssBuffer[i] = smooth_coefficient * (DSS - DssBuffer[i+1]) + DssBuffer[i+1];
}

}

то есть поскольку он считает от начала по истории то размер массивов надо задать = Bars - Stochastic_period, чего сделать естественно нельзя, потому что надо указывать их размер при инициализации (что к слову сказать весьма неудобно), так вот когда я задал их равным 1000, то все стало считаться нормально

таким образом, можно сделать нормальную человеческую форму расчета если поменять алгоритм и пересчитывать не от начала к сегодняшнему бару а наоборот, тогда будет как ты говоришь, можно только рассчитывать значения для 2 последних баров

 
короче проще через icustom
 

Здравствуйте! есть ли в MQL4 функция ожидания нажатия любой клавиши или кнопки мыши?

хочу посмотреть как будет строиться канал на длине 100 баров побарно

цикл for (i = 100; i >= 0; i--)

{ строить канал i ;

нажатие любой клавиши ;

}

как реализовать нажатие клавиши?