Если нужно определить, находился ли RSI между заданными уровнями, не выходя за их пределы, то для этого потребуется организовать цикл по таким барам. На каждом баре брать значение RSI и сравнивать на выход из заданной зоны:
bool IsRSIBetweenLevels() { for(i = 40; i > 19; --i) { double fRSI = iRSI(NULL, PERIOD_CURRENT, 7, PRICE_CLOSE, i); if (fRSI > LevelUP || fRSI < LevelDN) return false; } return true; }
Если функция вернет true - выхода из зоны не было. В противном случае - было.
Если нужно определить, находился ли RSI между заданными уровнями, не выходя за их пределы, то для этого потребуется организовать цикл по таким барам. На каждом баре брать значение RSI и сравнивать на выход из заданной зоны:
Если функция вернет true - выхода из зоны не было. В противном случае - было.
Спасибо
Print показывает
По всей истории в итоге результат =false
Ни одного результата =true
=========================
Известно время бара где было требуемое пересечение,
так же можно получить время бара с шагом в 20 баров от места пересечения
и в этом промежутке перебрать все бары по индикатору
Вот что-то правильное в голове крутится, но решение не приходит))
Спасибо
Print показывает
По всей истории в итоге результат =false
Ни одного результата =true
Все зависит от того, какие используются значения LevelUP и LevelDn. Возможно, они слишком близки друг к другу. Тогда результат закономерен. А вот если взять LevelUP = 100 и LevelDN = 0, то получится обратный результат - практически на всей истории результат true.
Помогите решить задачу, мозг уже сломал.
Есть пересечение линией любого уровня
Требуется нарисовать зону по крайним точкам за N-баров - размер зоны в барах =40 (это выполнимо)
А вот проверку на новые пересечения в диапазоне =20 баров внутри зоны 40 баров не могу реализовать
Т.е. перед тем как нарисовать всю зону в 40 баров назад до пересечения, требуется проверить находилась ли линия внутри уровней на протяжении 20 баров от начала
После проверки 20-ти баров далее пересечения не важны, главное чтобы от начала пересечения и до 20 баров линия больше не пересекала уровни.
Сформулируйте задачу, чтобы она была понятна, тогда, может, самостоятельно получится ее решить.
Есть 3 точки
int LevelUP=70; int LevelDN=30; int LongZone=40; int ShortZone=20; for(i=limit; i>=0; i--) { /*1*/ Time[i]; //Точка начала анализа /*2*/ Time[i+ShortZone]; //Точка дополнительного анализа, середина зоны /*3*/ Time[i+LongZone]; //Точка пересечения линии с уровнем }
Как эти точки объединить в одну общую проверку?
Сформулируйте задачу, чтобы она была понятна, тогда, может, самостоятельно получится ее решить.
Я описал суть вопроса, но самостоятельно решить не идёт правильная мысль, вот и прошу помощи, может что-то не вижу или не учитываю
Выбираются крайние точки и все
Есть время первого и последнего интересующего бара, а так-же максимальная верхняя точка и нижняя этих баров (не важно точки индикатора, или цены). Все можно рисовать прямоугольную зону.
Выбираются крайние точки и все
Есть время первого и последнего интересующего бара, а так-же максимальная верхняя точка и нижняя этих баров (не важно точки индикатора, или цены). Все можно рисовать прямоугольную зону.
С этим нет проблем нарисовать зону по крайним точкам.
Есть проблема анализа на повторное пересечения уровней внутри этой зоны от 0 до 20 баров
Например зона 40 баров, она уже есть и требуется ещё сделать проверку на наличия пересечений на дистанции в 20 баров от места первого пересечения.
Т.е. если зона 40 баров и на протяжении 20 баров было ещё пересечение выше-ниже уровня, то такая зона не рисуется,
а если не было больше пересечений на протяжении 20 баров, то такая зона может рисоваться.
С этим нет проблем нарисовать зону по крайним точкам.
Есть проблема анализа на повторное пересечения уровней внутри этой зоны от 0 до 20 баров
Например зона 40 баров, она уже есть и требуется ещё сделать проверку на наличия пересечений на дистанции в 20 баров от места первого пересечения.
Т.е. если зона 40 баров и на протяжении 20 баров было ещё пересечение выше-ниже уровня, то такая зона не рисуется,
а если не было больше пересечений на протяжении 20 баров, то такая зона может рисоваться.
это имеется в виду?
int LevelUP=70; int LevelDN=30; int LongZone=40; int ShortZone=20; for(int i=limit; i>=0; i--) { if(i+LongZone >= rates_total) continue; //Проверка что 40 баров назад было пересечение внутрь между уровней if((RSI(i+LongZone)>LevelUP && RSI(i+LongZone-1)<LevelUP) || (RSI(i+LongZone)<LevelDN && RSI(i+LongZone-1)>LevelDN)) { bool intersectionOfLines = false; for(int z = i+LongZone-1; z >= i+LongZone - ShortZone && z > 0; z--) { if(RSI(z)>LevelUP || RSI(z)<LevelDN) { intersectionOfLines = true; break; } } if(intersectionOfLines == false) { createZone(); } } }
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Помогите решить задачу, мозг уже сломал.
Есть пересечение линией любого уровня
Требуется нарисовать зону по крайним точкам за N-баров - размер зоны в барах =40 (это выполнимо)
А вот проверку на новые пересечения в диапазоне =20 баров внутри зоны 40 баров не могу реализовать
Т.е. перед тем как нарисовать всю зону в 40 баров назад до пересечения, требуется проверить находилась ли линия внутри уровней на протяжении 20 баров от начала
После проверки 20-ти баров далее пересечения не важны, главное чтобы от начала пересечения и до 20 баров линия больше не пересекала уровни.