Как научить индикатор определять положение точки пересечения 2-х линий относительно линии 0 .
Народ, 100% вопрос уже ни раз приходилось решать большинству из Вас, помогите, как научить индикатор определять положение точки пересечения 2-х линий относительно линии 0 .
Банальная проверка типа одно значение до пересечения больше другого, а после пересечения наоборот, не работает, т.к. это же правило сработает и при разностороннем движении линий инди.
Я вижу визуально, что линии пересеклись, и мне надо точно знать, где находится т.ПЕРЕСЕЧЕНИЯ этих 2-х линий - ВЫШЕ 0 или НИЖЕ.
Неужели придется использовать мат.формулы для расчета точки пересечения 2-х функций, с последующим сравнением с 0?
Заранее очень сильно благодарю!!
- Помогите с индикатором, плиз!
- Правильная формула индекса
- Полезные функции от KimIV
Да уж, пока не очень понятно, к чему эта задачка. Неужели трейдерам приходится решать такие задачи? ОК, сначала - рисунок.
Точки с индексом 2 - это на баре 2, соответственно с индексом 1 - на баре 1. Пересечение где-то между барами, но уровень неизвестен.
Black1, Black2, Green1, Green2 - это значения линий.
Значение черной линии в точке Х (точке пересечения) равно (1-k) * Black2 + k * Black1 при некотором k. (1) Проще записать это как Black2 + k * (Black1 - Black2) и постепенно увеличивать k от 0 (левый конец отрезка) до 1 (правый), чтобы понять, как оно изменяется слева направо.
С другой стороны, значение зеленой в той же точке равно (1-k) * Green2 + k * Green1 = Green2 + k * (Green1 - Green2). (2)
Значения k в обоих случаях должны быть равны - в силу того, что и зеленый, и черный отрезок делятся в равных пропорциях в точке пересечения. Решаем уравнение относительно k, приравнивая выражения (1) и (2):
Black2 + k * (Black1 - Black2) = Green2 + k * (Green1 - Green2).
Решив его, дальше подставьте его в любое из выражений (1) или (2) и сравните с нулем.
Mathemat :
пр аппроксимации отрезками ордината точки пересечения
пр аппроксимации отрезками ордината точки пересечения
Я бы сделал именно так и не парился с "суперточностью".
А топикстартеру хочется дать совет : не можете сами посчитать место пересечения двух точек - бегите подальше от форекса. Ну если уж точнее - от программирования торговых систем. Иначе вас форекс без трусов оставит. Вам оно нада?
А топикстартеру хочется дать совет : не можете сами посчитать место пересечения двух точек - бегите подальше от форекса. Ну если уж точнее - от программирования торговых систем. Иначе вас форекс без трусов оставит. Вам оно нада?
До форекса дело может и не дойдёт. А решение такого плана задачек- для головы полезно. Сколько человек узнали о преобразовании Фурье благодаря форексу?!
PS: Пересечение- это когда обе линии задаются уравнениями y = kx + b k и b нужно найти. Шаг x = 1 (1 бар)- x1 = 0 (предыдущий бар), x2 = 1 (текущий бар). Находится x пересечения, от него- y пересечения.
Кому задачку?! Я решал именно с kx + b. ))
)) пр аппроксимации отрезками ордината точки пересечения y=(Green1+Green2+Black1+Black2)/4
Нет. Проверка, как всегда предельным переходом: для двух параллельных прямых. По такому расчету точку можно найти, а реально ее нет.
alsu :
пр аппроксимации отрезками ордината точки пересечения
Нет. Проверка, как всегда предельным переходом: для двух параллельных прямых. По такому расчету точку можно найти, а реально ее нет.
2 ТС: А что мешает найти точку пересечения (ф-ция Кима годится) и посмотреть на значение ординаты (t[1]) - больше или меньше нуля ?
Точка пересечения диагоналей - центр тяжести системы из его вершин? Нет. Контрпример - когда пересечение в точности на правом конце.
P.S. Кстати, основное уравнение не всегда решается:
Black2 + k * (Black1 - Black2) = Green2 + k * (Green1 - Green2)
Если к-ты при k одинаковы, а свободные члены разные (как раз случай параллельности и неидентичности прямых), то решений нет.
Конечно, правильно еще и убедиться в том, что пересечение было между левым и правым концом. Но это совсем просто.
Безусловно эта формула не точна. Но меня бы устроила.
более точную формулу можно найти так:
берём центры боковых сторон. рисуем линию между ними. точка пересечения находится на ней.
находим теперь линейную комбинацию для определения "где именно": p = abs(green1-black1) / abs(green2-black2);
значит наши коэффициенты равны p и (1-p) соответственно.
отсюда искомый X = sign(((green1+black1)/2)*p + ((green2+black2)/2)*(1-p))
Если точка пересечения есть (простое условие)- то все хорошо
В принципе тогда можно и так:
else return(Нет пересечения на интересующем участке);
- Бесплатные приложения для трейдинга
- Форексный VPS бесплатно на 24 часа
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.