ZigZag как расчитать сформировавшийся луч, и поделить попалам? - страница 3

 
nen >>:

В МТ4 не всегда может быть построен перпендикуляр через середину луча. Если перпендикуляр попадает между барами, то придется выбирать, к какому из соседних баров привязывать перпендикуляр. Надеюсь, что в МТ5 такой проблемы не будет.

Да нет такой проблемы в МТ4. Это вообще не проблема МТ - это проблема выбора типа данных:  введите координаты типа дабл, а не инт  - всех делов. И все может быть построено. Уравнение прямой никак с барами не связано, только две точки по которым сами прямые строятся.

Успехов.

 
DDFedor >>:

Нужен перпендикуляр к лучу. Тогда, думаю, за начальные данные нужно брать "текущиее состояние графика" и текущий масштаб... как ни крути точка отсчета нужна. тогда - "нужен перпендикуляр к лучу зигзага на текущее состояние визуализации графика направленный в сторону движения цены длинной в 1\2 длины луча зигзага".

? нужно уравнение прямой (строится по 2-м опорным точкам) - по нему получите уравнение нормали, проходящей через средину отрезка. Что за проблема ? Аналит геометрия 2-й курс. С масштабированием вообще не связано ;)..

Успехов.

 
VladislavVG писал(а) >>

Да нет такой проблемы в МТ4. Это вообще не проблема МТ - это проблема выбора типа данных: введите координаты типа дабл, а не инт - всех делов. И все может быть построено. Уравнение прямой никак с барами не связано, только две точки по которым сами прямые строятся.

Успехов.

не правда ваша... минимальный шаг для графических объектов по времени - это бар...

 
DDFedor >>:

не правда ваша... минимальный шаг для графических объектов по времени - это бар...

Вы читать умеете ? Причем там графические объекты к системе  уравнений ? Если не понято о чем я написал, то  могу только лишь посоветовать обратиться к соответствующим разделам аналитической геометрии и линейной алгебры и основам программирования (там, где о типах данных) ;).

Успехов.

ЗЫ Если не знаете как нарисовать - подскажу - не нужно на текущем баре привязываться к ценам - нужно вычислить значение прямой, перпендикулярной данному отрезку на заданном баре и проходящей через средину этого отрезка (точнее, это значение нужно получить для двух баров, чтобы не было "визуального" разрыва я, например выбираю один бар левее, чем левая точка нормали - всего делов) - получив эти  две точки, постройте по ним отрезок - это уже штатные средства МТ) - визуально Вы будете видеть нормаль к плечу зиг-зага при любом масштабе.

 
VladislavVG писал(а) >>

Вы читать умеете ? Причем там графические объекты к системе уравнений ? Если не понято о чем я написал, то что могу сказать - учите мат часть, математику и программирование ;).

Успехов.

ЗЫ У меня адверза все точки находит автоматом (в том числе и все уровни по пентаграмме,гексаграмме и ZS комбинации - это примерно то, что Вы считаете невозможным ;) ) - так что не надо рассказывать мне про минимальный шаг, хорошо ?;).. Поиск нормали по зтиг-загу - это забава по сравнению с ней. Если есть вопросы, что такое адверза - сходите на паук - я там когда то скрипты для МТ выкладывал - правда без исходников ;).

понятно... мы о разных вещах говорим... я говорю о том, что нельзя указать начальную(конечную) точку МЕЖДУ барами на графике. и только. я не говорю, что через эту точку нельзя провести расчитанную прямую.

вам тоже... удачи...

 
DDFedor >>:

понятно... мы о разных вещах говорим... я говорю о том, что нельзя указать начальную(конечную) точку МЕЖДУ барами на графике. и только. я не говорю, что через эту точку нельзя провести расчитанную прямую.

вам тоже... удачи...

Постом выше я Вам написал как это можно сделать (правда не знаю как указать мышью - не занимался, но написать скрпт, не проблема, можно даже дописать в код зиг-зага и задать как параметр - к какому количеству плечей зиг-зага строить нормали) и тогда визуально трейдер будет видеть нормаль при любом масштабе. Вам ведь все равно это нарисовано по барам или расчитано по значениям, не привязанным к ценам внутри бара ? Главное вы будете видеть (и знать значения) нужной Вам прямой.

Вот часть поста с "паука" и дописал по поводу нормали :


расчет коэффициентов линий по координатам точек (A*X+B*Y+C=0)
Code:
  
//---------------------------------------------
// Точка Р1 (X1,Y1), Точка Р2 (X2,Y2)
//---------------------------------------------
  A = (Y2 - Y1);
  B = (X1 - X2);
  C = (X2-X1)*Y1-(Y2-Y1)*X1;
//---------------------------------------------

решение системы 2х2 для определения координат точки пересечения. 

Code:
  
//--------------------------------------------------------------------------------
//Пересечение линий L1 (A[L1]*X+B[L1]*Y+C[L1]=0) и L2 (A[L2]*X+B[L2]*Y+C[L2]=0)
//--------------------------------------------------------------------------------
D = A[L1]*B[L2]-A[L2]*B[L1]; 
if(D!=0)

  bnO=(B[L1]*C[L2]-B[L2]*C[L1])/D; /*номер бара точки пересечения */
  pO =(C[L1]*A[L2]-C[L2]*A[L1])/D; /*цена точки пересечения */
  }
//---------------------------------------------
// Если D==0 линии параллельны
//---------------------------------------------

расчет коэффициентов линии (l), параллельной заданной(0)и проходящей через заданную точку(X1,Y1)
Code:
  
//--------------------------------------------------------------------------------

 A[l] = A[0];
 B[l] = B[0];  
 C[l] = -(A[l]*X1+B[l]*Y1);
//---------------------------------------------

Прямая, проходящая через точку М1(X1, Y1) и перпендикулярная к прямой у = kx + b представляется уравнением:
у-Y1 = -(1.0/k)*(X-X1) - подставите номер бара (Х) - получите значение.

Так две точки. Одна левее нужного бара, вторая - можно на предыущем баре ( в смысле на 1-м, можно и на нулевом - разницы нет). Дальше по этим полученым точкам проводим трендовую - получим луч, уходящий в бесконечность (или фиксированой длины - как нарисуете).
   

Успехов.
ЗЗЫ Да, тип для Х и Y должен быть  double, не смотря на то, что Х - это номера баров - иначе не сможете расчитать значения точек пересечения.

 
VladislavVG писал(а) >>

Постом выше я Вам написал как это можно сделать - точнее как сделать так, чтобы визуально Вы видели нормаль при любом масштабе Вам ведь все равно это нарисовано по барам или расчитано по значениям, не привязанным к ценам внутри бара ? Главное вы будете видет (и знать значения) нужной Вам прямой. Вот часть поста в паука и дописал по поводу нормали :

расчет коэффициентов линий по координатам точек (A*X+B*Y+C=0)

Успехов.

Спасибо!

 
DDFedor >>:

Спасибо!

Та не за что. В принципе, там ничего сложного, но если будут проблемы с программированием - маякните. Я пока на работе - времени нет. Если у Вас не получится, хотя сейчас и "завал",  попробую выкроить время. 

Успехов.

 
VladislavVG писал(а) >>

Та не за что. В принципе, там ничего сложного, но если будут проблемы с программированием - маякните. Я пока на работе - времени нет. Если у Вас не получится, хотя сейчас и "завал", попробую выкроить время.

Успехов.

надеюсь, что получится. будут проблемы, обязательно воспользуюсь предложением. разбираться буду не сейчас, а чуть попозже. Спасибо, еще раз. Удачи!

 
VladislavVG 17.07.2009 08:49
nen писал(а) >>

В МТ4 не всегда может быть построен перпендикуляр через середину луча. Если перпендикуляр попадает между барами, то придется выбирать, к какому из соседних баров привязывать перпендикуляр. Надеюсь, что в МТ5 такой проблемы не будет.

Да нет такой проблемы в МТ4. Это вообще не проблема МТ - это проблема выбора типа данных: введите координаты типа дабл, а не инт - всех делов. И все может быть построено. Уравнение прямой никак с барами не связано, только две точки по которым сами прямые строятся.

Успехов.

-------------

То что переменные нужны типа double - вопросов не возникает. Это даже не обсуждается.

-----------------

Я сначала подумал, что перпендикуляр необходимо строить к шкале времени, то есть вертикальную линию. Поэтому ответил: Если перпендикуляр попадает между барами, то придется выбирать, к какому из соседних баров привязывать перпендикуляр. Надеюсь, что в МТ5 такой проблемы не будет.

Мне хотелось бы видеть построение вертикальной линии между барами без применения DLL. Владислав, если Вы это умеете, поделитесь, каким образом это сделать.

---------

Потом я уточнил. И выяснил, что перпендикуляр нужен к середине луча.

Приведу картинки. Первая картинка. На глаз построил линию, перпендикулярную к середине луча:

Вторая картинка. Сжал график, то есть произвел масштабирование. Визуально линия перестала быть перпендикулярной.

Я именно об этом писал.

Владислав, Вы считаете, что применяя Ваш код такого искажения при масштабировании не произойдет? Если код будет работать как скрипт.

Хотелось бы увидеть картинки, которые нарисует Ваш код. Одну картинку до масштабирования. Вторую картинку после масштабирования.

Как найти точку пересечения линий - известно. Множество раз это проделывал в индикаторах.

Только у меня есть недостаток. Каждый раз, когда необходимо сделать построения, я не использую уже наработанный прошлый опыт, а "создаю" все формулы как с читого листа.

Поэтому в разных индикаторах одни и те же построения могут быть решены различными способами.

А если код индикатора большой и создавался на протяжении нескольких лет, то и в одном индикаторе можно найти одинаковые построения, решенные различным образом.

Плюс этого недостатка. Иногда приходят более красивые решения.

------------

Непонятен смысл линии, перпендикулярной к середине луча.

Причина обращения: