проблема с многократным срабатыванием сигнала на 0 баре

 

Доброго времени суток. Столкнулся с проблемой многократного срабатывания сигнала на 0 баре, возможные варианты решения данной проблемы пришедшие мне в голову а также найденные на сайте результата не дают. Суть вычислений сводится к поиску 4 разворотных точек движения цены ( текущего и предыдущего вверх и в низ) Разворотные точки обязательно чередуются, чередования отслеживается через сравнение времени образования сигнала. Одним из вариантов образования разворотной точки есть при пробитии ценой лоу разворотной точки в верх, без предворительного образования разворотной точки вниз, поиск бара с наибольшим хаем, который и становится текущей разворотной точкой в низ. Так вот проблемма заключается в затирании времени предыдущее разворотной точки, тоесть время текущего и предыщего экстремумов становятся идентичными, что в последствии приводит к неверным вычислениям последующих опорных точек. Вот собственно сама часть проблемного кода, возможно у кого нить есть какие либо здравые идеи. Заранее благодарен за толковые мысли.

//-----------------------------------------------------------------------------------------
if(curtime1!=Time[i])
find=true;
//_____________________________нетепичный экстрем 1 хай____________________________
if(mastime[0,1]>mastime[0,0]&& //если т экстрем лоу текущ больше т экстрем хай текущ
Low[i]<Low[iBarShift(NULL,0,mastime[0,1],FALSE)]&&//и лоу текущего бара меньше лоу текущ экстрем лоу
find==true) //и поиск разрешен
{
mastime[1,0]=mastime[0,0]; //текущее время экстр хай становится предыдущим ЗАТИРАЕТСЯ ДАННОЕ ЗНАЧЕНИЕ
icurL=iBarShift(NULL,0,mastime[0,1],FALSE); //поиск смещения текущего экстрем лоу по времени
hprom=0;
for(n=icurL;n>=i;n--)
{
if(hprom<High[n])
{
hprom=High[n];
mastime[0,0]=Time[n]; // ВОЗМОЖОЕ МЕСТО ПРОБЛЕМЫ
}
}
ExtnetipH1[iBarShift(NULL,0,mastime[0,0],FALSE)]=High[iBarShift(NULL,0,mastime[0,0],FALSE)]+10*Point;
curh=High[iBarShift(NULL,0,mastime[0,0],FALSE)];
find=false; //запрещаем дальнейший поиск
curtime1=Time[i];
}

//_____________________________нетепичный экстрем 1 лоу____________________________

 

Вы смешали в одну кучу обработку баров и работа с нулевым баром.

Попробуйте начать так:

if(curtime1==Time[0])return(0);

а потом в конце

curtime1=Time[0];

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