Проблема с циклами for & while

 

Я хочу найти с помощью цикла мою свечю с которой в дальнейшем я должен работать...

Я использую этот цикл

 double OpenPrice1Bar=x; // это переменная которая сдержит значение Open Х бара, который нужно найти


int i=0;


while(i<=Bars) 
{
 if(Open[i]==OpenPrice1Bar)    
{
SearchBarIs=i;
break;
}

i++

}
return;




ИЛИ



for( int iii=0; iii<=500; iii++)
{
 if(Open[i]==OpenPrice1Bar)    
{
SearchBarIs=i;
break;
}

}
return;


но ничего так и не могу вызначить, циклы доходят до конца и кончаются.....


Спасибо за внимание ;)

 
JohnOne:

Я хочю найти с помощю цикла мою свечю с которой в дальнейшем я должен роботать...

Я использую этот цыкл


double OpenPrice1Bar=x; // это переменная которая сдержит значение Open Х бара, который нужно найти


int i=0;

for(i=0; i<Bars && MathAbs(Open[i]-OpenPrice1Bar)<Point; i++) 
{}

if ( i<Bars )
   SearchBarIs=i;

return;
 
PapaYozh:


Спасибо за помощь!

А теперь вопрос к АВТОРАМ-

1. что это за язык что не может сравнить две величины?

2. Где про это было написано, я в Справочнике такого не видел??? !

ещё раз спасибо за ответы.

 

Блин. ну уж скока говорено - прежде чем сравнивать дубли, предварительно нормализуй.

 
JohnOne:

Спасибо за помощь!

А теперь вопрос к АВТОРАМ-

1. что это за язык что не может сравнить две величины?

2. Где про это было написано, я в Справочнике такого не видел??? !

ещё раз спасибо за ответы.


Язык прекрасно работает с операциями сравнения, но вы пытаетесь проверить на равенство double. Это плохая практика в любом языке программирования.
 
xrust:

Блин. ну уж скока говорено - прежде чем сравнивать дубли, предварительно нормализуй.



Значения были проведены через Нормализацию, безрезультатно.

 
JohnOne:


Значения были проведены через Нормализацию, безрезультатно.

? Интересно, и как же Вы предопределенную переменную Open нормализовали ?

 double OpenPrice1Bar=x; // это переменная которая сдержит значение Open Х бара, который нужно найти


int i=0;


while(i<=Bars) 
{
 if(Open[i]==OpenPrice1Bar)    
{


Лень повторяться: это (подчеркнутое), при условии вещественных типов, неверно практически для любого языка программирования. Ищите по форуму. Один из вариантов:

int i=0;
double hPoint = 0.5*Point;

while(i<=Bars) 
{
 if( MathAbs(Open[i]-OpenPrice1Bar)< hPoint   )
{
 
JohnOne:

for( int iii=0; iii<=500; iii++)
{
if(Open[i]==OpenPrice1Bar)
{
SearchBarIs=i;
break;
}

}
return;




iii замени на i
 

))) мудрецы намудрили

у меня даблы нормально сравниваются, без всяких нормализаций

тов. Risk правильно сказал, там просто ошибка в цикле была 

 
knt-kmrd:

))) мудрецы намудрили

у меня даблы нормально сравниваются, без всяких нормализаций

тов. Risk правильно сказал, там просто ошибка в цикле была

В цикле while ошибки не было - смотрите внимательней.
 

У меня код из первого поста нормально отрабатывает, без нормализации.

Возможно у топикстартера МТ криво установился, тем более даже нормализация не помогает, либо МТ не поддерживает его конфигурацию оборудования или ОС.

Либо, может массив Open действительно не содержит искомого значения ( я брал OpenPrice1Bar = Open[10] ).

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