Пересечение индикатора с баром

 

Добрый день!

Подскажите новичку такой вопрос: необходимо определить, что график индикатора пересекается с баром.

Значение индикатора я получаю через iCustom. Затем проверяю факт пересечения следующей функцией:

bool crossBar(double v)
{
if ((v >= Low[0]) && (v <= High[0])) {
return (true);
}
return (false);

}

Запускаю тест в режиме "по ценам открытия" и ни одного пересечения. Хотя я вижу на графике что индикатор несколько раз пересекал бары. Честно говоря не понимаю как такое может быть. High и Low - это и есть линия бара, нулевой индекс - текущее значение... Может это связано с типом тестирования или периодом советника? У меня он M30. Хотя непонятно как это может влиять: ведь графически я вижу пересечение. Стандартной функции не нашел, поэтому писал свою. Может подскажете, если есть стандартная функция. Есть подозрение что я упускаю какой-то нюанс (опыта разработки на MQL4 практически нет).

 
Уже после размещения заметил что есть специальная тема для новичков... Админы, перенесите туда если что...
 
arkadios:

Добрый день!

Подскажите новичку такой вопрос: необходимо определить, что график индикатора пересекается с баром.

Значение индикатора я получаю через iCustom. Затем проверяю факт пересечения следующей функцией:

bool crossBar(double v)
{
if ((v >= Low[0]) && (v <= High[0])) {
return (true);
}
return (false);

}

Запускаю тест в режиме "по ценам открытия" и ни одного пересечения. Хотя я вижу на графике что индикатор несколько раз пересекал бары. Честно говоря не понимаю как такое может быть. High и Low - это и есть линия бара, нулевой индекс - текущее значение... Может это связано с типом тестирования или периодом советника? У меня он M30. Хотя непонятно как это может влиять: ведь графически я вижу пересечение. Стандартной функции не нашел, поэтому писал свою. Может подскажете, если есть стандартная функция. Есть подозрение что я упускаю какой-то нюанс (опыта разработки на MQL4 практически нет).



И как Вы думаете - чему равны Low[0] и High[0] в момент открытия 0 бара ?
 
Полагаю минимальной и максимальной цене соответственно для данного бара
 
arkadios:
Полагаю минимальной и максимальной цене соответственно для данного бара

Вот-вот, а на первом тике Low[0]=High[0]=Close[0]=Open[0]
 

Понял. В доках нашел функцию iLowest, я правильно понимаю, что для моей задачи нужно получать значение так:

double L = Low[iLowest(Symbol(), 0, PRICE_LOW, 1, 1)];
double H = High[iHighest(Symbol(), 0, PRICE_HIGH, 1, 1)];

 
arkadios:

Понял. В доках нашел функцию iLowest, я правильно понимаю, что для моей задачи нужно получать значение так:

double L = Low[iLowest(Symbol(), 0, PRICE_LOW, 1, 1)]; просто: double L = Low[1];
double H = High[iHighest(Symbol(), 0, PRICE_HIGH, 1, 1)]; double H = High[1];

Вы невнимательны, потому не понимаете:

int iLowest( string symbol, int timeframe, int type, int count=WHOLE_ARRAY, int start=0)
Возвращает индекс найденного наименьшего значения (смещение относительно текущего бара).

Это номер бара(shift) наименьшего значения. В вашей формуле проверяeтся 1 бар из одного! Сначала разберитесь, для чего служат эти функции.
Функцию (Low) тоже разберите! Программирование требует предельной внимательности!

 
bool crossBar(double v)
{
if ((v >= Low[1]) && (v <= High[1])) {
return (true);
}
return (false); 

}
Так интереснее если по ценам открытия тестировать.
 
Так цену открытия или закрытия бара брать,я что то не пойму,может быть просто закрытие взять и все.
Причина обращения: