Не могу решить задачу
Если нужно определить, находился ли 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(); } } }
Помогите решить задачу, мозг уже сломал.
Есть пересечение линией любого уровня
Требуется нарисовать зону по крайним точкам за N-баров - размер зоны в барах =40 (это выполнимо)
А вот проверку на новые пересечения в диапазоне =20 баров внутри зоны 40 баров не могу реализовать
Т.е. перед тем как нарисовать всю зону в 40 баров назад до пересечения, требуется проверить находилась ли линия внутри уровней на протяжении 20 баров от начала
После проверки 20-ти баров далее пересечения не важны, главное чтобы от начала пересечения и до 20 баров линия больше не пересекала уровни.