Не знаю поможет ли, но раньше было так:
(SMA1 - SMA2) x 100 / SMA2 != ((SMA1 - SMA2) x 100) / SMA2
Менялась точность вычислений в последних знаках. Возможно у Вас получаются очень маленькие значения соизмеримые с этой разницей в вычислениях.
Я уже пробовал ставить скобки и так ExtBuffer0[i] = ((SMA1-SMA2)*100)/SMA2; Результат такой же.
Возможна ли эта ситуация из-за процессоров семейства Sempron Mobile?
Я уже пробовал ставить скобки и так ExtBuffer0[i] = ((SMA1-SMA2)*100)/SMA2; Результат такой же.
Возможна ли эта ситуация из-за процессоров семейства Sempron Mobile?
Возможно просто происходит деление на ноль.
Желательно немного изменить конструкцию
ExtBuffer0[i] =0; if (SMA2>0) ExtBuffer0[i] = ((SMA1-SMA2)*100)/SMA2;
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Пишу разновидность индикатора RAVI с целью повышения его наглядности.
Бьюсь несколько часов - не могу понять в чем проблема.
Смысл такой: использую 3 буфера ExtBuffer0, ExtBuffer1, ExtBuffer2. Все вычисления произвожу в ExtBuffer0, затем произвожу копирование данных в ExtBuffer1 или ExtBuffer2 в зависимости от условий.
Основная строка вычисления данных выглядит так:
ExtBuffer0[i] = (SMA1-SMA2)*100/SMA2;
А теперь проблема! Если строка написана ExtBuffer0[i] = (SMA1-SMA2)*100/SMA2, то изображаются данные только из буфера 0, если ExtBuffer0[i] = (SMA1-SMA2)*100 - то все отображается верно из всех 3 буферов.
Выходит, что проблема в операции деления.
Подскажите как быть.
Вот выдержка моего кода:
double prev, current, SMA1, SMA2;
bool up=true;
for(int i = 0; i <= Bars; i++)
{
SMA1=iMA(NULL,0,Period1,0,MODE_SMA,PRICE_CLOSE,i);
SMA2=iMA(NULL,0,Period2,0,MODE_SMA,PRICE_CLOSE,i);
ExtBuffer0[i] = (SMA1-SMA2)*100/SMA2;
}
for(i = Bars-1; i >= 0; i--)
{
current=ExtBuffer0[i];
prev=ExtBuffer0[i+1];
if (current > prev) up = true;
if (current < prev) up = false;
ExtBuffer2[i] = 0.0;
ExtBuffer1[i] = 0.0;
if (up == false)
{
ExtBuffer2[i] = current;
ExtBuffer1[i] = 0.0;
}
if (up == true)
{
ExtBuffer1[i] = current;
ExtBuffer2[i] = 0.0;
}
}