#property copyright "Crazy_Fox [UA]"
#property link "http://finlist.ru"
#property library
double x1=0.0, y1=0.0, x2=0.0, y2=0.0,
x_l=0.0, y_l=0.0, x_f=0.0, y_f=0.0, x_m=0.0, y_m=0.0,
step=0.0, l_border=0.0, h_border=0.0;
bool main_is_up=true;
int Extremum[3], f_bar=0, m_bar=0, l_bar=0;
//--------------------------------------- min_ext -----------------------------------------------
int min_ext(int bar)
{
int i=bar, result=0;
bool find=false;
while (!find)
{ // Åñëè i ìåíüøå ëèáî ðàâíî äâóì áëèçñòîÿùèì ñâå÷àì è ñîñåäÿì ýòèõ ñâå÷åé - ýòî íàø ìèíèìóì
if ((Low[i-2]>=Low[i])&&(Low[i-1]>=Low[i])&&(Low[i]<=Low[i+1])&&(Low[i]<=Low[i+2]))
{ result=i; find=true; }
i++;
}
return(result);
}
//--------------------------------------- max_ext -----------------------------------------------
int max_ext(int bar)
{
int i=bar, result=0;
bool find=false;
while (!find)
{ // Åñëè i áîëüøå ëèáî ðàâíî äâóì áëèçñòîÿùèì ñâå÷àì è ñîñåäÿì ýòèõ ñâå÷åé - ýòî íàø ìàêñèìóì
if ((High[i-2]<=High[i])&&(High[i-1]<=High[i])&&(High[i]>=High[i+1])&&(High[i]>=High[i+2]))
{ result=i; find=true; }
i++;
}
return(result);
}
//--------------------------------------- find_extremums ----------------------------------------
void find_extremums(int i)
{
ArrayInitialize(Extremum,0);
Extremum[0]=min_ext(i); y1=Low[Extremum[0]]; x1=Time[Extremum[0]]; // Èùåì ïåðâûé ìèíèìóì, îïðåäåëÿåì êîîðäèíàòû
Extremum[1]=max_ext(i); y2=High[Extremum[1]]; x2=Time[Extremum[1]]; // Èùåì ïåðâûé ìàêñèìóì, îïðåäåëÿåì êîîðäèíàòû
if (Extremum[0]<Extremum[1]) // Åñëè ìèíèìóì âñòðå÷àåòñÿ ðàíüøå ìàêñèìóìà - òðåòèé ýêñòðåìóì èùåì âíèçó
{
Extremum[2]=min_ext(Extremum[1]); // Ôóíêöèÿ min_ext âîçâðàùàåò íîìåð ïåðâîãî ìèíèìóìà, ïîèñê íà÷èíàåòñÿ ñ
y_l=Low[Extremum[2]]; x_l=Time[Extremum[2]];
y_f=y1; x_f=x1; y_m=y2; x_m=x2;
f_bar=Extremum[0]; m_bar=Extremum[1]; l_bar=Extremum[2];
main_is_up=false;
}
if (Extremum[0]>Extremum[1])
{
Extremum[2]=max_ext(Extremum[0]);
y_l=High[Extremum[2]]; x_l=Time[Extremum[2]];
y_f=y2; x_f=x2; y_m=y1; x_m=x1;
f_bar=Extremum[1]; m_bar=Extremum[0]; l_bar=Extremum[2];
main_is_up=true;
}
if (Extremum[0]==Extremum[1])
if (min_ext(Extremum[0]+1)<max_ext(Extremum[0]+2))
{
Extremum[2]=min_ext(Extremum[0]+2);
y_l=Low[Extremum[2]]; x_l=Time[Extremum[2]];
y_f=y1; x_f=x1; y_m=y2; x_m=x2;
f_bar=Extremum[0]; m_bar=Extremum[1]; l_bar=Extremum[2];
main_is_up=false;
}
else
{
Extremum[2]=max_ext(Extremum[0]+2);
y_l=High[Extremum[2]]; x_l=Time[Extremum[2]];
y_f=y2; x_f=x2; y_m=y1; x_m=x1;
f_bar=Extremum[0]; m_bar=Extremum[1]; l_bar=Extremum[2];
main_is_up=true;
}
}
Comments