Нахождение коротких и длинных баров.(mql4)

 

Помогите пожалуйста, кто знает функцию нахождения коротких и длинных баров.(короткие бары указываются в extern)

Попытался написать сам и вот, что получилось:


extern double SizeBars2 = 0.0006;

string BullOrBear (int number_of_bar){

string lo;

if(Open[number_of_bar] < Close[number_of_bar]){lo = "Bull";}

else if(Open[number_of_bar] > Close[number_of_bar]){lo = "Bear";} 

return(lo);}


int SizeBars (int number_of_bar){

int l;

double m = Close[number_of_bar], n = Open[number_of_bar];

   if(BullOrBear(number_of_bar) == "Bull")

  {if(m-n <= SizeBars2){l = 1;}

   else if(m-n > SizeBars2){l = 0;}}

   else if(BullOrBear(number_of_bar) == "Bear")

  {if(n-m <= SizeBars2){l = 1;}

   else if(n-m > SizeBars2){l = 0;}}

   return(l); 

}


Две функции, одна вычисляет медвежий(bear) или бычий(bull) это бар, а другая короткий(1) или длинный(0), используя первую. Однако, когда я проверяю, то бывает что на короткий показывает, что он длинный, а на длинный, что он короткий. Я не понимаю в чём проблема, помогите пожалуйста!!!

 
arethel:  Помогите пожалуйста, кто знает функцию нахождения коротких и длинных баров.(короткие бары указываются в extern)
string BullOrBear (int n_bar)
{
   if(Open[n_bar] < Close[n_bar])   return "Bull";   // Рогатый
   if(Open[n_bar] > Close[n_bar])   return "Bear";   // Любитель меда
   return "Додж";
}

int SizeBars (int number_of_bar)
{
   if(fabs(Close[number_of_bar] - Open[number_of_bar])< SizeBars2) return 0;  // Если разность мала - ясно, мелкий
                                                            else   return 1;  //                      иначе БОЛЬШОЙ!!!
}

Переделал Ваши функции. Попробуйте так в следующий раз

 

Большое спасибо!!!

 
arethel:   Большое спасибо!!!
Вы уже попробовали? Использовали ли функцию TimeOnDropped? Результат какой? Заметили, что мой код раза в 3 короче?
Причина обращения: