Дуги фибоначи

Задавайте общие вопросы о функциях программы.
Ответить
Сообщение
Автор
Grad
Сообщения: 7
Зарегистрирован: Вт апр 17, 2007 6:55 pm

Дуги фибоначи

#1 Сообщение Grad » Вс окт 21, 2007 1:18 am

Могли бы вы объяснить теоретически (раз практически у вас получилось)
как построить дуги, которые пересекали бы прямую в заданных точках (38.2; 50.0; 61.8)
Очень интересно, а вот как это сделать никак не могу понять.
Заранее большое спасибо.

Аватара пользователя
Terranin
Site Admin
Сообщения: 846
Зарегистрирован: Вс июл 23, 2006 12:01 pm

Re: Дуги фибоначи

#2 Сообщение Terranin » Вс окт 21, 2007 3:42 am

Grad писал(а):Могли бы вы объяснить теоретически (раз практически у вас получилось)
как построить дуги, которые пересекали бы прямую в заданных точках (38.2; 50.0; 61.8)
Очень интересно, а вот как это сделать никак не могу понять.
Заранее большое спасибо.
Я чессно уже не очень помню в чем там было дело - решил проблему и забыл. Вот код который рисует дуги, разбирайтесь:

Код: Выделить всё

{-----Paint fibo-------------------------------------------------------------}
procedure TFiboArc.Paint;
var
  i, x1, y1, x2, y2, dx, dy, ex1, ex2, ey1, ey2: integer;
  date1, date2: TDateTime;
  price1, price2, len, flen: double;
  visible: boolean;
  s: string;
begin
  if not(assigned(fLine)) then
    exit;

  GetLinePoints(x1, y1, x2, y2, visible);
  if not(visible) then exit;

  GetLineAbsPoints(date1, price1, date2, price2);
  with diagram.canvas do
    begin
      dx := ((x2 - x1) div 16)*integer(diagram.scale);
      dy := round((price2 - price1)/fCurrency.MinPoint);
      len := dx*dx + dy*dy;
      if len > 0 then
        len := sqrt(len);

      for i:=0 to length(levels) - 1 do
        begin
          flen := len*levels[i].value/100;
          dx := round(flen*16/diagram.scale);
          ex1 := x2 - dx;
          ex2 := x2 + dx;
          ey1 := diagram.GetY(price2 - flen*fCurrency.MinPoint);
          ey2 := diagram.GetY(price2 + flen*fCurrency.MinPoint);

          pen.Color := levels[i].style.color;
          pen.Style := levels[i].style.style;
          pen.Width := levels[i].style.width;
          font.Name := 'Arial';
          font.Color := options.ColorScheme.FrameAndTextColor;
          font.Style := [];
          font.Height := 14;
          s := levels[i].text;
          if y1 < y2 then
            begin
              if ClosedEllipse then
                ellipse(ex1, ey1, ex2, ey2)
              else
                arc(ex1, ey1, ex2, ey2, ex2, y2, ex1, y2);
              TextOut(x2 - (TextWidth(s) div 2), ey2 - TextHeight('0'), s);
            end
          else
            begin
              if ClosedEllipse then
                ellipse(ex1, ey1, ex2, ey2)
              else
                arc(ex1, ey1, ex2, ey2, ex1, y2, ex2, y2);
              TextOut(x2 - (TextWidth(s) div 2), ey1 - TextHeight('0'), s);
            end;
        end;
    end;
end;
Asta la vista
Mike

Grad
Сообщения: 7
Зарегистрирован: Вт апр 17, 2007 6:55 pm

Дуги Фибоначи

#3 Сообщение Grad » Пн окт 22, 2007 3:50 am

Спасибо большое за код.
Но могли бы вы дать ряд следующих пояснений по нему:
1) в чем измеряются координаты линии x1 и x2? (я имею в виду пиксели, или индексы баров или может что-то еще?)
2) Какое значение имеет переменная diagram.scale, и правильно ли я понимаю, что fCurrency.MinPoint - это минимальное изменение валюты, пункт т.е. например 0.0001?
3) Интересно что за магическая цифра 16, на которую сначала делится искомый dx, а затем умножается?

Может быть следующие мои рассуждения натолкнут вас на подсказку мне же:
Все дело как я понимаю заключается в том чтобы найти искомый dx и dy - радиусы эллипса, а потом уже плюсуем к координатам центра эллипса эти значения и получаем то что требуется.
Так вот проблема в том что определенную часть(38.2; 50.0) - отрезок от линии вычислить можно, но ведь это не искомый dx, это то значение где эллипс должен пересечь прямую. А вот dx, другими словами первый радиус эллипса я не представляю как можно подсчитать?
Еще по коду интересен момент почему вы используете разнородные координаты для подсчета dx и dy (для dx - это x1,x2, для dy уже price1, price2, а не те же y1,y2)

Но ведь главное у вас все работает! Честно говоря глядя на то как вычисляется dx в коде и считаются координаты вывода эллипса ey1,ey2 я не понимаю как это работает, вы уж меня извините.

Надеюсь получить разъяснения по коду, может они до конца происнят ситуацию.

Аватара пользователя
Terranin
Site Admin
Сообщения: 846
Зарегистрирован: Вс июл 23, 2006 12:01 pm

Re: Дуги Фибоначи

#4 Сообщение Terranin » Пн окт 22, 2007 4:07 am

Grad писал(а):Спасибо большое за код.
Но могли бы вы дать ряд следующих пояснений по нему:
1) в чем измеряются координаты линии x1 и x2? (я имею в виду пиксели, или индексы баров или может что-то еще?)
2) Какое значение имеет переменная diagram.scale, и правильно ли я понимаю, что fCurrency.MinPoint - это минимальное изменение валюты, пункт т.е. например 0.0001?
3) Интересно что за магическая цифра 16, на которую сначала делится искомый dx, а затем умножается?

Может быть следующие мои рассуждения натолкнут вас на подсказку мне же:
Все дело как я понимаю заключается в том чтобы найти искомый dx и dy - радиусы эллипса, а потом уже плюсуем к координатам центра эллипса эти значения и получаем то что требуется.
Так вот проблема в том что определенную часть(38.2; 50.0) - отрезок от линии вычислить можно, но ведь это не искомый dx, это то значение где эллипс должен пересечь прямую. А вот dx, другими словами первый радиус эллипса я не представляю как можно подсчитать?
Еще по коду интересен момент почему вы используете разнородные координаты для подсчета dx и dy (для dx - это x1,x2, для dy уже price1, price2, а не те же y1,y2)

Но ведь главное у вас все работает! Честно говоря глядя на то как вычисляется dx в коде и считаются координаты вывода эллипса ey1,ey2 я не понимаю как это работает, вы уж меня извините.

Надеюсь получить разъяснения по коду, может они до конца происнят ситуацию.
:)

x1, x2, y1, y1 - координаты концов линии в пикселах
date1, date2 - даты концов линии (x - координаты)
price1, price2 - цены на концах линии (y - координаты)
diagram.scale - масштаб диаграммы 1, 2, 4, 8
16x2 - ширина клетки по горизонтали в пикселах
MinPoint это да минимальный шаг валюты

разнородные координаты это неважно я ищу пропорцию отдельно для x и y

насколько я сейчас вспоминаю код dx выходит в барах а dy в пунктах, дальше определяем хитрую длину линии уж не знаю в каких единицах :) и от нее вычисляем по пропорции расстояние dx и dy эллипса
Asta la vista
Mike

Grad
Сообщения: 7
Зарегистрирован: Вт апр 17, 2007 6:55 pm

Re: Дуги Фибоначи

#5 Сообщение Grad » Чт ноя 01, 2007 6:21 pm

Terranin писал(а):насколько я сейчас вспоминаю код dx выходит в барах а dy в пунктах, дальше определяем хитрую длину линии уж не знаю в каких единицах :) и от нее вычисляем по пропорции расстояние dx и dy эллипса
Таким образом получается, что вы определяете dx в барах, dy в пунктах, затем в этих разнородных координатах определяете длину линии. Потом ищете в зависимости от очередного уровня Фибоначи длину отрезка линии flen. И вот здесь начинается самое интересное.
Этот отрезок flen, вычисленный в разнородных координатах, потом преобразованный назад в пиксели:
dx := round(flen*16/diagram.scale), он и становится в результате первым радиусом эллипса. А потом этот же отрезок используется для вычисления длины второго радиуса как его длина в пунктах.

Фантастика, но это действительно на практике работает. Но вот теоретически взглянув на код я бы никогда не сказал что дуги будут правильно рисоваться!
Еще раз спасибо за код!

Аватара пользователя
Terranin
Site Admin
Сообщения: 846
Зарегистрирован: Вс июл 23, 2006 12:01 pm

Re: Дуги Фибоначи

#6 Сообщение Terranin » Чт ноя 01, 2007 6:54 pm

Grad писал(а):
Terranin писал(а):насколько я сейчас вспоминаю код dx выходит в барах а dy в пунктах, дальше определяем хитрую длину линии уж не знаю в каких единицах :) и от нее вычисляем по пропорции расстояние dx и dy эллипса
Таким образом получается, что вы определяете dx в барах, dy в пунктах, затем в этих разнородных координатах определяете длину линии. Потом ищете в зависимости от очередного уровня Фибоначи длину отрезка линии flen. И вот здесь начинается самое интересное.
Этот отрезок flen, вычисленный в разнородных координатах, потом преобразованный назад в пиксели:
dx := round(flen*16/diagram.scale), он и становится в результате первым радиусом эллипса. А потом этот же отрезок используется для вычисления длины второго радиуса как его длина в пунктах.

Фантастика, но это действительно на практике работает. Но вот теоретически взглянув на код я бы никогда не сказал что дуги будут правильно рисоваться!
Еще раз спасибо за код!
Ага, :) я уже не помню в чем была идея но она работает.
Asta la vista
Mike

Аватара пользователя
Николай Тарасов
Сообщения: 144
Зарегистрирован: Чт авг 27, 2009 4:39 pm
Откуда: Екатеринбург
Контактная информация:

Re: Дуги Фибоначи

#7 Сообщение Николай Тарасов » Сб янв 29, 2011 5:57 pm

Terranin писал(а):
Grad писал(а):
Terranin писал(а):насколько я сейчас вспоминаю код dx выходит в барах а dy в пунктах, дальше определяем хитрую длину линии уж не знаю в каких единицах :) и от нее вычисляем по пропорции расстояние dx и dy эллипса
Таким образом получается, что вы определяете dx в барах, dy в пунктах, затем в этих разнородных координатах определяете длину линии. Потом ищете в зависимости от очередного уровня Фибоначи длину отрезка линии flen. И вот здесь начинается самое интересное.
Этот отрезок flen, вычисленный в разнородных координатах, потом преобразованный назад в пиксели:
dx := round(flen*16/diagram.scale), он и становится в результате первым радиусом эллипса. А потом этот же отрезок используется для вычисления длины второго радиуса как его длина в пунктах.

Фантастика, но это действительно на практике работает. Но вот теоретически взглянув на код я бы никогда не сказал что дуги будут правильно рисоваться!
Еще раз спасибо за код!
Ага, :) я уже не помню в чем была идея но она работает.
Рекомендую почитать на досуге: http://gann.su
Это собрание сочинений Ганна В.Д. и не только.
Для расширения сознания, так сказать.
Я желаю всем счастья.

Аватара пользователя
alshaboz
Сообщения: 6
Зарегистрирован: Ср дек 28, 2011 5:55 pm

Дуги фибоначи

#8 Сообщение alshaboz » Сб сен 29, 2012 5:19 pm

При установке на график дуги Фибоначчи видны как три параллельные прямые (в режиме "Закрытый эллипс" - шесть).
Как получить нормальные дуги?

FT Support
Сообщения: 329
Зарегистрирован: Сб июл 11, 2009 3:59 pm

#9 Сообщение FT Support » Пн окт 01, 2012 2:51 pm

Похоже у Вас просто очень вытянутый эллипс получился, это зависит от таймфрейма

Аватара пользователя
alshaboz
Сообщения: 6
Зарегистрирован: Ср дек 28, 2011 5:55 pm

Дуги фибоначи

#10 Сообщение alshaboz » Сб окт 06, 2012 1:39 pm

Такое поведение Дуг Фибо появляется на котировках, отличных от котировок Форекс. Например, как у меня на текущий момент: фьючерс на индекс РТС с Авг 2005 по Сен 2012. Там ценовые значения порядка "153780". Предполагаю, что в этом и дело. Проверил на котировках Форекс - там дуги нормально рисуются.
Понимаю, что FT "заточен" для Форекс и нельзя требовать бесконечной универсальности. Всё же обращаю Ваше внимание на то, что в MT4 в параметрах "дуг" есть параметр "Масштаб", которого нет у "дуг" в FT и с помощью которого можно было бы решить обсуждаемую проблему.
Без "дуг" нельзя воспользоваться таким инструментом, как векторы Ганна.
В нынешней редакции FT, как вариант, мне остаётся только попробовать подогнать делением котировки фьючерса под диапазоны котировок Форекса. Однако, это придётся делать позже. Слишком далеко я зашёл в тестировании фьючерса на других инструментах анализа и не хочется терять проект, пока не дойду до конца. (При сохранении и открытии проектов идут какие-то "непонятки" с потерей проектов. Обучатся приходится на ходу, тестировать FT на работоспособность и выявлять его свойства пока некогда, контекстная справка - сами знаете какая).

Аватара пользователя
alshaboz
Сообщения: 6
Зарегистрирован: Ср дек 28, 2011 5:55 pm

#11 Сообщение alshaboz » Ср окт 24, 2012 3:17 pm

Ни ответа, ни привета.

FT Support
Сообщения: 329
Зарегистрирован: Сб июл 11, 2009 3:59 pm

#12 Сообщение FT Support » Пт окт 26, 2012 6:25 am

Здравствуйте, Вы сами ответили на свой вопрос :)

ФТ действительно заточен для работы с форекс котировками и котировки "большого порядка" могут вызывать проблемы. И действительно эти проблемы можно решить поделив котировки на 10/100/1000 (в зависимости от данных).

В следующих версиях мы постараемся решить эту проблему и добавить поддержку котировок "большого порядка"

Ответить