Скачать MetaTrader 5

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

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Аркадий
15
Аркадий 2013.12.19 20:36 

Добрый день!

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

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

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

}

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

Аркадий
15
Аркадий 2013.12.19 20:37  
Уже после размещения заметил что есть специальная тема для новичков... Админы, перенесите туда если что...
Vladyslav Goshkov
2153
Vladyslav Goshkov 2013.12.19 21:14  
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 бара ?
Аркадий
15
Аркадий 2013.12.19 21:22  
Полагаю минимальной и максимальной цене соответственно для данного бара
Vitalie Postolache
12247
Vitalie Postolache 2013.12.19 21:55  
arkadios:
Полагаю минимальной и максимальной цене соответственно для данного бара

Вот-вот, а на первом тике Low[0]=High[0]=Close[0]=Open[0]
Аркадий
15
Аркадий 2013.12.19 22:33  

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

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

Boris
3896
Boris 2013.12.19 22:56  
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) тоже разберите! Программирование требует предельной внимательности!

Всеволод
648
Всеволод 2013.12.22 08:44  
bool crossBar(double v)
{
if ((v >= Low[1]) && (v <= High[1])) {
return (true);
}
return (false); 

}
Так интереснее если по ценам открытия тестировать.
Александр
287
Александр 2013.12.22 11:04  
Так цену открытия или закрытия бара брать,я что то не пойму,может быть просто закрытие взять и все.
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий