Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 480
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Помогите пожалуйста перевести алгоритм нахождения координаты точки пересечения двух отрезков
Из статьи:
Все очень просто!
А, может быть, у кого-нибудь в архивах есть уже готовый?х1, у1 и х2,у2 - координаты вершин первого отрезка;
х3, у3 и х4,у4 - координаты вершин второго отрезка;
для нахождения пересечения составляем уравнения прямых:
первое уравнение:
(x-x1)/(x2-x1)=(y-y1)/(y2-y1);
второе уравнение
(x-x3)/(x4-x3)=(y-y3)/(y4-y3);
эти уравнения определяют прямую проходящую через две точки, то, что нам и надо.
Из этих уравнений находим х и у по следующим формулам:
x:=((x1*y2-x2*y1)*(x4-x3)-(x3*y4-x4*y3)*(x2-x1))/((y1-y2)*(x4-x3)-(y3-y4)*(x2-x1));
y:=((y3-y4)*x-(x3*y4-x4*y3))/(x4-x3);
так как наши прямые пересекаются, то у них есть общая точка пересечения с координатами (х,у), которую нам и надо найти.
для того, чтоб пересечение принадлежало нашим отрезкам, нужно его ограничить, т. е проверить условие:
если
(((x1<=x)and(x2>=x)and(x3<=x)and(x4 >=x))or((y1<=y)and(y2>=y)and(y3<=y) and(y4>=y)))
то существует точка пересечения данных отрезков, а нет – то нет и точки пересечения.
Еще следует проверить параллельность этих отрезков при помощи угловых коэффициентов:
k1:=(x2-x1)/(y2-y1);
k2:=(x4-x3)/(y4-y3);
где k1 и k2 – тангенсы угла наклона отрезков к положительному направлению оси ОХ, если k1=k2, то отрезки параллельны, а значит, не имеют точек пересечения.
Здравствуйте уважаемые!
Помогите пожалуйста перевести алгоритм нахождения координаты точки пересечения двух отрезков
Из статьи:
Все очень просто!
А, может быть, у кого-нибудь в архивах есть уже готовый?х1, у1 и х2,у2 - координаты вершин первого отрезка;
х3, у3 и х4,у4 - координаты вершин второго отрезка;
для нахождения пересечения составляем уравнения прямых:
первое уравнение:
(x-x1)/(x2-x1)=(y-y1)/(y2-y1);
второе уравнение
(x-x3)/(x4-x3)=(y-y3)/(y4-y3);
эти уравнения определяют прямую проходящую через две точки, то, что нам и надо.
Из этих уравнений находим х и у по следующим формулам:
x:=((x1*y2-x2*y1)*(x4-x3)-(x3*y4-x4*y3)*(x2-x1))/((y1-y2)*(x4-x3)-(y3-y4)*(x2-x1));
y:=((y3-y4)*x-(x3*y4-x4*y3))/(x4-x3);
так как наши прямые пересекаются, то у них есть общая точка пересечения с координатами (х,у), которую нам и надо найти.
для того, чтоб пересечение принадлежало нашим отрезкам, нужно его ограничить, т. е проверить условие:
если
(((x1<=x)and(x2>=x)and(x3<=x)and(x4 >=x))or((y1<=y)and(y2>=y)and(y3<=y) and(y4>=y)))
то существует точка пересечения данных отрезков, а нет – то нет и точки пересечения.
Еще следует проверить параллельность этих отрезков при помощи угловых коэффициентов:
k1:=(x2-x1)/(y2-y1);
k2:=(x4-x3)/(y4-y3);
где k1 и k2 – тангенсы угла наклона отрезков к положительному направлению оси ОХ, если k1=k2, то отрезки параллельны, а значит, не имеют точек пересечения.
Что-то больно замудрёно... Я писал определение пересечения прямых, одна по 2м хаям и другая по 2м лоу, дальше следующего бара или нет. Писал через тангенс, отношение разницы цены в пунктах к количеству баров между хаями по которым проводится линия. Соответственно тангенс угла второй линии, по лоу. И потом через тангенс находил количество пунктов на следующем баре, т.е. обратная формула с изменённым значением одного катета (количества баров). Получается значение цены в проверяемой точке этих прямых. И соответственно если значение цены прямой по хаям меньше, то пересечение было.
Но пока что-то не могу найти этот индикатор.
...
А, может быть, у кого-нибудь в архивах есть уже готовый?
Ким выкладывал функцию. Ф-ция возвращает цену точки луча, проведённого от линии вправо.
х1 - бар первой координаты линии, у1 - цена первой координаты линии. х2 - бар второй координаты линии, у2 - цена второй координаты линии, х - бар, для которого вернёт цену.
Можно найти для каждой из двух линий цены, ну и посмотреть пересекаются ли они..
Я тут написал вроде..., что-то считается и рисуется, но не на каждом пересечении. Что-то не корректно у меня написано. А, в чём дело, не пойму.
Спасибо большое Алексею и Артёму за внимание к моему вопросу!
Я тут написал вроде..., что-то считается и рисуется, но не на каждом пересечении. Что-то не корректно у меня написано. А, в чём дело, не пойму.
В текущий момент, я не в состоянии что-либо понимать в программировании, у моей любимой жены сегодня день варенья. Ей исполнилось 18 лет и 384 месяца.
Но!!! Обрати внимание, что пересечение линий может произойти ВНЕ или МЕЖДУ барами, а цену (координату Y) можно получить только на баре. Или до того как, или после, но точку пересечения не всегда можно определить. Я-бы сказал что это редкость. Учитывая вышесказанное, пересмотри свой код с учётом этого, может получится.
Alexey Viktorov 2015.12.12 17:33 # RU
Ей исполнилось 18 лет
Подскажите пожалуйста, что нужно вставить (какой набор команд) в советник чтобы при пересчете он автоматически исправлял уже установленные тейкпрофиты в открытых позициях. Или может есть скрипт который исправляет все стопы по последнему заданному?
Пожалуйста подскажите как дописать код чтобы в тестере стратегий можно было изменять -подбирать веса паттернов модели. m_pattern_0(90) заменить input переменными
С ООП у меня не очень хорошо, ошибки то "member function not defined", то просто не работает код
Подобный вопрос без ответа тут https://www.mql5.com/ru/forum/13484
p.s.: c CiCustom кажется получается менять моделям веса, а со стандартными индикаторами у которых стандартные классы (типа CSignalEnvelopes и др) где существуют методы для настройки значимости каждой модели, но они пока недоступны из Мастера?
Или может уже где подсказывался на это ответ?
С сайта MetaQuotes что-то грузится, получаю такую картину:
Наверху : База данных 2049/12358 записей.
Свечи: предпоследняя от 17.10.2014, последняя - 14.07.1993.
А где же пропущенные ?