Помогите разобраться с советником

 

Написала советник для определения фракталов.

Он определил фрактал, но пометил только один.

Не могу понять, почему он не отметил все фракталы на графике.

Подскажите пожалуста, кто знает.

int start()
{
double C;
datetime B;
int A;
//----
if
(High[1]<High[3]&&
High[2]<High[3]&&
High[3]>High[4]&&
High[3]>High[5])
{
A++;
B=Time [c];
C=High [c];

ObjectCreate("A", OBJ_ARROW, 0, B,C);
ObjectSet("A", OBJPROP_ARROWCODE, C);
}

//----
if
(Low[1]>Low[3]&&
Low[2]>Low[3]&&
Low[3]<Low[4]&&
Low[3]<Low[5])
{
A++;
B=Time [3];
C=Low [3];

ObjectCreate("A", OBJ_ARROW, 0, B, C);
ObjectSet("A", OBJPROP_ARROWCODE, C);
}

//----

//----
return;
}

 

Все не так просто, посмотрите код индикатора 'Fractals', функционально он сопоставим с тем, что Вы пытаетесь сделать.

А один потому, что надо в цикле проходить все бары от 0 до Bars, а Вы ищите фрактал исключительно на 3м баре.

 

Потомучто у вас жесткое условие по определению только фрактала на первых шести свечах:

if(High[1]<High[3]&&
High[2]<High[3]&&
High[3]>High[4]&&
High[3]>High[5])


Тоесть ваш индикатор не ищет фракталы дальше шестой свечи.

 

А в чем сыр-бор? Чем родные фракталы не угодили? Если необходимо определить фракталы в советнике, то 

double iFractals( string symbol, int timeframe, int mode, int shift) 

Расчет индикатора Fractals более удобно.

 
expromt писал(а) >>

Потомучто у вас жесткое условие по определению только фрактала на первых шести свечах:

if(High[1]<High[3]&&
High[2]<High[3]&&
High[3]>High[4]&&
High[3]>High[5])

Тоесть ваш индикатор не ищет фракталы дальше шестой свечи.

При появлении новых данных индексы баров сдвигаются и разве start не должен снова проверять условия уже на новых данных?

 
torgtorg12 писал(а) >>

При появлении новых данных индексы баров сдвигаются и разве start не должен снова проверять условия уже на новых данных?

Кажется я понял, что Вы хотите сделать, типа искать фракталы онлайн, а не на истории. Так работает, думается Вы сами поймете в чем была ошибка.

int start()
{
double C;
datetime B;
string A="Fractal";
//----
if 
(High[1]<High[3]&&
High[2]<High[3]&&
High[3]>High[4]&&
High[3]>High[5])
{

B=Time [3];
C=High [3];

ObjectCreate(A+B, OBJ_ARROW, 0, B,C); 
ObjectSet(A+B, OBJPROP_ARROWCODE, C);
}

//----
if 
(Low[1]>Low[3]&&
Low[2]>Low[3]&&
Low[3]<Low[4]&&
Low[3]<Low[5])
{

B=Time [3];
C=Low [3];

ObjectCreate(A+B, OBJ_ARROW, 0, B, C); 
ObjectSet(A+B, OBJPROP_ARROWCODE, C);
}

//----

//----
return;
}

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